[Libreoffice-commits] core.git: Branch 'private/swe/libreoffice-5-2+backports' - 16 commits - config_host/config_gtk3_kde5.h.in config_host/config_kde5.h.in config_host/config_qt5.h.in config_host/config_vclplug.h.in config_host.mk.in configure.ac .gitreview include/sfx2 include/xmloff postprocess/Rdb_services.mk RepositoryExternal.mk Repository.mk scp2/InstallScript_setup_osl.mk scp2/Module_scp2.mk sfx2/source shell/Library_kde5be.mk shell/Module_shell.mk shell/source sw/qa vcl/CustomTarget_gtk3_kde5_moc.mk vcl/Executable_lo_kde5filepicker.mk vcl/Library_vclplug_gtk3_kde5.mk vcl/Module_vcl.mk vcl/unx xmloff/source

Thorsten Behrens Thorsten.Behrens at CIB.de
Fri Jan 26 18:03:26 UTC 2018


Rebased ref, commits from common ancestor:
commit 84cc1137b18ca845bf91ad72939cf83b53bad867
Author: Thorsten Behrens <Thorsten.Behrens at CIB.de>
Date:   Fri Jan 26 16:13:23 2018 +0100

    tdf#115090 keep internal BaseModel alive long enough
    
    There's reams of code already preventing a close during save
    (SfxSaveGuard), but this looks equally effective. Avoids
    SfxBaseModel::dispose() pulling the rug under us, when
    SfxBaseModel::postEvent_Impl() wants to access parts of the
    interface containers during notification.
    
    Conflicts:
            include/sfx2/sfxbasemodel.hxx
            sfx2/source/doc/sfxbasemodel.cxx
    
    Change-Id: Iace1f9922c47a97ab2e798b577c6aec8a729da48

diff --git a/include/sfx2/sfxbasemodel.hxx b/include/sfx2/sfxbasemodel.hxx
index 8e678caf59e0..7bf694ac8787 100644
--- a/include/sfx2/sfxbasemodel.hxx
+++ b/include/sfx2/sfxbasemodel.hxx
@@ -869,7 +869,7 @@ private:
 
 private:
 
-    IMPL_SfxBaseModel_DataContainer*    m_pData ;
+    std::shared_ptr<IMPL_SfxBaseModel_DataContainer> m_pData;
     // cannot be held in m_pData, since it needs to be accessed in non-threadsafe context
     const bool                          m_bSupportEmbeddedScripts;
     const bool                          m_bSupportDocRecovery;
diff --git a/sfx2/source/doc/sfxbasemodel.cxx b/sfx2/source/doc/sfxbasemodel.cxx
index 6be889c2b9dd..0de1a2ca4f92 100644
--- a/sfx2/source/doc/sfxbasemodel.cxx
+++ b/sfx2/source/doc/sfxbasemodel.cxx
@@ -509,10 +509,6 @@ SfxBaseModel::SfxBaseModel( SfxObjectShell *pObjectShell )
 //  destructor
 SfxBaseModel::~SfxBaseModel()
 {
-    //In SvxDrawingLayerImport when !xTargetDocument the fallback SvxUnoDrawingModel created there
-    //never gets disposed called on it, so m_pData leaks.
-    delete m_pData;
-    m_pData = nullptr;
 }
 
 //  XInterface
@@ -775,9 +771,7 @@ void SAL_CALL SfxBaseModel::dispose() throw(RuntimeException, std::exception)
     // m_pData member must be set to zero before 0delete is called to
     // force disposed exception whenever someone tries to access our
     // instance while in the dtor.
-    IMPL_SfxBaseModel_DataContainer* pData = m_pData;
-    m_pData = nullptr;
-    delete pData;
+    m_pData.reset();
 }
 
 
@@ -1497,7 +1491,7 @@ void SAL_CALL SfxBaseModel::storeSelf( const    Sequence< beans::PropertyValue >
     if ( m_pData->m_pObjectShell.Is() )
     {
         m_pData->m_pObjectShell->AddLog( OSL_LOG_PREFIX "storeSelf" );
-        SfxSaveGuard aSaveGuard(this, m_pData);
+        SfxSaveGuard aSaveGuard(this, m_pData.get());
 
         bool bCheckIn = false;
         for ( sal_Int32 nInd = 0; nInd < aSeqArgs.getLength(); nInd++ )
@@ -1626,7 +1620,7 @@ void SAL_CALL SfxBaseModel::storeAsURL( const   OUString&                   rURL
     if ( m_pData->m_pObjectShell.Is() )
     {
         m_pData->m_pObjectShell->AddLog( OSL_LOG_PREFIX "storeAsURL" );
-        SfxSaveGuard aSaveGuard(this, m_pData);
+        SfxSaveGuard aSaveGuard(this, m_pData.get());
 
         impl_store( rURL, rArgs, false );
 
@@ -1667,7 +1661,7 @@ void SAL_CALL SfxBaseModel::storeToURL( const   OUString&                   rURL
     if ( m_pData->m_pObjectShell.Is() )
     {
         m_pData->m_pObjectShell->AddLog( OSL_LOG_PREFIX "storeToURL" );
-        SfxSaveGuard aSaveGuard(this, m_pData);
+        SfxSaveGuard aSaveGuard(this, m_pData.get());
         try {
             impl_store(rURL, rArgs, true);
         }
@@ -1692,7 +1686,7 @@ void SAL_CALL SfxBaseModel::storeToRecoveryFile( const OUString& i_TargetLocatio
     SfxModelGuard aGuard( *this );
 
     // delegate
-    SfxSaveGuard aSaveGuard( this, m_pData );
+    SfxSaveGuard aSaveGuard( this, m_pData.get() );
     impl_store( i_TargetLocation, i_MediaDescriptor, true );
 
     // no need for subsequent calls to storeToRecoveryFile, unless we're modified, again
@@ -3146,6 +3140,9 @@ void SfxBaseModel::postEvent_Impl( const OUString& aName, const Reference< frame
     if ( impl_isDisposed() )
         return;
 
+    // keep m_pData alive, if notified target would close the document
+    std::shared_ptr<IMPL_SfxBaseModel_DataContainer> pData(m_pData);
+
     DBG_ASSERT( !aName.isEmpty(), "Empty event name!" );
     if (aName.isEmpty())
         return;
@@ -3863,7 +3860,7 @@ bool SfxBaseModel::impl_getPrintHelper()
     aValues[0] <<= Reference < frame::XModel > (static_cast< frame::XModel* >(this), UNO_QUERY );
     xInit->initialize( aValues );
     Reference < view::XPrintJobBroadcaster > xBrd( m_pData->m_xPrintable, UNO_QUERY );
-    xBrd->addPrintJobListener( new SfxPrintHelperListener_Impl( m_pData ) );
+    xBrd->addPrintJobListener( new SfxPrintHelperListener_Impl( m_pData.get() ) );
     return true;
 }
 
commit 64b3be08126a0a9f51b4547a3203716348035774
Author: Thorsten Behrens <Thorsten.Behrens at CIB.de>
Date:   Fri Jan 26 18:55:13 2018 +0100

    gtk3_kde5: gcc WaE fixes
    
    Change-Id: I50c4c18df6dc47efb8a356f253c8a06bd3b3b40a

diff --git a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.cxx b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.cxx
index d039dce03c5f..b2cfabe94ce1 100644
--- a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.cxx
+++ b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.cxx
@@ -41,6 +41,10 @@
 #include <gdk/gdkx.h>
 #include <unx/gtk/gtkdata.hxx>
 
+#ifdef __GNUC__
+// since boost/filesystem/path.hpp is massively unclean
+#pragma GCC diagnostic ignored "-Wshadow"
+#endif
 #include <boost/filesystem/path.hpp>
 
 using namespace ::com::sun::star::ui::dialogs;
diff --git a/vcl/unx/gtk3_kde5/kde5_filepicker.cxx b/vcl/unx/gtk3_kde5/kde5_filepicker.cxx
index d774ebc2834e..f587ecf7667b 100644
--- a/vcl/unx/gtk3_kde5/kde5_filepicker.cxx
+++ b/vcl/unx/gtk3_kde5/kde5_filepicker.cxx
@@ -34,8 +34,8 @@
 
 // KDE5FilePicker
 
-KDE5FilePicker::KDE5FilePicker(QObject* parent)
-    : QObject(parent)
+KDE5FilePicker::KDE5FilePicker(QObject* _parent)
+    : QObject(_parent)
     , _dialog(new QFileDialog(nullptr, {}, QDir::homePath()))
     , _extraControls(new QWidget)
     , _layout(new QFormLayout(_extraControls))
diff --git a/vcl/unx/gtk3_kde5/kde5_filepicker_ipc.cxx b/vcl/unx/gtk3_kde5/kde5_filepicker_ipc.cxx
index 26c19f6b4c9b..eac97d7ec1ab 100644
--- a/vcl/unx/gtk3_kde5/kde5_filepicker_ipc.cxx
+++ b/vcl/unx/gtk3_kde5/kde5_filepicker_ipc.cxx
@@ -53,8 +53,8 @@ void sendIpcArg(std::ostream& stream, const QStringList& list)
     }
 }
 
-FilePickerIpc::FilePickerIpc(KDE5FilePicker* filePicker, QObject* parent)
-    : QObject(parent)
+FilePickerIpc::FilePickerIpc(KDE5FilePicker* filePicker, QObject* _parent)
+    : QObject(_parent)
     , m_filePicker(filePicker)
     , m_stdinNotifier(new QSocketNotifier(fileno(stdin), QSocketNotifier::Read, this))
 {
commit 6fcd45e5ee97c2fdbc0eae9d7e1f2260a90d34f0
Author: Milian Wolff <milian.wolff at kdab.com>
Date:   Thu Jan 25 14:08:28 2018 +0100

    lo_kde5filepicker: cleanup main and add version and help options
    
    This way users can figure out what this tool is about. Most notably,
    you can run it now with `-h, --help` as one would expect.
    
    Change-Id: If8dd3142bdcc96d2962a2647b2187d75666b9394
    (cherry picked from commit 63d9c1f8bf94ea16f08e78a5f2667d5e4d96c22e)

diff --git a/vcl/unx/gtk3_kde5/kde5_lo_filepicker_main.cxx b/vcl/unx/gtk3_kde5/kde5_lo_filepicker_main.cxx
index c17236d281a0..d25af0afee70 100644
--- a/vcl/unx/gtk3_kde5/kde5_lo_filepicker_main.cxx
+++ b/vcl/unx/gtk3_kde5/kde5_lo_filepicker_main.cxx
@@ -21,14 +21,29 @@
 #include "kde5_filepicker_ipc.hxx"
 
 #include <QApplication>
+#include <QDebug>
+#include <QCommandLineParser>
 
-#include <iostream>
+#include <config_version.h>
 
 int main(int argc, char** argv)
 {
+    QApplication::setOrganizationName("LibreOffice");
+    QApplication::setOrganizationDomain("libreoffice.org");
     QApplication::setApplicationName(QStringLiteral("lo_kde5filepicker"));
-    QApplication app(argc, argv);
     QApplication::setQuitOnLastWindowClosed(false);
+    QApplication::setApplicationVersion(LIBO_VERSION_DOTTED);
+
+    QApplication app(argc, argv);
+
+    QCommandLineParser parser;
+    parser.setApplicationDescription(
+        QObject::tr("Helper executable for LibreOffice KDE/Plasma integration.\n"
+                    "Do not run this executable directly. Rather, use it indirectly via "
+                    "the gtk3_kde5 VCL plugin (SAL_USE_VCLPLUGIN=gtk3_kde5)."));
+    parser.addVersionOption();
+    parser.addHelpOption();
+    parser.process(app);
 
     KDE5FilePicker filePicker;
     FilePickerIpc ipc(&filePicker);
commit e861e5ea608e7cf2f7b621785f97aff2c0aeaee8
Author: Milian Wolff <milian.wolff at kdab.com>
Date:   Thu Jan 25 14:05:37 2018 +0100

    Properly restore size of KDE5 file picker dialog
    
    The event filter we installed prevented the show event from reaching
    the KDEPlatformFileDialogHelper::show method. This prevented the
    dialog from being restored to the size chosen by the user previously.
    
    Change-Id: I7af457f19f59d27bd104f8f70d9f4767da6641ee
    (cherry picked from commit 56af01e727760bbe1ed194d7743e2785e6d267d7)

diff --git a/vcl/unx/gtk3_kde5/kde5_filepicker.cxx b/vcl/unx/gtk3_kde5/kde5_filepicker.cxx
index 9b3f21db92e9..d774ebc2834e 100644
--- a/vcl/unx/gtk3_kde5/kde5_filepicker.cxx
+++ b/vcl/unx/gtk3_kde5/kde5_filepicker.cxx
@@ -235,7 +235,6 @@ bool KDE5FilePicker::eventFilter(QObject* o, QEvent* e)
             KWindowSystem::setMainWindow(w, _winId);
             if (auto* fileWidget = w->findChild<KFileWidget*>({}, Qt::FindDirectChildrenOnly))
                 fileWidget->setCustomWidget(_extraControls);
-            return false;
         }
     }
     return QObject::eventFilter(o, e);
commit 4dda538fe2912336e629b8a5dbfed0de69550084
Author: Milian Wolff <milian.wolff at kdab.com>
Date:   Thu Jan 25 13:53:25 2018 +0100

    Properly quit the lo_kde5filepicker on Quit command
    
    Quitting the event loop is not enough, we also have to get out
    of the readCommands loop. Return false for this scenario. Also
    exit the command when an unhandled command comes in, we cannot
    really recover the stream from this anyways.
    
    Change-Id: I7d58724ea0364565e476516d5645cb436ce1d461
    (cherry picked from commit 0e8ae140e803af294d0e6439738f2c6e3049b455)

diff --git a/vcl/unx/gtk3_kde5/kde5_filepicker_ipc.cxx b/vcl/unx/gtk3_kde5/kde5_filepicker_ipc.cxx
index 082864066d16..26c19f6b4c9b 100644
--- a/vcl/unx/gtk3_kde5/kde5_filepicker_ipc.cxx
+++ b/vcl/unx/gtk3_kde5/kde5_filepicker_ipc.cxx
@@ -65,14 +65,17 @@ FilePickerIpc::~FilePickerIpc() = default;
 
 void FilePickerIpc::readCommands()
 {
-    while (!std::cin.eof())
+    while (readCommand())
     {
-        readCommand();
+        // read next command
     }
 }
 
-void FilePickerIpc::readCommand()
+bool FilePickerIpc::readCommand()
 {
+    if (std::cin.eof())
+        return false;
+
     uint64_t messageId = 0;
     Commands command;
     readIpcArgs(std::cin, messageId, command);
@@ -84,45 +87,45 @@ void FilePickerIpc::readCommand()
             QString title;
             readIpcArgs(std::cin, title);
             m_filePicker->setTitle(title);
-            return;
+            return true;
         }
         case Commands::SetWinId:
         {
             sal_uIntPtr winId = 0;
             readIpcArgs(std::cin, winId);
             m_filePicker->setWinId(winId);
-            return;
+            return true;
         }
         case Commands::Execute:
         {
             sendIpcArgs(std::cout, messageId, m_filePicker->execute());
-            return;
+            return true;
         }
         case Commands::SetMultiSelectionMode:
         {
             bool multiSelection = false;
             readIpcArgs(std::cin, multiSelection);
             m_filePicker->setMultiSelectionMode(multiSelection);
-            return;
+            return true;
         }
         case Commands::SetDefaultName:
         {
             QString name;
             readIpcArgs(std::cin, name);
             m_filePicker->setDefaultName(name);
-            return;
+            return true;
         }
         case Commands::SetDisplayDirectory:
         {
             QString dir;
             readIpcArgs(std::cin, dir);
             m_filePicker->setDisplayDirectory(dir);
-            return;
+            return true;
         }
         case Commands::GetDisplayDirectory:
         {
             sendIpcArgs(std::cout, messageId, m_filePicker->getDisplayDirectory());
-            return;
+            return true;
         }
         case Commands::GetSelectedFiles:
         {
@@ -145,26 +148,26 @@ void FilePickerIpc::readCommand()
                 files << url.toString();
             }
             sendIpcArgs(std::cout, messageId, files);
-            return;
+            return true;
         }
         case Commands::AppendFilter:
         {
             QString title, filter;
             readIpcArgs(std::cin, title, filter);
             m_filePicker->appendFilter(title, filter);
-            return;
+            return true;
         }
         case Commands::SetCurrentFilter:
         {
             QString title;
             readIpcArgs(std::cin, title);
             m_filePicker->setCurrentFilter(title);
-            return;
+            return true;
         }
         case Commands::GetCurrentFilter:
         {
             sendIpcArgs(std::cout, messageId, m_filePicker->getCurrentFilter());
-            return;
+            return true;
         }
         case Commands::SetValue:
         {
@@ -173,7 +176,7 @@ void FilePickerIpc::readCommand()
             bool value = false;
             readIpcArgs(std::cin, controlId, nControlAction, value);
             m_filePicker->setValue(controlId, nControlAction, value);
-            return;
+            return true;
         }
         case Commands::GetValue:
         {
@@ -181,7 +184,7 @@ void FilePickerIpc::readCommand()
             sal_Int16 nControlAction = 0;
             readIpcArgs(std::cin, controlId, nControlAction);
             sendIpcArgs(std::cout, messageId, m_filePicker->getValue(controlId, nControlAction));
-            return;
+            return true;
         }
         case Commands::EnableControl:
         {
@@ -189,7 +192,7 @@ void FilePickerIpc::readCommand()
             bool enabled = false;
             readIpcArgs(std::cin, controlId, enabled);
             m_filePicker->enableControl(controlId, enabled);
-            return;
+            return true;
         }
         case Commands::SetLabel:
         {
@@ -197,14 +200,14 @@ void FilePickerIpc::readCommand()
             QString label;
             readIpcArgs(std::cin, controlId, label);
             m_filePicker->setLabel(controlId, label);
-            return;
+            return true;
         }
         case Commands::GetLabel:
         {
             sal_Int16 controlId = 0;
             readIpcArgs(std::cin, controlId);
             sendIpcArgs(std::cout, messageId, m_filePicker->getLabel(controlId));
-            return;
+            return true;
         }
         case Commands::AddCheckBox:
         {
@@ -213,27 +216,29 @@ void FilePickerIpc::readCommand()
             QString label;
             readIpcArgs(std::cin, controlId, hidden, label);
             m_filePicker->addCheckBox(controlId, label, hidden);
-            return;
+            return true;
         }
         case Commands::Initialize:
         {
             bool saveDialog = false;
             readIpcArgs(std::cin, saveDialog);
             m_filePicker->initialize(saveDialog);
-            return;
+            return true;
         }
         case Commands::EnablePickFolderMode:
         {
             m_filePicker->enableFolderMode();
-            return;
+            return true;
         }
         case Commands::Quit:
         {
             QCoreApplication::quit();
-            return;
+            return false;
         }
     }
     qWarning() << "unhandled command " << static_cast<uint16_t>(command);
+    QCoreApplication::exit(1);
+    return false;
 }
 
 #include <kde5_filepicker_ipc.moc>
diff --git a/vcl/unx/gtk3_kde5/kde5_filepicker_ipc.hxx b/vcl/unx/gtk3_kde5/kde5_filepicker_ipc.hxx
index d04ad24e2908..ff5abd250a2a 100644
--- a/vcl/unx/gtk3_kde5/kde5_filepicker_ipc.hxx
+++ b/vcl/unx/gtk3_kde5/kde5_filepicker_ipc.hxx
@@ -36,7 +36,7 @@ private Q_SLOTS:
     void readCommands();
 
 private:
-    void readCommand();
+    bool readCommand();
 
     KDE5FilePicker* m_filePicker = nullptr;
     QSocketNotifier* m_stdinNotifier = nullptr;
commit 3f84d718e66393da4e5e9629e83df2b5c53ef7f7
Author: Milian Wolff <milian.wolff at kdab.com>
Date:   Thu Jan 25 10:44:42 2018 +0100

    Fix build in 5.2 branch
    
    - add throw specifications
    - remove epoxy external
    - use the old string API for getResString
    - cast aWindow to sal_uIntPtr
    
    Change-Id: Ie02c98f3b34d43db6010f72771ef01a43850c2f3

diff --git a/shell/source/backends/kde5be/kde5backend.cxx b/shell/source/backends/kde5be/kde5backend.cxx
index c89869579159..57f955cec1ad 100644
--- a/shell/source/backends/kde5be/kde5backend.cxx
+++ b/shell/source/backends/kde5be/kde5backend.cxx
@@ -76,47 +76,47 @@ public:
 private:
     virtual ~Service() {}
 
-    virtual OUString SAL_CALL getImplementationName() override
+    virtual OUString SAL_CALL getImplementationName() throw (::css::uno::RuntimeException, ::std::exception) override
     {
         return getServiceImplementationName();
     }
 
-    virtual sal_Bool SAL_CALL supportsService(OUString const& ServiceName) override
+    virtual sal_Bool SAL_CALL supportsService(OUString const& ServiceName) throw (com::sun::star::uno::RuntimeException, std::exception) override
     {
         return ServiceName == getSupportedServiceNames()[0];
     }
 
-    virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override
+    virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() throw (::css::uno::RuntimeException, ::std::exception) override
     {
         return getServiceSupportedServiceNames();
     }
 
-    virtual css::uno::Reference<css::beans::XPropertySetInfo> SAL_CALL getPropertySetInfo() override
+    virtual css::uno::Reference<css::beans::XPropertySetInfo> SAL_CALL getPropertySetInfo() throw (com::sun::star::uno::RuntimeException, std::exception) override
     {
         return css::uno::Reference<css::beans::XPropertySetInfo>();
     }
 
-    virtual void SAL_CALL setPropertyValue(OUString const&, css::uno::Any const&) override;
+    virtual void SAL_CALL setPropertyValue(OUString const&, css::uno::Any const&) throw (::css::beans::UnknownPropertyException, ::css::beans::PropertyVetoException, ::css::lang::IllegalArgumentException, ::css::lang::WrappedTargetException, ::css::uno::RuntimeException, ::std::exception) override;
 
-    virtual css::uno::Any SAL_CALL getPropertyValue(OUString const& PropertyName) override;
+    virtual css::uno::Any SAL_CALL getPropertyValue(OUString const& PropertyName) throw (com::sun::star::beans::UnknownPropertyException, com::sun::star::lang::WrappedTargetException, com::sun::star::uno::RuntimeException, std::exception) override;
 
     virtual void SAL_CALL addPropertyChangeListener(
-        OUString const&, css::uno::Reference<css::beans::XPropertyChangeListener> const&) override
+        OUString const&, css::uno::Reference<css::beans::XPropertyChangeListener> const&) throw (com::sun::star::beans::UnknownPropertyException, com::sun::star::lang::WrappedTargetException, com::sun::star::uno::RuntimeException, std::exception) override
     {
     }
 
     virtual void SAL_CALL removePropertyChangeListener(
-        OUString const&, css::uno::Reference<css::beans::XPropertyChangeListener> const&) override
+        OUString const&, css::uno::Reference<css::beans::XPropertyChangeListener> const&) throw (com::sun::star::beans::UnknownPropertyException, com::sun::star::lang::WrappedTargetException, com::sun::star::uno::RuntimeException, std::exception) override
     {
     }
 
     virtual void SAL_CALL addVetoableChangeListener(
-        OUString const&, css::uno::Reference<css::beans::XVetoableChangeListener> const&) override
+        OUString const&, css::uno::Reference<css::beans::XVetoableChangeListener> const&) throw (com::sun::star::beans::UnknownPropertyException, com::sun::star::lang::WrappedTargetException, com::sun::star::uno::RuntimeException, std::exception) override
     {
     }
 
     virtual void SAL_CALL removeVetoableChangeListener(
-        OUString const&, css::uno::Reference<css::beans::XVetoableChangeListener> const&) override
+        OUString const&, css::uno::Reference<css::beans::XVetoableChangeListener> const&) throw (com::sun::star::beans::UnknownPropertyException, com::sun::star::lang::WrappedTargetException, com::sun::star::uno::RuntimeException, std::exception) override
     {
     }
 
@@ -202,13 +202,13 @@ Service::Service()
     }
 }
 
-void Service::setPropertyValue(OUString const&, css::uno::Any const&)
+void Service::setPropertyValue(OUString const&, css::uno::Any const&) throw (::css::beans::UnknownPropertyException, ::css::beans::PropertyVetoException, ::css::lang::IllegalArgumentException, ::css::lang::WrappedTargetException, ::css::uno::RuntimeException, ::std::exception)
 {
     throw css::lang::IllegalArgumentException(OUString("setPropertyValue not supported"),
                                               static_cast<cppu::OWeakObject*>(this), -1);
 }
 
-css::uno::Any Service::getPropertyValue(OUString const& PropertyName)
+css::uno::Any Service::getPropertyValue(OUString const& PropertyName) throw (com::sun::star::beans::UnknownPropertyException, com::sun::star::lang::WrappedTargetException, com::sun::star::uno::RuntimeException, std::exception)
 {
     if (PropertyName == "EnableATToolSupport" || PropertyName == "ExternalMailer"
         || PropertyName == "SourceViewFontHeight" || PropertyName == "SourceViewFontName"
diff --git a/vcl/Executable_lo_kde5filepicker.mk b/vcl/Executable_lo_kde5filepicker.mk
index 2eee2cd8711b..b53389a3ed6b 100644
--- a/vcl/Executable_lo_kde5filepicker.mk
+++ b/vcl/Executable_lo_kde5filepicker.mk
@@ -64,7 +64,6 @@ $(eval $(call gb_Executable_use_libraries,lo_kde5filepicker,\
 
 $(eval $(call gb_Executable_use_externals,lo_kde5filepicker,\
 	boost_headers \
-	epoxy \
 	kde5 \
 	dbus \
 ))
diff --git a/vcl/Library_vclplug_gtk3_kde5.mk b/vcl/Library_vclplug_gtk3_kde5.mk
index eaff74cad35c..a933f6ae56c0 100644
--- a/vcl/Library_vclplug_gtk3_kde5.mk
+++ b/vcl/Library_vclplug_gtk3_kde5.mk
@@ -77,7 +77,6 @@ $(eval $(call gb_Library_use_libraries,vclplug_gtk3_kde5,\
 $(eval $(call gb_Library_use_externals,vclplug_gtk3_kde5,\
 	boost_headers \
 	boost_filesystem \
-	epoxy \
 	dbus \
 ))
 
diff --git a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker.cxx b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker.cxx
index 8c983996b791..c23a35716779 100644
--- a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker.cxx
+++ b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker.cxx
@@ -32,15 +32,13 @@
 
 #include <osl/mutex.hxx>
 
-#include <fpicker/strings.hrc>
-
 #include "FPServiceInfo.hxx"
 
 #undef Region
 
 #include <unx/geninst.h>
 
-#include <strings.hrc>
+#include <svids.hrc>
 
 using namespace ::com::sun::star;
 using namespace ::com::sun::star::ui::dialogs;
@@ -76,42 +74,45 @@ Gtk3KDE5FilePicker::Gtk3KDE5FilePicker(const uno::Reference<uno::XComponentConte
 Gtk3KDE5FilePicker::~Gtk3KDE5FilePicker() = default;
 
 void SAL_CALL
-Gtk3KDE5FilePicker::addFilePickerListener(const uno::Reference<XFilePickerListener>& xListener)
+Gtk3KDE5FilePicker::addFilePickerListener(const uno::Reference<XFilePickerListener>& xListener) throw (::css::uno::RuntimeException, ::std::exception)
 {
     SolarMutexGuard aGuard;
     m_xListener = xListener;
 }
 
 void SAL_CALL
-Gtk3KDE5FilePicker::removeFilePickerListener(const uno::Reference<XFilePickerListener>&)
+Gtk3KDE5FilePicker::removeFilePickerListener(const uno::Reference<XFilePickerListener>&) throw (::css::uno::RuntimeException, ::std::exception)
 {
     SolarMutexGuard aGuard;
     m_xListener.clear();
 }
 
-void SAL_CALL Gtk3KDE5FilePicker::setTitle(const OUString& title)
+void SAL_CALL Gtk3KDE5FilePicker::setTitle(const OUString& title) throw (::css::uno::RuntimeException, ::std::exception)
 {
     m_ipc.sendCommand(Commands::SetTitle, title);
 }
 
-sal_Int16 SAL_CALL Gtk3KDE5FilePicker::execute() { return m_ipc.execute(); }
+sal_Int16 SAL_CALL Gtk3KDE5FilePicker::execute() throw (::css::uno::RuntimeException, ::std::exception)
+{
+    return m_ipc.execute();
+}
 
-void SAL_CALL Gtk3KDE5FilePicker::setMultiSelectionMode(sal_Bool multiSelect)
+void SAL_CALL Gtk3KDE5FilePicker::setMultiSelectionMode(sal_Bool multiSelect) throw (::css::uno::RuntimeException, ::std::exception)
 {
     m_ipc.sendCommand(Commands::SetMultiSelectionMode, bool(multiSelect));
 }
 
-void SAL_CALL Gtk3KDE5FilePicker::setDefaultName(const OUString& name)
+void SAL_CALL Gtk3KDE5FilePicker::setDefaultName(const OUString& name) throw (::css::uno::RuntimeException, ::std::exception)
 {
     m_ipc.sendCommand(Commands::SetDefaultName, name);
 }
 
-void SAL_CALL Gtk3KDE5FilePicker::setDisplayDirectory(const OUString& dir)
+void SAL_CALL Gtk3KDE5FilePicker::setDisplayDirectory(const OUString& dir) throw (::css::uno::RuntimeException, ::std::exception)
 {
     m_ipc.sendCommand(Commands::SetDisplayDirectory, dir);
 }
 
-OUString SAL_CALL Gtk3KDE5FilePicker::getDisplayDirectory()
+OUString SAL_CALL Gtk3KDE5FilePicker::getDisplayDirectory() throw (::css::uno::RuntimeException, ::std::exception)
 {
     auto id = m_ipc.sendCommand(Commands::GetDisplayDirectory);
     OUString dir;
@@ -119,7 +120,7 @@ OUString SAL_CALL Gtk3KDE5FilePicker::getDisplayDirectory()
     return dir;
 }
 
-uno::Sequence<OUString> SAL_CALL Gtk3KDE5FilePicker::getFiles()
+uno::Sequence<OUString> SAL_CALL Gtk3KDE5FilePicker::getFiles() throw (::css::uno::RuntimeException, ::std::exception)
 {
     uno::Sequence<OUString> seq = getSelectedFiles();
     if (seq.getLength() > 1)
@@ -127,7 +128,7 @@ uno::Sequence<OUString> SAL_CALL Gtk3KDE5FilePicker::getFiles()
     return seq;
 }
 
-uno::Sequence<OUString> SAL_CALL Gtk3KDE5FilePicker::getSelectedFiles()
+uno::Sequence<OUString> SAL_CALL Gtk3KDE5FilePicker::getSelectedFiles() throw (::css::uno::RuntimeException, ::std::exception)
 {
     auto id = m_ipc.sendCommand(Commands::GetSelectedFiles);
     uno::Sequence<OUString> seq;
@@ -135,17 +136,17 @@ uno::Sequence<OUString> SAL_CALL Gtk3KDE5FilePicker::getSelectedFiles()
     return seq;
 }
 
-void SAL_CALL Gtk3KDE5FilePicker::appendFilter(const OUString& title, const OUString& filter)
+void SAL_CALL Gtk3KDE5FilePicker::appendFilter(const OUString& title, const OUString& filter) throw (::css::uno::RuntimeException, ::std::exception)
 {
     m_ipc.sendCommand(Commands::AppendFilter, title, filter);
 }
 
-void SAL_CALL Gtk3KDE5FilePicker::setCurrentFilter(const OUString& title)
+void SAL_CALL Gtk3KDE5FilePicker::setCurrentFilter(const OUString& title) throw (::css::uno::RuntimeException, ::std::exception)
 {
     m_ipc.sendCommand(Commands::SetCurrentFilter, title);
 }
 
-OUString SAL_CALL Gtk3KDE5FilePicker::getCurrentFilter()
+OUString SAL_CALL Gtk3KDE5FilePicker::getCurrentFilter() throw (::css::uno::RuntimeException, ::std::exception)
 {
     auto id = m_ipc.sendCommand(Commands::GetCurrentFilter);
     OUString filter;
@@ -154,7 +155,7 @@ OUString SAL_CALL Gtk3KDE5FilePicker::getCurrentFilter()
 }
 
 void SAL_CALL Gtk3KDE5FilePicker::appendFilterGroup(const OUString& /*rGroupTitle*/,
-                                                    const uno::Sequence<beans::StringPair>& filters)
+                                                    const uno::Sequence<beans::StringPair>& filters) throw (::css::uno::RuntimeException, ::std::exception)
 {
     const sal_uInt16 length = filters.getLength();
     for (sal_uInt16 i = 0; i < length; ++i)
@@ -165,7 +166,7 @@ void SAL_CALL Gtk3KDE5FilePicker::appendFilterGroup(const OUString& /*rGroupTitl
 }
 
 void SAL_CALL Gtk3KDE5FilePicker::setValue(sal_Int16 controlId, sal_Int16 nControlAction,
-                                           const uno::Any& value)
+                                           const uno::Any& value) throw (::css::uno::RuntimeException, ::std::exception)
 {
     if (value.has<bool>())
     {
@@ -177,7 +178,7 @@ void SAL_CALL Gtk3KDE5FilePicker::setValue(sal_Int16 controlId, sal_Int16 nContr
     }
 }
 
-uno::Any SAL_CALL Gtk3KDE5FilePicker::getValue(sal_Int16 controlId, sal_Int16 nControlAction)
+uno::Any SAL_CALL Gtk3KDE5FilePicker::getValue(sal_Int16 controlId, sal_Int16 nControlAction) throw (::css::uno::RuntimeException, ::std::exception)
 {
     if (CHECKBOX_AUTOEXTENSION == controlId)
         // We ignore this one and rely on QFileDialog to provide the function.
@@ -195,17 +196,17 @@ uno::Any SAL_CALL Gtk3KDE5FilePicker::getValue(sal_Int16 controlId, sal_Int16 nC
     return uno::Any(value);
 }
 
-void SAL_CALL Gtk3KDE5FilePicker::enableControl(sal_Int16 controlId, sal_Bool enable)
+void SAL_CALL Gtk3KDE5FilePicker::enableControl(sal_Int16 controlId, sal_Bool enable) throw (::css::uno::RuntimeException, ::std::exception)
 {
     m_ipc.sendCommand(Commands::EnableControl, controlId, bool(enable));
 }
 
-void SAL_CALL Gtk3KDE5FilePicker::setLabel(sal_Int16 controlId, const OUString& label)
+void SAL_CALL Gtk3KDE5FilePicker::setLabel(sal_Int16 controlId, const OUString& label) throw (::css::uno::RuntimeException, ::std::exception)
 {
     m_ipc.sendCommand(Commands::SetLabel, controlId, label);
 }
 
-OUString SAL_CALL Gtk3KDE5FilePicker::getLabel(sal_Int16 controlId)
+OUString SAL_CALL Gtk3KDE5FilePicker::getLabel(sal_Int16 controlId) throw (::css::uno::RuntimeException, ::std::exception)
 {
     auto id = m_ipc.sendCommand(Commands::GetLabel, controlId);
     OUString label;
@@ -215,7 +216,7 @@ OUString SAL_CALL Gtk3KDE5FilePicker::getLabel(sal_Int16 controlId)
 
 void Gtk3KDE5FilePicker::addCustomControl(sal_Int16 controlId)
 {
-    const char* resId = nullptr;
+    sal_Int32 resId = -1;
 
     switch (controlId)
     {
@@ -240,9 +241,6 @@ void Gtk3KDE5FilePicker::addCustomControl(sal_Int16 controlId)
         case CHECKBOX_SELECTION:
             resId = STR_FPICKER_SELECTION;
             break;
-        case CHECKBOX_GPGENCRYPTION:
-            resId = STR_FPICKER_GPGENCRYPT;
-            break;
         case PUSHBUTTON_PLAY:
             resId = STR_FPICKER_PLAY;
             break;
@@ -271,7 +269,6 @@ void Gtk3KDE5FilePicker::addCustomControl(sal_Int16 controlId)
         case CHECKBOX_LINK:
         case CHECKBOX_PREVIEW:
         case CHECKBOX_SELECTION:
-        case CHECKBOX_GPGENCRYPTION:
         {
             // the checkbox is created even for CHECKBOX_AUTOEXTENSION to simplify
             // code, but the checkbox is hidden and ignored
@@ -293,7 +290,7 @@ void Gtk3KDE5FilePicker::addCustomControl(sal_Int16 controlId)
     }
 }
 
-void SAL_CALL Gtk3KDE5FilePicker::initialize(const uno::Sequence<uno::Any>& args)
+void SAL_CALL Gtk3KDE5FilePicker::initialize(const uno::Sequence<uno::Any>& args) throw (::css::uno::Exception, ::css::uno::RuntimeException, ::std::exception)
 {
     // parameter checking
     uno::Any arg;
@@ -333,7 +330,6 @@ void SAL_CALL Gtk3KDE5FilePicker::initialize(const uno::Sequence<uno::Any>& args
         {
             saveDialog = true;
             addCustomControl(CHECKBOX_PASSWORD);
-            addCustomControl(CHECKBOX_GPGENCRYPTION);
             break;
         }
         case FILESAVE_AUTOEXTENSION_PASSWORD_FILTEROPTIONS:
@@ -341,7 +337,6 @@ void SAL_CALL Gtk3KDE5FilePicker::initialize(const uno::Sequence<uno::Any>& args
             saveDialog = true;
             addCustomControl(CHECKBOX_AUTOEXTENSION);
             addCustomControl(CHECKBOX_PASSWORD);
-            addCustomControl(CHECKBOX_GPGENCRYPTION);
             addCustomControl(CHECKBOX_FILTEROPTIONS);
             break;
         }
@@ -367,11 +362,6 @@ void SAL_CALL Gtk3KDE5FilePicker::initialize(const uno::Sequence<uno::Any>& args
             addCustomControl(PUSHBUTTON_PLAY);
             break;
 
-        case FILEOPEN_LINK_PLAY:
-            addCustomControl(CHECKBOX_LINK);
-            addCustomControl(PUSHBUTTON_PLAY);
-            break;
-
         case FILEOPEN_READONLY_VERSION:
             addCustomControl(CHECKBOX_READONLY);
             addCustomControl(LISTBOX_VERSION);
@@ -382,10 +372,6 @@ void SAL_CALL Gtk3KDE5FilePicker::initialize(const uno::Sequence<uno::Any>& args
             addCustomControl(CHECKBOX_PREVIEW);
             break;
 
-        case FILEOPEN_PREVIEW:
-            addCustomControl(CHECKBOX_PREVIEW);
-            break;
-
         default:
             OSL_TRACE("Unknown templates %d", templateId);
             return;
@@ -396,7 +382,7 @@ void SAL_CALL Gtk3KDE5FilePicker::initialize(const uno::Sequence<uno::Any>& args
     m_ipc.sendCommand(Commands::Initialize, saveDialog);
 }
 
-void SAL_CALL Gtk3KDE5FilePicker::cancel()
+void SAL_CALL Gtk3KDE5FilePicker::cancel() throw (::css::uno::RuntimeException, ::std::exception)
 {
     // TODO
 }
@@ -411,17 +397,17 @@ void Gtk3KDE5FilePicker::disposing(const lang::EventObject& rEvent)
     }
 }
 
-OUString SAL_CALL Gtk3KDE5FilePicker::getImplementationName()
+OUString SAL_CALL Gtk3KDE5FilePicker::getImplementationName() throw (::css::uno::RuntimeException, ::std::exception)
 {
     return OUString(FILE_PICKER_IMPL_NAME);
 }
 
-sal_Bool SAL_CALL Gtk3KDE5FilePicker::supportsService(const OUString& ServiceName)
+sal_Bool SAL_CALL Gtk3KDE5FilePicker::supportsService(const OUString& ServiceName) throw (::css::uno::RuntimeException, ::std::exception)
 {
     return cppu::supportsService(this, ServiceName);
 }
 
-uno::Sequence<OUString> SAL_CALL Gtk3KDE5FilePicker::getSupportedServiceNames()
+uno::Sequence<OUString> SAL_CALL Gtk3KDE5FilePicker::getSupportedServiceNames() throw (::css::uno::RuntimeException, ::std::exception)
 {
     return FilePicker_getSupportedServiceNames();
 }
diff --git a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker.hxx b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker.hxx
index 740382d9ec49..c02f8d96d917 100644
--- a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker.hxx
+++ b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker.hxx
@@ -57,39 +57,39 @@ public:
 
     // XFilePickerNotifier
     virtual void SAL_CALL addFilePickerListener(
-        const css::uno::Reference<css::ui::dialogs::XFilePickerListener>& xListener) override;
+        const css::uno::Reference<css::ui::dialogs::XFilePickerListener>& xListener) throw (::css::uno::RuntimeException, ::std::exception) override;
     virtual void SAL_CALL removeFilePickerListener(
-        const css::uno::Reference<css::ui::dialogs::XFilePickerListener>& xListener) override;
+        const css::uno::Reference<css::ui::dialogs::XFilePickerListener>& xListener) throw (::css::uno::RuntimeException, ::std::exception) override;
 
     // XExecutableDialog functions
-    virtual void SAL_CALL setTitle(const OUString& rTitle) override;
-    virtual sal_Int16 SAL_CALL execute() override;
+    virtual void SAL_CALL setTitle(const OUString& rTitle) throw (::css::uno::RuntimeException, ::std::exception) override;
+    virtual sal_Int16 SAL_CALL execute() throw (::css::uno::RuntimeException, ::std::exception) override;
 
     // XFilePicker functions
-    virtual void SAL_CALL setMultiSelectionMode(sal_Bool bMode) override;
-    virtual void SAL_CALL setDefaultName(const OUString& rName) override;
-    virtual void SAL_CALL setDisplayDirectory(const OUString& rDirectory) override;
-    virtual OUString SAL_CALL getDisplayDirectory() override;
-    virtual css::uno::Sequence<OUString> SAL_CALL getFiles() override;
+    virtual void SAL_CALL setMultiSelectionMode(sal_Bool bMode) throw (::css::uno::RuntimeException, ::std::exception) override;
+    virtual void SAL_CALL setDefaultName(const OUString& rName) throw (::css::uno::RuntimeException, ::std::exception) override;
+    virtual void SAL_CALL setDisplayDirectory(const OUString& rDirectory) throw (::css::uno::RuntimeException, ::std::exception) override;
+    virtual OUString SAL_CALL getDisplayDirectory() throw (::css::uno::RuntimeException, ::std::exception) override;
+    virtual css::uno::Sequence<OUString> SAL_CALL getFiles() throw (::css::uno::RuntimeException, ::std::exception) override;
 
     // XFilterManager functions
-    virtual void SAL_CALL appendFilter(const OUString& rTitle, const OUString& rFilter) override;
-    virtual void SAL_CALL setCurrentFilter(const OUString& rTitle) override;
-    virtual OUString SAL_CALL getCurrentFilter() override;
+    virtual void SAL_CALL appendFilter(const OUString& rTitle, const OUString& rFilter) throw (::css::uno::RuntimeException, ::std::exception) override;
+    virtual void SAL_CALL setCurrentFilter(const OUString& rTitle) throw (::css::uno::RuntimeException, ::std::exception) override;
+    virtual OUString SAL_CALL getCurrentFilter() throw (::css::uno::RuntimeException, ::std::exception) override;
 
     // XFilterGroupManager functions
     virtual void SAL_CALL
     appendFilterGroup(const OUString& rGroupTitle,
-                      const css::uno::Sequence<css::beans::StringPair>& rFilters) override;
+                      const css::uno::Sequence<css::beans::StringPair>& rFilters) throw (::css::uno::RuntimeException, ::std::exception) override;
 
     // XFilePickerControlAccess functions
     virtual void SAL_CALL setValue(sal_Int16 nControlId, sal_Int16 nControlAction,
-                                   const css::uno::Any& rValue) override;
+                                   const css::uno::Any& rValue) throw (::css::uno::RuntimeException, ::std::exception) override;
     virtual css::uno::Any SAL_CALL getValue(sal_Int16 nControlId,
-                                            sal_Int16 nControlAction) override;
-    virtual void SAL_CALL enableControl(sal_Int16 nControlId, sal_Bool bEnable) override;
-    virtual void SAL_CALL setLabel(sal_Int16 nControlId, const OUString& rLabel) override;
-    virtual OUString SAL_CALL getLabel(sal_Int16 nControlId) override;
+                                            sal_Int16 nControlAction) throw (::css::uno::RuntimeException, ::std::exception) override;
+    virtual void SAL_CALL enableControl(sal_Int16 nControlId, sal_Bool bEnable) throw (::css::uno::RuntimeException, ::std::exception) override;
+    virtual void SAL_CALL setLabel(sal_Int16 nControlId, const OUString& rLabel) throw (::css::uno::RuntimeException, ::std::exception) override;
+    virtual OUString SAL_CALL getLabel(sal_Int16 nControlId) throw (::css::uno::RuntimeException, ::std::exception) override;
 
     /* TODO XFilePreview
 
@@ -103,22 +103,22 @@ public:
     */
 
     // XFilePicker2 functions
-    virtual css::uno::Sequence<OUString> SAL_CALL getSelectedFiles() override;
+    virtual css::uno::Sequence<OUString> SAL_CALL getSelectedFiles() throw (::css::uno::RuntimeException, ::std::exception) override;
 
     // XInitialization
-    virtual void SAL_CALL initialize(const css::uno::Sequence<css::uno::Any>& rArguments) override;
+    virtual void SAL_CALL initialize(const css::uno::Sequence<css::uno::Any>& rArguments) throw (::css::uno::Exception, ::css::uno::RuntimeException, ::std::exception) override;
 
     // XCancellable
-    virtual void SAL_CALL cancel() override;
+    virtual void SAL_CALL cancel() throw (::css::uno::RuntimeException, ::std::exception) override;
 
     // XEventListener
     virtual void disposing(const css::lang::EventObject& rEvent);
     using cppu::WeakComponentImplHelperBase::disposing;
 
     // XServiceInfo
-    virtual OUString SAL_CALL getImplementationName() override;
-    virtual sal_Bool SAL_CALL supportsService(const OUString& rServiceName) override;
-    virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
+    virtual OUString SAL_CALL getImplementationName() throw (::css::uno::RuntimeException, ::std::exception) override;
+    virtual sal_Bool SAL_CALL supportsService(const OUString& rServiceName) throw (::css::uno::RuntimeException, ::std::exception) override;
+    virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() throw (::css::uno::RuntimeException, ::std::exception) override;
 
 private:
     Gtk3KDE5FilePicker(const Gtk3KDE5FilePicker&) = delete;
diff --git a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.cxx b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.cxx
index 21690c5e74f8..d039dce03c5f 100644
--- a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.cxx
+++ b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.cxx
@@ -23,7 +23,7 @@
 
 #include <unx/geninst.h>
 
-#include <strings.hrc>
+#include <svids.hrc>
 
 #include <future>
 #include <system_error>
@@ -98,12 +98,12 @@ void sendIpcArg(std::ostream& stream, const OUString& string)
     sendIpcStringArg(stream, utf8.getLength(), utf8.getStr());
 }
 
-OUString getResString(const char* pResId)
+OUString getResString(sal_Int32 aResId)
 {
-    if (pResId == nullptr)
+    if (aResId == -1)
         return {};
 
-    return VclResId(pResId);
+    return ResId(aResId, *ImplGetResMgr()).toString();
 }
 
 // Gtk3KDE5FilePicker
@@ -169,7 +169,7 @@ std::function<void()> Gtk3KDE5FilePickerIpc::blockMainWindow()
     if (!pSysData)
         return {};
 
-    sendCommand(Commands::SetWinId, pSysData->aWindow);
+    sendCommand(Commands::SetWinId, static_cast<sal_uIntPtr>(pSysData->aWindow));
 
     auto* pMainWindow = static_cast<GtkWidget*>(pSysData->pWidget);
     if (!pMainWindow)
diff --git a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.hxx b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.hxx
index 4b6b9e928969..a1877d617420 100644
--- a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.hxx
+++ b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.hxx
@@ -35,7 +35,7 @@
 #include <thread>
 #include <sstream>
 
-OUString getResString(const char* pResId);
+OUString getResString(sal_Int32 pResId);
 
 class Gtk3KDE5FilePickerIpc
 {
diff --git a/vcl/unx/gtk3_kde5/gtk3_kde5_folderpicker.cxx b/vcl/unx/gtk3_kde5/gtk3_kde5_folderpicker.cxx
index ad89374b47c7..ec6bae28f5fb 100644
--- a/vcl/unx/gtk3_kde5/gtk3_kde5_folderpicker.cxx
+++ b/vcl/unx/gtk3_kde5/gtk3_kde5_folderpicker.cxx
@@ -28,7 +28,7 @@
 #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
 #include <vcl/svapp.hxx>
 
-#include <strings.hrc>
+#include <svids.hrc>
 
 using namespace ::com::sun::star;
 using namespace ::com::sun::star::ui::dialogs;
@@ -46,12 +46,12 @@ Gtk3KDE5FolderPicker::Gtk3KDE5FolderPicker(
 
 Gtk3KDE5FolderPicker::~Gtk3KDE5FolderPicker() = default;
 
-void SAL_CALL Gtk3KDE5FolderPicker::setDisplayDirectory(const OUString& aDirectory)
+void SAL_CALL Gtk3KDE5FolderPicker::setDisplayDirectory(const OUString& aDirectory) throw (::css::lang::IllegalArgumentException, ::css::uno::RuntimeException, ::std::exception)
 {
     m_ipc.sendCommand(Commands::SetDisplayDirectory, aDirectory);
 }
 
-OUString SAL_CALL Gtk3KDE5FolderPicker::getDisplayDirectory()
+OUString SAL_CALL Gtk3KDE5FolderPicker::getDisplayDirectory() throw (::css::uno::RuntimeException, ::std::exception)
 {
     auto id = m_ipc.sendCommand(Commands::GetDisplayDirectory);
     OUString ret;
@@ -59,7 +59,7 @@ OUString SAL_CALL Gtk3KDE5FolderPicker::getDisplayDirectory()
     return ret;
 }
 
-OUString SAL_CALL Gtk3KDE5FolderPicker::getDirectory()
+OUString SAL_CALL Gtk3KDE5FolderPicker::getDirectory() throw (::css::uno::RuntimeException, ::std::exception)
 {
     auto id = m_ipc.sendCommand(Commands::GetSelectedFiles);
     uno::Sequence<OUString> seq;
@@ -67,20 +67,20 @@ OUString SAL_CALL Gtk3KDE5FolderPicker::getDirectory()
     return seq.hasElements() ? seq[0] : OUString();
 }
 
-void SAL_CALL Gtk3KDE5FolderPicker::setDescription(const OUString& /*rDescription*/) {}
+void SAL_CALL Gtk3KDE5FolderPicker::setDescription(const OUString& /*rDescription*/) throw (::css::uno::RuntimeException, ::std::exception) {}
 
 // XExecutableDialog functions
 
-void SAL_CALL Gtk3KDE5FolderPicker::setTitle(const OUString& aTitle)
+void SAL_CALL Gtk3KDE5FolderPicker::setTitle(const OUString& aTitle) throw (::css::uno::RuntimeException, ::std::exception)
 {
     m_ipc.sendCommand(Commands::SetTitle, aTitle);
 }
 
-sal_Int16 SAL_CALL Gtk3KDE5FolderPicker::execute() { return m_ipc.execute(); }
+sal_Int16 SAL_CALL Gtk3KDE5FolderPicker::execute() throw (::css::uno::RuntimeException, ::std::exception) { return m_ipc.execute(); }
 
 // XCancellable
 
-void SAL_CALL Gtk3KDE5FolderPicker::cancel()
+void SAL_CALL Gtk3KDE5FolderPicker::cancel() throw (::css::uno::RuntimeException, ::std::exception)
 {
     // TODO
 }
diff --git a/vcl/unx/gtk3_kde5/gtk3_kde5_folderpicker.hxx b/vcl/unx/gtk3_kde5/gtk3_kde5_folderpicker.hxx
index fed9f0bc5a12..3785fe3d50c1 100644
--- a/vcl/unx/gtk3_kde5/gtk3_kde5_folderpicker.hxx
+++ b/vcl/unx/gtk3_kde5/gtk3_kde5_folderpicker.hxx
@@ -41,17 +41,17 @@ public:
     virtual ~Gtk3KDE5FolderPicker() override;
 
     // XExecutableDialog functions
-    virtual void SAL_CALL setTitle(const OUString& aTitle) override;
-    virtual sal_Int16 SAL_CALL execute() override;
+    virtual void SAL_CALL setTitle(const OUString& aTitle) throw (::css::uno::RuntimeException, ::std::exception) override;
+    virtual sal_Int16 SAL_CALL execute() throw (::css::uno::RuntimeException, ::std::exception) override;
 
     // XFolderPicker functions
-    virtual void SAL_CALL setDisplayDirectory(const OUString& rDirectory) override;
-    virtual OUString SAL_CALL getDisplayDirectory() override;
-    virtual OUString SAL_CALL getDirectory() override;
-    virtual void SAL_CALL setDescription(const OUString& rDescription) override;
+    virtual void SAL_CALL setDisplayDirectory(const OUString& rDirectory) throw (::css::lang::IllegalArgumentException, ::css::uno::RuntimeException, ::std::exception) override;
+    virtual OUString SAL_CALL getDisplayDirectory() throw (::css::uno::RuntimeException, ::std::exception) override;
+    virtual OUString SAL_CALL getDirectory() throw (::css::uno::RuntimeException, ::std::exception) override;
+    virtual void SAL_CALL setDescription(const OUString& rDescription) throw (::css::uno::RuntimeException, ::std::exception) override;
 
     // XCancellable
-    virtual void SAL_CALL cancel() override;
+    virtual void SAL_CALL cancel() throw (::css::uno::RuntimeException, ::std::exception) override;
 
 private:
     Gtk3KDE5FolderPicker(const Gtk3KDE5FolderPicker&) = delete;
commit 78144ff1871353e5911a622f0f657cdceed01b2b
Author: Milian Wolff <milian.wolff at kdab.com>
Date:   Wed Jan 24 11:35:20 2018 +0100

    gtk3_kde5: port away from boost::process
    
    While this uglifies the code, it removes a dependency on newer
    boost 1.64+ which ships boost::process. This helps on systems
    where LO is linked against system boost and an older version
    of boost is used.
    
    Additionally, and this is the main motivation, this makes it
    easier to backport these changes to 5.2, where the bundled boost
    is also only at 1.60.
    
    To keep the required changes at a minimum, the osl_* API for
    reading from/writing to the stdout/stdin of the helper process,
    we buffer the responses on a line-by-line basis. Note that one
    cannot simply reuse osl_readLine on the non-seekable oslFileHandle.
    Instead, we have to roll our own simplistic readLine implementation...
    
    Change-Id: I1197e38cb2416e926d8ba985accd6c10d78bcc52
    (cherry picked from commit 2c6b2165beb87b59d5621e9428881165eef87628)

diff --git a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker.cxx b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker.cxx
index 7372d476f55e..8c983996b791 100644
--- a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker.cxx
+++ b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker.cxx
@@ -42,13 +42,6 @@
 
 #include <strings.hrc>
 
-#include <future>
-
-#include <boost/filesystem/path.hpp>
-#include <boost/process/environment.hpp>
-#include <boost/process/search_path.hpp>
-#include <boost/process/io.hpp>
-
 using namespace ::com::sun::star;
 using namespace ::com::sun::star::ui::dialogs;
 using namespace ::com::sun::star::ui::dialogs::TemplateDescription;
@@ -57,8 +50,6 @@ using namespace ::com::sun::star::ui::dialogs::CommonFilePickerElementIds;
 using namespace ::com::sun::star::lang;
 using namespace ::com::sun::star::beans;
 using namespace ::com::sun::star::uno;
-namespace bp = boost::process;
-namespace bf = boost::filesystem;
 
 // helper functions
 
diff --git a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker.hxx b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker.hxx
index 80261ded9f9b..740382d9ec49 100644
--- a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker.hxx
+++ b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker.hxx
@@ -32,9 +32,6 @@
 
 #include <rtl/ustrbuf.hxx>
 
-#include <boost/process/child.hpp>
-#include <boost/process/pipe.hpp>
-
 #include "gtk3_kde5_filepicker_ipc.hxx"
 
 #include <functional>
diff --git a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.cxx b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.cxx
index fd9c1c7b64e1..21690c5e74f8 100644
--- a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.cxx
+++ b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.cxx
@@ -26,6 +26,7 @@
 #include <strings.hrc>
 
 #include <future>
+#include <system_error>
 
 #include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
 
@@ -41,38 +42,33 @@
 #include <unx/gtk/gtkdata.hxx>
 
 #include <boost/filesystem/path.hpp>
-#include <boost/process/environment.hpp>
-#include <boost/process/search_path.hpp>
-#include <boost/process/io.hpp>
 
 using namespace ::com::sun::star::ui::dialogs;
 
-namespace bp = boost::process;
-namespace bf = boost::filesystem;
-
 // helper functions
 
 namespace
 {
-bf::path applicationDirPath()
+OUString applicationDirPath()
 {
     OUString applicationFilePath;
     osl_getExecutableFile(&applicationFilePath.pData);
     OUString applicationSystemPath;
     osl_getSystemPathFromFileURL(applicationFilePath.pData, &applicationSystemPath.pData);
-    auto sysPath = applicationSystemPath.toUtf8();
-    auto ret = bf::path(sysPath.getStr(), sysPath.getStr() + sysPath.getLength());
+    const auto utf8Path = applicationSystemPath.toUtf8();
+    auto ret = boost::filesystem::path(utf8Path.getStr(), utf8Path.getStr() + utf8Path.getLength());
     ret.remove_filename();
-    return ret;
+    return OUString::fromUtf8(OString(ret.c_str(), ret.size()));
 }
 
-bf::path findPickerExecutable()
+OUString findPickerExecutable()
 {
-    auto paths = boost::this_process::path();
-    paths.insert(paths.begin(), applicationDirPath());
-    auto ret = bp::search_path("lo_kde5filepicker", paths);
-    if (ret.empty())
-        throw bp::process_error(std::make_error_code(std::errc::no_such_file_or_directory),
+    const auto path = applicationDirPath();
+    const OUString app("lo_kde5filepicker");
+    OUString ret;
+    osl_searchFileURL(app.pData, path.pData, &ret.pData);
+    if (ret.isEmpty())
+        throw std::system_error(std::make_error_code(std::errc::no_such_file_or_directory),
                                 "could not find lo_kde5filepicker executable");
     return ret;
 }
@@ -113,16 +109,34 @@ OUString getResString(const char* pResId)
 // Gtk3KDE5FilePicker
 
 Gtk3KDE5FilePickerIpc::Gtk3KDE5FilePickerIpc()
-    // workaround: specify some non-empty argument, otherwise the Qt app will see argc == 0
-    : m_process(findPickerExecutable(), "dummy", bp::std_out > m_stdout, bp::std_in < m_stdin)
 {
+    const auto exe = findPickerExecutable();
+    oslProcessError result;
+    oslSecurity pSecurity = osl_getCurrentSecurity();
+    result = osl_executeProcess_WithRedirectedIO(exe.pData, nullptr, 0, osl_Process_NORMAL,
+                                                 pSecurity, nullptr, nullptr, 0, &m_process,
+                                                 &m_inputWrite, &m_outputRead, nullptr);
+    osl_freeSecurityHandle(pSecurity);
+    if (result != osl_Process_E_None)
+        throw std::system_error(std::make_error_code(std::errc::no_such_process),
+                                "could not start lo_kde5filepicker executable");
 }
 
 Gtk3KDE5FilePickerIpc::~Gtk3KDE5FilePickerIpc()
 {
+    if (!m_process)
+        return;
+
     sendCommand(Commands::Quit);
-    if (m_process.running())
-        m_process.wait_for(std::chrono::milliseconds(100));
+    TimeValue timeValue(std::chrono::milliseconds(100));
+    if (osl_joinProcessWithTimeout(m_process, &timeValue) != osl_Process_E_None)
+        osl_terminateProcess(m_process);
+
+    if (m_inputWrite)
+        osl_closeFile(m_inputWrite);
+    if (m_outputRead)
+        osl_closeFile(m_outputRead);
+    osl_freeProcessHandle(m_process);
 }
 
 sal_Int16 Gtk3KDE5FilePickerIpc::execute()
@@ -198,4 +212,48 @@ void Gtk3KDE5FilePickerIpc::await(const std::future<void>& future)
     }
 }
 
+void Gtk3KDE5FilePickerIpc::writeResponseLine(const std::string& line)
+{
+    sal_uInt64 bytesWritten = 0;
+    osl_writeFile(m_inputWrite, line.c_str(), line.size(), &bytesWritten);
+}
+
+std::string Gtk3KDE5FilePickerIpc::readResponseLine()
+{
+    if (!m_responseBuffer.empty()) // check whether we have a line in our buffer
+    {
+        auto it = m_responseBuffer.find('\n');
+        if (it != std::string::npos)
+        {
+            auto ret = m_responseBuffer.substr(0, it);
+            m_responseBuffer.erase(0, it);
+            return ret;
+        }
+    }
+
+    const sal_uInt64 BUF_SIZE = 1024;
+    char buffer[BUF_SIZE];
+    while (true)
+    {
+        sal_uInt64 bytesRead = 0;
+        auto err = osl_readFile(m_outputRead, buffer, BUF_SIZE, &bytesRead);
+        auto it = std::find(buffer, buffer + bytesRead, '\n');
+        if (it != buffer + bytesRead) // check whether the chunk we read contains an EOL
+        {
+            // if so, append that part to the buffer and return it
+            std::string ret = m_responseBuffer.append(buffer, it);
+            // but keep anything else we may have read in our buffer
+            ++it;
+            m_responseBuffer.assign(it, buffer + bytesRead);
+            return ret;
+        }
+        // otherwise append everything we read to the buffer and try again
+        m_responseBuffer.append(buffer, bytesRead);
+
+        if (err != osl_File_E_None && err != osl_File_E_AGAIN)
+            break;
+    }
+    return {};
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.hxx b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.hxx
index 8b8bfbc7a726..4b6b9e928969 100644
--- a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.hxx
+++ b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.hxx
@@ -23,32 +23,33 @@
 
 #include <osl/conditn.hxx>
 #include <osl/mutex.hxx>
+#include <osl/process.h>
 
 #include <rtl/ustrbuf.hxx>
 
-#include <boost/process/child.hpp>
-#include <boost/process/pipe.hpp>
-
 #include "filepicker_ipc_commands.hxx"
 
 #include <functional>
 #include <future>
 #include <mutex>
 #include <thread>
+#include <sstream>
 
 OUString getResString(const char* pResId);
 
 class Gtk3KDE5FilePickerIpc
 {
 protected:
-    boost::process::ipstream m_stdout;
-    boost::process::opstream m_stdin;
-    boost::process::child m_process;
+    oslProcess m_process;
+    oslFileHandle m_inputWrite;
+    oslFileHandle m_outputRead;
     // simple multiplexing: every command gets it's own ID that can be used to
     // read the corresponding response
     uint64_t m_msgId = 1;
     std::mutex m_mutex;
     uint64_t m_incomingResponse = 0;
+    std::string m_responseBuffer;
+    std::stringstream m_responseStream;
 
 public:
     explicit Gtk3KDE5FilePickerIpc();
@@ -56,14 +57,20 @@ public:
 
     sal_Int16 execute();
 
+    void writeResponseLine(const std::string& line);
+
     template <typename... Args> uint64_t sendCommand(Commands command, const Args&... args)
     {
         auto id = m_msgId;
         ++m_msgId;
-        sendIpcArgs(m_stdin, id, command, args...);
+        std::stringstream stream;
+        sendIpcArgs(stream, id, command, args...);
+        writeResponseLine(stream.str());
         return id;
     }
 
+    std::string readResponseLine();
+
     template <typename... Args> void readResponse(uint64_t id, Args&... args)
     {
         // read synchronously from a background thread and run the eventloop until the value becomes available
@@ -75,13 +82,16 @@ public:
                 std::lock_guard<std::mutex> lock(m_mutex);
 
                 // check if we need to read (and potentially wait) a response ID
-                if (m_incomingResponse == 0)
-                    readIpcArgs(m_stdout, m_incomingResponse);
+                if (m_incomingResponse == 0) {
+                    m_responseStream.clear();
+                    m_responseStream.str(readResponseLine());
+                    readIpcArgs(m_responseStream, m_incomingResponse);
+                }
 
                 if (m_incomingResponse == id)
                 {
                     // the response we are waiting for came in
-                    readIpcArgs(m_stdout, args...);
+                    readIpcArgs(m_responseStream, args...);
                     m_incomingResponse = 0;
                     break;
                 }
diff --git a/vcl/unx/gtk3_kde5/gtk3_kde5_gtkinst.cxx b/vcl/unx/gtk3_kde5/gtk3_kde5_gtkinst.cxx
index bed2c049aa3a..d3f797ce9234 100644
--- a/vcl/unx/gtk3_kde5/gtk3_kde5_gtkinst.cxx
+++ b/vcl/unx/gtk3_kde5/gtk3_kde5_gtkinst.cxx
@@ -22,7 +22,7 @@
 #include "gtk3_kde5_filepicker.hxx"
 #include "gtk3_kde5_folderpicker.hxx"
 
-#include <boost/process/exception.hpp>
+#include <system_error>
 
 uno::Reference<ui::dialogs::XFilePicker2>
 GtkInstance::createFilePicker(const uno::Reference<uno::XComponentContext>& xMSF)
@@ -31,7 +31,7 @@ GtkInstance::createFilePicker(const uno::Reference<uno::XComponentContext>& xMSF
     {
         return uno::Reference<ui::dialogs::XFilePicker2>(new Gtk3KDE5FilePicker(xMSF));
     }
-    catch (const boost::process::process_error& error)
+    catch (const std::system_error& error)
     {
         OSL_FAIL(error.what());
         return { nullptr };
@@ -45,7 +45,7 @@ GtkInstance::createFolderPicker(const uno::Reference<uno::XComponentContext>& xM
     {
         return uno::Reference<ui::dialogs::XFolderPicker2>(new Gtk3KDE5FolderPicker(xMSF));
     }
-    catch (const boost::process::process_error& error)
+    catch (const std::system_error& error)
     {
         OSL_FAIL(error.what());
         return { nullptr };
commit 7b7081f134facfa5aecf5ce27f27e48f294cdb29
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Tue Jan 23 15:06:52 2018 +0100

    Various loplugin fixes in --enable-gtk3-kde5 code
    
    (cherry picked from commit e3ee065312e295300fb25457e18344225eeffbd4)
    (cherry picked from commit c73f88de8bc6f892ff1215c5f634ff0bfca04553)

diff --git a/vcl/unx/gtk3_kde5/filepicker_ipc_commands.hxx b/vcl/unx/gtk3_kde5/filepicker_ipc_commands.hxx
index 3aef6da858b1..8ce8cfa9e78d 100644
--- a/vcl/unx/gtk3_kde5/filepicker_ipc_commands.hxx
+++ b/vcl/unx/gtk3_kde5/filepicker_ipc_commands.hxx
@@ -80,13 +80,7 @@ inline void readIpcArg(std::istream& stream, Commands& value)
     value = static_cast<Commands>(v);
 }
 
-inline void readIpcArg(std::istream& stream, sal_Bool& value)
-{
-    bool v = false;
-    stream >> v;
-    value = v;
-    stream.ignore(); // skip space
-}
+void readIpcArg(std::istream&, sal_Bool) = delete;
 
 inline void readIpcArg(std::istream& stream, bool& value)
 {
@@ -133,10 +127,7 @@ inline void sendIpcArg(std::ostream& stream, Commands value)
     stream << static_cast<uint16_t>(value) << ' ';
 }
 
-inline void sendIpcArg(std::ostream& stream, sal_Bool value)
-{
-    stream << static_cast<bool>(value) << ' ';
-}
+void sendIpcArg(std::ostream&, sal_Bool) = delete;
 
 inline void sendIpcArg(std::ostream& stream, bool value) { stream << value << ' '; }
 
diff --git a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker.cxx b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker.cxx
index 28c0af2047aa..7372d476f55e 100644
--- a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker.cxx
+++ b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker.cxx
@@ -38,9 +38,9 @@
 
 #undef Region
 
-#include "unx/geninst.h"
+#include <unx/geninst.h>
 
-#include "strings.hrc"
+#include <strings.hrc>
 
 #include <future>
 
@@ -64,7 +64,7 @@ namespace bf = boost::filesystem;
 
 namespace
 {
-uno::Sequence<OUString> SAL_CALL FilePicker_getSupportedServiceNames()
+uno::Sequence<OUString> FilePicker_getSupportedServiceNames()
 {
     uno::Sequence<OUString> aRet(3);
     aRet[0] = "com.sun.star.ui.dialogs.FilePicker";
@@ -107,7 +107,7 @@ sal_Int16 SAL_CALL Gtk3KDE5FilePicker::execute() { return m_ipc.execute(); }
 
 void SAL_CALL Gtk3KDE5FilePicker::setMultiSelectionMode(sal_Bool multiSelect)
 {
-    m_ipc.sendCommand(Commands::SetMultiSelectionMode, multiSelect);
+    m_ipc.sendCommand(Commands::SetMultiSelectionMode, bool(multiSelect));
 }
 
 void SAL_CALL Gtk3KDE5FilePicker::setDefaultName(const OUString& name)
@@ -176,9 +176,9 @@ void SAL_CALL Gtk3KDE5FilePicker::appendFilterGroup(const OUString& /*rGroupTitl
 void SAL_CALL Gtk3KDE5FilePicker::setValue(sal_Int16 controlId, sal_Int16 nControlAction,
                                            const uno::Any& value)
 {
-    if (value.has<sal_Bool>())
+    if (value.has<bool>())
     {
-        m_ipc.sendCommand(Commands::SetValue, controlId, nControlAction, value.get<sal_Bool>());
+        m_ipc.sendCommand(Commands::SetValue, controlId, nControlAction, value.get<bool>());
     }
     else
     {
@@ -198,7 +198,7 @@ uno::Any SAL_CALL Gtk3KDE5FilePicker::getValue(sal_Int16 controlId, sal_Int16 nC
 
     auto id = m_ipc.sendCommand(Commands::GetValue, controlId, nControlAction);
 
-    sal_Bool value = false;
+    bool value = false;
     m_ipc.readResponse(id, value);
 
     return uno::Any(value);
@@ -206,7 +206,7 @@ uno::Any SAL_CALL Gtk3KDE5FilePicker::getValue(sal_Int16 controlId, sal_Int16 nC
 
 void SAL_CALL Gtk3KDE5FilePicker::enableControl(sal_Int16 controlId, sal_Bool enable)
 {
-    m_ipc.sendCommand(Commands::EnableControl, controlId, enable);
+    m_ipc.sendCommand(Commands::EnableControl, controlId, bool(enable));
 }
 
 void SAL_CALL Gtk3KDE5FilePicker::setLabel(sal_Int16 controlId, const OUString& label)
@@ -284,7 +284,7 @@ void Gtk3KDE5FilePicker::addCustomControl(sal_Int16 controlId)
         {
             // the checkbox is created even for CHECKBOX_AUTOEXTENSION to simplify
             // code, but the checkbox is hidden and ignored
-            sal_Bool hidden = controlId == CHECKBOX_AUTOEXTENSION;
+            bool hidden = controlId == CHECKBOX_AUTOEXTENSION;
 
             m_ipc.sendCommand(Commands::AddCheckBox, controlId, hidden, getResString(resId));
 
@@ -308,8 +308,7 @@ void SAL_CALL Gtk3KDE5FilePicker::initialize(const uno::Sequence<uno::Any>& args
     uno::Any arg;
     if (args.getLength() == 0)
     {
-        throw lang::IllegalArgumentException(OUString("no arguments"),
-                                             static_cast<XFilePicker2*>(this), 1);
+        throw lang::IllegalArgumentException("no arguments", static_cast<XFilePicker2*>(this), 1);
     }
 
     arg = args[0];
@@ -317,14 +316,14 @@ void SAL_CALL Gtk3KDE5FilePicker::initialize(const uno::Sequence<uno::Any>& args
     if ((arg.getValueType() != cppu::UnoType<sal_Int16>::get())
         && (arg.getValueType() != cppu::UnoType<sal_Int8>::get()))
     {
-        throw lang::IllegalArgumentException(OUString("invalid argument type"),
+        throw lang::IllegalArgumentException("invalid argument type",
                                              static_cast<XFilePicker2*>(this), 1);
     }
 
     sal_Int16 templateId = -1;
     arg >>= templateId;
 
-    sal_Bool saveDialog = false;
+    bool saveDialog = false;
     switch (templateId)
     {
         case FILEOPEN_SIMPLE:
@@ -411,7 +410,7 @@ void SAL_CALL Gtk3KDE5FilePicker::cancel()
     // TODO
 }
 
-void SAL_CALL Gtk3KDE5FilePicker::disposing(const lang::EventObject& rEvent)
+void Gtk3KDE5FilePicker::disposing(const lang::EventObject& rEvent)
 {
     uno::Reference<XFilePickerListener> xFilePickerListener(rEvent.Source, uno::UNO_QUERY);
 
diff --git a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker.hxx b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker.hxx
index 506bc3bb5afc..80261ded9f9b 100644
--- a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker.hxx
+++ b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker.hxx
@@ -56,7 +56,7 @@ protected:
 
 public:
     explicit Gtk3KDE5FilePicker(const css::uno::Reference<css::uno::XComponentContext>&);
-    virtual ~Gtk3KDE5FilePicker();
+    virtual ~Gtk3KDE5FilePicker() override;
 
     // XFilePickerNotifier
     virtual void SAL_CALL addFilePickerListener(
@@ -115,7 +115,7 @@ public:
     virtual void SAL_CALL cancel() override;
 
     // XEventListener
-    virtual void SAL_CALL disposing(const css::lang::EventObject& rEvent);
+    virtual void disposing(const css::lang::EventObject& rEvent);
     using cppu::WeakComponentImplHelperBase::disposing;
 
     // XServiceInfo
diff --git a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.cxx b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.cxx
index 983617cbf58e..fd9c1c7b64e1 100644
--- a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.cxx
+++ b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.cxx
@@ -21,9 +21,9 @@
 
 #undef Region
 
-#include "unx/geninst.h"
+#include <unx/geninst.h>
 
-#include "strings.hrc"
+#include <strings.hrc>
 
 #include <future>
 
@@ -125,12 +125,12 @@ Gtk3KDE5FilePickerIpc::~Gtk3KDE5FilePickerIpc()
         m_process.wait_for(std::chrono::milliseconds(100));
 }
 
-sal_Int16 SAL_CALL Gtk3KDE5FilePickerIpc::execute()
+sal_Int16 Gtk3KDE5FilePickerIpc::execute()
 {
     auto restoreMainWindow = blockMainWindow();
 
     auto id = sendCommand(Commands::Execute);
-    sal_Bool accepted = false;
+    bool accepted = false;
     readResponse(id, accepted);
 
     if (restoreMainWindow)
@@ -145,7 +145,7 @@ static gboolean ignoreDeleteEvent(GtkWidget* /*widget*/, GdkEvent* /*event*/,
     return true;
 }
 
-std::function<void()> SAL_CALL Gtk3KDE5FilePickerIpc::blockMainWindow()
+std::function<void()> Gtk3KDE5FilePickerIpc::blockMainWindow()
 {
     vcl::Window* pParentWin = Application::GetDefDialogParent();
     if (!pParentWin)
@@ -157,7 +157,7 @@ std::function<void()> SAL_CALL Gtk3KDE5FilePickerIpc::blockMainWindow()
 
     sendCommand(Commands::SetWinId, pSysData->aWindow);
 
-    auto* pMainWindow = reinterpret_cast<GtkWidget*>(pSysData->pWidget);
+    auto* pMainWindow = static_cast<GtkWidget*>(pSysData->pWidget);
     if (!pMainWindow)
         return {};
 
@@ -190,7 +190,7 @@ std::function<void()> SAL_CALL Gtk3KDE5FilePickerIpc::blockMainWindow()
     };
 }
 
-void SAL_CALL Gtk3KDE5FilePickerIpc::await(const std::future<void>& future)
+void Gtk3KDE5FilePickerIpc::await(const std::future<void>& future)
 {
     while (future.wait_for(std::chrono::milliseconds(1)) != std::future_status::ready)
     {
diff --git a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.hxx b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.hxx
index c7b13cd4573f..8b8bfbc7a726 100644
--- a/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.hxx
+++ b/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.hxx
@@ -36,12 +36,6 @@
 #include <mutex>
 #include <thread>
 
-void readIpcArg(std::istream& stream, OUString& str);
-
-void readIpcArg(std::istream& stream, css::uno::Sequence<OUString>& seq);
-
-void sendIpcArg(std::ostream& stream, const OUString& string);
-
 OUString getResString(const char* pResId);
 
 class Gtk3KDE5FilePickerIpc
@@ -60,7 +54,7 @@ public:
     explicit Gtk3KDE5FilePickerIpc();
     ~Gtk3KDE5FilePickerIpc();
 
-    sal_Int16 SAL_CALL execute();
+    sal_Int16 execute();
 
     template <typename... Args> uint64_t sendCommand(Commands command, const Args&... args)
     {
@@ -101,9 +95,9 @@ public:
     }
 
 private:
-    std::function<void()> SAL_CALL blockMainWindow();
+    std::function<void()> blockMainWindow();
 
-    static void SAL_CALL await(const std::future<void>& future);
+    static void await(const std::future<void>& future);
 };
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/unx/gtk3_kde5/gtk3_kde5_folderpicker.hxx b/vcl/unx/gtk3_kde5/gtk3_kde5_folderpicker.hxx
index c6a6c4edfb73..fed9f0bc5a12 100644
--- a/vcl/unx/gtk3_kde5/gtk3_kde5_folderpicker.hxx
+++ b/vcl/unx/gtk3_kde5/gtk3_kde5_folderpicker.hxx
@@ -38,7 +38,7 @@ public:
     // constructor
     explicit Gtk3KDE5FolderPicker(
         const css::uno::Reference<css::uno::XComponentContext>& xServiceMgr);
-    virtual ~Gtk3KDE5FolderPicker();
+    virtual ~Gtk3KDE5FolderPicker() override;
 
     // XExecutableDialog functions
     virtual void SAL_CALL setTitle(const OUString& aTitle) override;
diff --git a/vcl/unx/gtk3_kde5/kde5_filepicker.cxx b/vcl/unx/gtk3_kde5/kde5_filepicker.cxx
index 456ba645808b..9b3f21db92e9 100644
--- a/vcl/unx/gtk3_kde5/kde5_filepicker.cxx
+++ b/vcl/unx/gtk3_kde5/kde5_filepicker.cxx
@@ -72,9 +72,9 @@ KDE5FilePicker::~KDE5FilePicker()
     delete _dialog;
 }
 
-void SAL_CALL KDE5FilePicker::setTitle(const QString& title) { _dialog->setWindowTitle(title); }
+void KDE5FilePicker::setTitle(const QString& title) { _dialog->setWindowTitle(title); }
 
-bool SAL_CALL KDE5FilePicker::execute()
+bool KDE5FilePicker::execute()
 {
     if (!_filters.isEmpty())
         _dialog->setNameFilters(_filters);
@@ -86,29 +86,20 @@ bool SAL_CALL KDE5FilePicker::execute()
     return _dialog->exec() == QFileDialog::Accepted;
 }
 
-void SAL_CALL KDE5FilePicker::setMultiSelectionMode(bool multiSelect)
+void KDE5FilePicker::setMultiSelectionMode(bool multiSelect)
 {
     _dialog->setFileMode(multiSelect ? QFileDialog::ExistingFiles : QFileDialog::ExistingFile);
 }
 
-void SAL_CALL KDE5FilePicker::setDefaultName(const QString& name)
-{
-    _dialog->selectUrl(QUrl(name));
-}
+void KDE5FilePicker::setDefaultName(const QString& name) { _dialog->selectUrl(QUrl(name)); }
 
-void SAL_CALL KDE5FilePicker::setDisplayDirectory(const QString& dir)
-{
-    _dialog->selectUrl(QUrl(dir));
-}
+void KDE5FilePicker::setDisplayDirectory(const QString& dir) { _dialog->selectUrl(QUrl(dir)); }
 
-QString SAL_CALL KDE5FilePicker::getDisplayDirectory() const
-{
-    return _dialog->directoryUrl().url();
-}
+QString KDE5FilePicker::getDisplayDirectory() const { return _dialog->directoryUrl().url(); }
 
-QList<QUrl> SAL_CALL KDE5FilePicker::getSelectedFiles() const { return _dialog->selectedUrls(); }
+QList<QUrl> KDE5FilePicker::getSelectedFiles() const { return _dialog->selectedUrls(); }
 
-void SAL_CALL KDE5FilePicker::appendFilter(const QString& title, const QString& filter)
+void KDE5FilePicker::appendFilter(const QString& title, const QString& filter)
 {
     QString t = title;
     QString f = filter;
@@ -126,12 +117,12 @@ void SAL_CALL KDE5FilePicker::appendFilter(const QString& title, const QString&
     _titleToFilters[t] = _filters.constLast();
 }
 
-void SAL_CALL KDE5FilePicker::setCurrentFilter(const QString& title)
+void KDE5FilePicker::setCurrentFilter(const QString& title)
 {
     _currentFilter = _titleToFilters.value(title);
 }
 
-QString SAL_CALL KDE5FilePicker::getCurrentFilter() const
+QString KDE5FilePicker::getCurrentFilter() const
 {
     QString filter = _titleToFilters.key(_dialog->selectedNameFilter());
 
@@ -142,8 +133,7 @@ QString SAL_CALL KDE5FilePicker::getCurrentFilter() const
     return filter;
 }
 
-void SAL_CALL KDE5FilePicker::setValue(sal_Int16 controlId, sal_Int16 /*nControlAction*/,
-                                       bool value)
+void KDE5FilePicker::setValue(sal_Int16 controlId, sal_Int16 /*nControlAction*/, bool value)
 {
     if (_customWidgets.contains(controlId))
     {
@@ -155,7 +145,7 @@ void SAL_CALL KDE5FilePicker::setValue(sal_Int16 controlId, sal_Int16 /*nControl
         qWarning() << "set value on unknown control" << controlId;
 }
 
-bool SAL_CALL KDE5FilePicker::getValue(sal_Int16 controlId, sal_Int16 /*nControlAction*/) const
+bool KDE5FilePicker::getValue(sal_Int16 controlId, sal_Int16 /*nControlAction*/) const
 {
     bool ret = false;
     if (_customWidgets.contains(controlId))
@@ -170,7 +160,7 @@ bool SAL_CALL KDE5FilePicker::getValue(sal_Int16 controlId, sal_Int16 /*nControl
     return ret;
 }
 
-void SAL_CALL KDE5FilePicker::enableControl(sal_Int16 controlId, sal_Bool enable)
+void KDE5FilePicker::enableControl(sal_Int16 controlId, bool enable)
 {
     if (_customWidgets.contains(controlId))
         _customWidgets.value(controlId)->setEnabled(enable);
@@ -178,7 +168,7 @@ void SAL_CALL KDE5FilePicker::enableControl(sal_Int16 controlId, sal_Bool enable
         qWarning() << "enable on unknown control" << controlId;
 }
 
-void SAL_CALL KDE5FilePicker::setLabel(sal_Int16 controlId, const QString& label)
+void KDE5FilePicker::setLabel(sal_Int16 controlId, const QString& label)
 {
     if (_customWidgets.contains(controlId))
     {
@@ -190,7 +180,7 @@ void SAL_CALL KDE5FilePicker::setLabel(sal_Int16 controlId, const QString& label
         qWarning() << "set label on unknown control" << controlId;
 }
 
-QString SAL_CALL KDE5FilePicker::getLabel(sal_Int16 controlId) const
+QString KDE5FilePicker::getLabel(sal_Int16 controlId) const
 {
     QString label;
     if (_customWidgets.contains(controlId))
@@ -218,7 +208,7 @@ void KDE5FilePicker::addCheckBox(sal_Int16 controlId, const QString& label, bool
     _customWidgets.insert(controlId, widget);
 }
 
-void SAL_CALL KDE5FilePicker::initialize(bool saveDialog)
+void KDE5FilePicker::initialize(bool saveDialog)
 {
     //default is opening
     QFileDialog::AcceptMode operationMode
@@ -251,6 +241,6 @@ bool KDE5FilePicker::eventFilter(QObject* o, QEvent* e)
     return QObject::eventFilter(o, e);
 }
 
-#include "kde5_filepicker.moc"
+#include <kde5_filepicker.moc>
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/unx/gtk3_kde5/kde5_filepicker.hxx b/vcl/unx/gtk3_kde5/kde5_filepicker.hxx
index 25c7454f86b5..17a37b7e27a3 100644
--- a/vcl/unx/gtk3_kde5/kde5_filepicker.hxx
+++ b/vcl/unx/gtk3_kde5/kde5_filepicker.hxx
@@ -59,31 +59,31 @@ protected:
 
 public:
     explicit KDE5FilePicker(QObject* parent = nullptr);
-    ~KDE5FilePicker();
+    ~KDE5FilePicker() override;
 
     void enableFolderMode();
 
     // XExecutableDialog functions
-    void SAL_CALL setTitle(const QString& rTitle);
-    bool SAL_CALL execute();
+    void setTitle(const QString& rTitle);
+    bool execute();
 
     // XFilePicker functions
-    void SAL_CALL setMultiSelectionMode(bool bMode);
-    void SAL_CALL setDefaultName(const QString& rName);
-    void SAL_CALL setDisplayDirectory(const QString& rDirectory);
-    QString SAL_CALL getDisplayDirectory() const;
+    void setMultiSelectionMode(bool bMode);
+    void setDefaultName(const QString& rName);
+    void setDisplayDirectory(const QString& rDirectory);
+    QString getDisplayDirectory() const;
 
     // XFilterManager functions
-    void SAL_CALL appendFilter(const QString& rTitle, const QString& rFilter);
-    void SAL_CALL setCurrentFilter(const QString& rTitle);
-    QString SAL_CALL getCurrentFilter() const;
+    void appendFilter(const QString& rTitle, const QString& rFilter);
+    void setCurrentFilter(const QString& rTitle);
+    QString getCurrentFilter() const;
 
     // XFilePickerControlAccess functions
-    void SAL_CALL setValue(sal_Int16 nControlId, sal_Int16 nControlAction, bool rValue);
-    bool SAL_CALL getValue(sal_Int16 nControlId, sal_Int16 nControlAction) const;
-    void SAL_CALL enableControl(sal_Int16 nControlId, sal_Bool bEnable);
-    void SAL_CALL setLabel(sal_Int16 nControlId, const QString& rLabel);
-    QString SAL_CALL getLabel(sal_Int16 nControlId) const;
+    void setValue(sal_Int16 nControlId, sal_Int16 nControlAction, bool rValue);
+    bool getValue(sal_Int16 nControlId, sal_Int16 nControlAction) const;
+    void enableControl(sal_Int16 nControlId, bool bEnable);
+    void setLabel(sal_Int16 nControlId, const QString& rLabel);
+    QString getLabel(sal_Int16 nControlId) const;
 
     // XFilePicker2 functions
     QList<QUrl> getSelectedFiles() const;
diff --git a/vcl/unx/gtk3_kde5/kde5_filepicker_ipc.cxx b/vcl/unx/gtk3_kde5/kde5_filepicker_ipc.cxx
index 1ae6289677d6..082864066d16 100644
--- a/vcl/unx/gtk3_kde5/kde5_filepicker_ipc.cxx
+++ b/vcl/unx/gtk3_kde5/kde5_filepicker_ipc.cxx
@@ -127,8 +127,9 @@ void FilePickerIpc::readCommand()
         case Commands::GetSelectedFiles:
         {
             QStringList files;
-            for (auto url : m_filePicker->getSelectedFiles())
+            for (auto const& url_ : m_filePicker->getSelectedFiles())
             {
+                auto url = url_;
                 if (url.scheme() == QLatin1String("webdav")
                     || url.scheme() == QLatin1String("webdavs"))
                 {
@@ -228,13 +229,13 @@ void FilePickerIpc::readCommand()
         }
         case Commands::Quit:
         {
-            qApp->quit();
+            QCoreApplication::quit();
             return;
         }
     }
     qWarning() << "unhandled command " << static_cast<uint16_t>(command);
 }
 
-#include "kde5_filepicker_ipc.moc"
+#include <kde5_filepicker_ipc.moc>
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/unx/gtk3_kde5/kde5_filepicker_ipc.hxx b/vcl/unx/gtk3_kde5/kde5_filepicker_ipc.hxx
index 8a282675b5e2..d04ad24e2908 100644
--- a/vcl/unx/gtk3_kde5/kde5_filepicker_ipc.hxx
+++ b/vcl/unx/gtk3_kde5/kde5_filepicker_ipc.hxx
@@ -30,7 +30,7 @@ class FilePickerIpc : public QObject
     Q_OBJECT
 public:
     explicit FilePickerIpc(KDE5FilePicker* filePicker, QObject* parent = nullptr);
-    ~FilePickerIpc();
+    ~FilePickerIpc() override;
 
 private Q_SLOTS:
     void readCommands();
diff --git a/vcl/unx/gtk3_kde5/kde5_lo_filepicker_main.cxx b/vcl/unx/gtk3_kde5/kde5_lo_filepicker_main.cxx
index 43d92aba614a..c17236d281a0 100644
--- a/vcl/unx/gtk3_kde5/kde5_lo_filepicker_main.cxx
+++ b/vcl/unx/gtk3_kde5/kde5_lo_filepicker_main.cxx
@@ -28,12 +28,12 @@ int main(int argc, char** argv)
 {
     QApplication::setApplicationName(QStringLiteral("lo_kde5filepicker"));
     QApplication app(argc, argv);
-    app.setQuitOnLastWindowClosed(false);
+    QApplication::setQuitOnLastWindowClosed(false);
 
     KDE5FilePicker filePicker;
     FilePickerIpc ipc(&filePicker);
 
-    return app.exec();
+    return QApplication::exec();
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit c14088981066d13448f1bf1c5a261e226f8a8a84
Author: Milian Wolff <milian.wolff at kdab.com>
Date:   Mon Jan 22 17:06:00 2018 +0100

    Support opening of (some) remote URLs through the KDE file dialog
    
    LO already supports http, https, webdav and webdavs through the
    WebDAVContentProvider. Ftp is supported via FTPContentProvider
    and then finally we have the GIOContentProvider that can potentially
    support SMB, if the dependencies for that are met.
    
    We now configure the KDE file dialog to allow these remote protocols.
    Note that this filtering depends on https://phabricator.kde.org/D10024
    and https://phabricator.kde.org/D10025 to have any effect.
    
    Then we rewrite the URLs we receive from KIO to a format that is
    supported by LO. Most notably, we prepend `vnd.sun.star.` to the
    webdav URL schemes, such that they get picked up by the
    WebDAVContentProvider. Then finally, we clear the username from
    the smb:// URLs we get from KIO, as that prevents GIO from opening
    them.
    
    In all cases, the user will get prompted a second time for the
    credentials required to access the remote resource. This is
    unfortunate, but better than nothing. In the future, we may solve
    this issue through either a separate KIO UCP or by getting support
    for the FDO Secret Service specification in KWallet.
    
    Change-Id: I91df28434b115639c2698968e2a672b3320bf8e2
    Reviewed-on: https://gerrit.libreoffice.org/48350
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    (cherry picked from commit f1b60bd62daff4aaf6465caadd4ad0c447521102)

diff --git a/vcl/unx/gtk3_kde5/kde5_filepicker.cxx b/vcl/unx/gtk3_kde5/kde5_filepicker.cxx
index db7d04cf7d4a..456ba645808b 100644
--- a/vcl/unx/gtk3_kde5/kde5_filepicker.cxx
+++ b/vcl/unx/gtk3_kde5/kde5_filepicker.cxx
@@ -32,17 +32,6 @@
 #include <QtWidgets/QWidget>
 #include <QtWidgets/QApplication>
 
-// The dialog should check whether LO also supports the protocol
-// provided by KIO, and KFileWidget::dirOperator() is only 4.3+ .
-// Moreover it's only in this somewhat internal KFileWidget class,
-// which may not necessarily be what QFileDialog::fileWidget() returns,
-// but that's hopefully not a problem in practice.
-//#if Qt_VERSION_MAJOR == 4 && Qt_VERSION_MINOR >= 2
-//#define ALLOW_REMOTE_URLS 1
-//#else
-#define ALLOW_REMOTE_URLS 0
-//#endif
-
 // KDE5FilePicker
 
 KDE5FilePicker::KDE5FilePicker(QObject* parent)
@@ -53,16 +42,15 @@ KDE5FilePicker::KDE5FilePicker(QObject* parent)
     , _winId(0)
     , allowRemoteUrls(false)
 {
-#if ALLOW_REMOTE_URLS
-    if (KFileWidget* fileWidget = dynamic_cast<KFileWidget*>(_dialog->fileWidget()))
-    {
-        allowRemoteUrls = true;
-        // Use finishedLoading signal rather than e.g. urlEntered, because if there's a problem
-        // such as the URL being mistyped, there's no way to prevent two message boxes about it,
-        // one from us and one from Qt code.
-        connect(fileWidget->dirOperator(), SIGNAL(finishedLoading()), SLOT(checkProtocol()));
-    }
-#endif
+    _dialog->setSupportedSchemes({
+        QStringLiteral("file"),
+        QStringLiteral("ftp"),
+        QStringLiteral("http"),
+        QStringLiteral("https"),
+        QStringLiteral("webdav"),
+        QStringLiteral("webdavs"),
+        QStringLiteral("smb"),
+    });
 
     setMultiSelectionMode(false);
 
@@ -245,21 +233,6 @@ void SAL_CALL KDE5FilePicker::initialize(bool saveDialog)
     }
 }
 
-void KDE5FilePicker::checkProtocol()
-{
-    // There's no libreoffice.desktop :(, so find a matching one.
-    /*
-    KService::List services = KServiceTypeTrader::self()->query( "Application", "Exec =~ 'libreoffice %U'" );
-    QStringList protocols;
-    if( !services.isEmpty())
-        protocols = services[ 0 ]->property( "X-Qt-Protocols" ).toStringList();
-    if( protocols.isEmpty()) // incorrect (developer?) installation ?
-        protocols << "file" << "http";
-    if( !protocols.contains( _dialog->baseUrl().protocol()) && !protocols.contains( "KIO" ))
-        KMessageBox::error( _dialog, KIO::buildErrorString( KIO::ERR_UNSUPPORTED_PROTOCOL, _dialog->baseUrl().protocol()));
-*/
-}
-
 void KDE5FilePicker::setWinId(sal_uIntPtr winId) { _winId = winId; }
 
 bool KDE5FilePicker::eventFilter(QObject* o, QEvent* e)
diff --git a/vcl/unx/gtk3_kde5/kde5_filepicker.hxx b/vcl/unx/gtk3_kde5/kde5_filepicker.hxx
index 8b364832c6af..25c7454f86b5 100644
--- a/vcl/unx/gtk3_kde5/kde5_filepicker.hxx
+++ b/vcl/unx/gtk3_kde5/kde5_filepicker.hxx
@@ -102,9 +102,6 @@ private:
 protected:
     bool eventFilter(QObject* watched, QEvent* event) override;
 
-private Q_SLOTS:
-    void checkProtocol();
-
 Q_SIGNALS:
     void filterChanged();
     void selectionChanged();
diff --git a/vcl/unx/gtk3_kde5/kde5_filepicker_ipc.cxx b/vcl/unx/gtk3_kde5/kde5_filepicker_ipc.cxx
index 9911219d010a..1ae6289677d6 100644
--- a/vcl/unx/gtk3_kde5/kde5_filepicker_ipc.cxx
+++ b/vcl/unx/gtk3_kde5/kde5_filepicker_ipc.cxx
@@ -44,12 +44,12 @@ void sendIpcArg(std::ostream& stream, const QString& string)
     sendIpcStringArg(stream, utf8.size(), utf8.data());
 }
 
-void sendIpcArg(std::ostream& stream, const QList<QUrl>& urls)
+void sendIpcArg(std::ostream& stream, const QStringList& list)
 {
-    stream << static_cast<uint32_t>(urls.size()) << ' ';
-    for (const auto& url : urls)
+    stream << static_cast<uint32_t>(list.size()) << ' ';
+    for (const auto& entry : list)
     {
-        sendIpcArg(stream, url.toString());
+        sendIpcArg(stream, entry);
     }
 }
 
@@ -126,7 +126,24 @@ void FilePickerIpc::readCommand()
         }
         case Commands::GetSelectedFiles:
         {
-            sendIpcArgs(std::cout, messageId, m_filePicker->getSelectedFiles());
+            QStringList files;
+            for (auto url : m_filePicker->getSelectedFiles())
+            {
+                if (url.scheme() == QLatin1String("webdav")
+                    || url.scheme() == QLatin1String("webdavs"))
+                {
+                    // translate webdav and webdavs URLs into a format supported by LO
+                    url.setScheme(QLatin1String("vnd.sun.star.") + url.scheme());
+                }
+                else if (url.scheme() == QLatin1String("smb"))
+                {
+                    // clear the user name - the GIO backend does not support this apparently
+                    // when no username is available, it will ask for the password
+                    url.setUserName({});
+                }
+                files << url.toString();
+            }
+            sendIpcArgs(std::cout, messageId, files);
             return;
         }
         case Commands::AppendFilter:
commit f1ac3032415568b6c0d941d6e4f52c8a92793b07
Author: Milian Wolff <milian.wolff at kdab.com>
Date:   Wed Jan 10 17:50:43 2018 +0100

    Introduce gtk3_kde5 vcl plugin
    
    This is a hybrid plugin which mostly wraps the GTK3 vclplug. Only
    the file and folder picker are replaced by KDE dialogs. This gives
    us a well-maintained GTK LO base with basic KDE integration with
    minimum effort.
    
    To prevent issues with nested event loops, the KDE dialogs are
    launched from a separate process, the new lo_kde5filepicker helper
    executable. A trivial stdin/stdout IPC mechanism transfers the data
    between LO and the Qt/KDE helper. The usage of an external process
    also allows us to copy'n'paste between LO and the KDE file dialog
    without freezing the UI, as would happen when one would do this
    in-process. This is in general also the architecture applied by the
    kmozillahelper, which is used to integrate KDE file dialogs into
    Firefox.
    
    While the KDE dialog is shown, the GTK3 main window is disabled and
    close requests are ignored. The KDE dialog in turn also sets the LO
    window as transient parent. Together, this makes the illusion perfect
    and the KDE dialog behaves like a modal dialog. This works properly
    also with multiple LO main windows, and only individual windows will
    get blocked as one would expect.
    
    Functionality wise, most of the features of the KDE4 dialog are
    supported. You can pick files and folders, and save files under a new
    name. Some custom checkbox widgets are supported, but lists, buttons
    and preview widgets are not yet implemented. Also, loading remote
    files via KIO is not possible yet.
    
    Reviewed-on: https://gerrit.libreoffice.org/47718
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    (cherry picked from commit ecb5fcff336c8b0e5ad2503f0880c439a6c323a5)
    
    Change-Id: I1a97cf7c272307a19ace4222d5f12253bc722829

diff --git a/Repository.mk b/Repository.mk
index 735a2810e099..25c69f08fa1e 100644
--- a/Repository.mk
+++ b/Repository.mk
@@ -264,8 +264,14 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,kde, \
 	$(if $(ENABLE_KDE5),kde5be1) \
 	$(if $(USING_X11), \
 		$(if $(ENABLE_KDE4),vclplug_kde4) \
+		$(if $(ENABLE_GTK3_KDE5),vclplug_gtk3_kde5) \
 	) \
 ))
+ifneq ($(ENABLE_GTK3_KDE5),)
+$(eval $(call gb_Helper_register_executables_for_install,OOO,kde, \
+	lo_kde5filepicker \
+))
+endif
 
 $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,math, \
 	sm \
diff --git a/config_host.mk.in b/config_host.mk.in
index 930e47df394f..c36c91f42a99 100644
--- a/config_host.mk.in
+++ b/config_host.mk.in
@@ -165,6 +165,7 @@ export ENABLE_PCH=@ENABLE_PCH@
 export ENABLE_PDFIMPORT=@ENABLE_PDFIMPORT@
 export ENABLE_QT5=@ENABLE_QT5@
 export ENABLE_KDE5=@ENABLE_KDE5@
+export ENABLE_GTK3_KDE5=@ENABLE_GTK3_KDE5@
 export ENABLE_RANDR=@ENABLE_RANDR@
 export ENABLE_RELEASE_BUILD=@ENABLE_RELEASE_BUILD@
 export ENABLE_REPORTBUILDER=@ENABLE_REPORTBUILDER@
diff --git a/config_host/config_gtk3_kde5.h.in b/config_host/config_gtk3_kde5.h.in
new file mode 100644
index 000000000000..06c672d4bb69
--- /dev/null
+++ b/config_host/config_gtk3_kde5.h.in
@@ -0,0 +1,10 @@
+/*
+Settings for GTK3/KDE5 integration.
+*/
+
+#ifndef CONFIG_GTK3_KDE5_H
+#define CONFIG_GTK3_KDE5_H
+
+#define ENABLE_GTK3_KDE5 0
+
+#endif
diff --git a/config_host/config_vclplug.h.in b/config_host/config_vclplug.h.in
index 12d90ee704f6..ae9beb7dc686 100644
--- a/config_host/config_vclplug.h.in
+++ b/config_host/config_vclplug.h.in
@@ -10,5 +10,6 @@ Settings about which X11 desktops have support enabled.
 #define ENABLE_GTK 0
 #define ENABLE_KDE4 0
 #define ENABLE_TDE 0
+#define ENABLE_GTK3_KDE5 0
 
 #endif
diff --git a/configure.ac b/configure.ac
index ac91005f9402..d08c964bac99 100644
--- a/configure.ac
+++ b/configure.ac
@@ -648,6 +648,7 @@ linux-gnu*|k*bsd*-gnu*)
     test_kde4=yes
     test_kde5=yes
     test_qt5=yes
+    test_gtk3_kde5=yes
     test_freetype=yes
     _os=Linux
     ;;
@@ -746,6 +747,7 @@ freebsd*)
     test_kde4=yes
     test_kde5=yes
     test_qt5=yes
+    test_gtk3_kde5=yes
     test_freetype=yes
     AC_MSG_CHECKING([the FreeBSD operating system release])
     if test -n "$with_os_version"; then
@@ -777,6 +779,7 @@ freebsd*)
     test_kde4=yes
     test_kde5=yes
     test_qt5=yes
+    test_gtk3_kde5=yes
     test_freetype=yes
     PTHREAD_LIBS="-pthread -lpthread"
     _os=NetBSD
@@ -806,6 +809,7 @@ dragonfly*)
     test_kde4=yes
     test_kde5=yes
     test_qt5=yes
+    test_gtk3_kde5=yes
     test_freetype=yes
     PTHREAD_LIBS="-pthread"
     _os=DragonFly
@@ -832,6 +836,7 @@ linux-android*)
     test_kde4=no
     test_kde5=no
     test_qt5=no
+    test_gtk3_kde5=no
     test_randr=no
     test_xrender=no
     _os=Android
@@ -1288,6 +1293,12 @@ AC_ARG_ENABLE(kde5,
          KF5 are available.]),
 ,)
 
+AC_ARG_ENABLE(gtk3_kde5,
+    AS_HELP_STRING([--enable-gtk3-kde5],
+        [Determines whether to use Gtk3 vclplug with KDE file dialogs on
+         platforms where Gtk3, Qt5 and Plasma is available.]),
+,)
+
 AC_ARG_ENABLE(gui,
     AS_HELP_STRING([--disable-gui],
         [Disable X11/Wayland support to reduce dependencies. Maybe useful for
@@ -4798,6 +4809,7 @@ if test "$USING_X11" != TRUE; then
     test_kde4=no
     test_kde5=no
     test_qt5=no
+    test_gtk3_kde5=no
     enable_cairo_canvas=no
 fi
 
@@ -10152,6 +10164,14 @@ if test "x$enable_kde5" = "xyes"; then
 fi
 AC_SUBST(ENABLE_KDE5)
 
+ENABLE_GTK3_KDE5=""
+if test "x$enable_gtk3_kde5" = "xyes"; then
+    ENABLE_GTK3_KDE5="TRUE"
+    AC_DEFINE(ENABLE_GTK3_KDE5)
+    R="$R gtk3_kde5"
+fi
+AC_SUBST(ENABLE_GTK3_KDE5)
+
 build_vcl_plugins="$R"
 if test -z "$build_vcl_plugins"; then
     build_vcl_plugins="none"
@@ -13173,6 +13193,7 @@ AC_CONFIG_HEADERS([config_host/config_orcus.h])
 AC_CONFIG_HEADERS([config_host/config_kde4.h])
 AC_CONFIG_HEADERS([config_host/config_qt5.h])
 AC_CONFIG_HEADERS([config_host/config_kde5.h])
+AC_CONFIG_HEADERS([config_host/config_gtk3_kde5.h])
 AC_CONFIG_HEADERS([config_host/config_oox.h])
 AC_CONFIG_HEADERS([config_host/config_opengl.h])
 AC_CONFIG_HEADERS([config_host/config_options.h])
diff --git a/vcl/CustomTarget_gtk3_kde5_moc.mk b/vcl/CustomTarget_gtk3_kde5_moc.mk
new file mode 100644
index 000000000000..42f7edbe5105
--- /dev/null
+++ b/vcl/CustomTarget_gtk3_kde5_moc.mk
@@ -0,0 +1,22 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_CustomTarget_CustomTarget,vcl/unx/gtk3_kde5))
+
+$(call gb_CustomTarget_get_target,vcl/unx/gtk3_kde5) : \
+	$(call gb_CustomTarget_get_workdir,vcl/unx/gtk3_kde5)/kde5_filepicker.moc \
+	$(call gb_CustomTarget_get_workdir,vcl/unx/gtk3_kde5)/kde5_filepicker_ipc.moc \
+
+$(call gb_CustomTarget_get_workdir,vcl/unx/gtk3_kde5)/%.moc : \
+		$(SRCDIR)/vcl/unx/gtk3_kde5/%.hxx \
+		| $(call gb_CustomTarget_get_workdir,vcl/unx/gtk3_kde5)/.dir
+	$(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),MOC,1)
+	$(MOC5) $< -o $@
+
+# vim: set noet sw=4:
diff --git a/vcl/Executable_lo_kde5filepicker.mk b/vcl/Executable_lo_kde5filepicker.mk
new file mode 100644
index 000000000000..2eee2cd8711b
--- /dev/null
+++ b/vcl/Executable_lo_kde5filepicker.mk
@@ -0,0 +1,99 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+#   Licensed to the Apache Software Foundation (ASF) under one or more
+#   contributor license agreements. See the NOTICE file distributed
+#   with this work for additional information regarding copyright
+#   ownership. The ASF licenses this file to you under the Apache
+#   License, Version 2.0 (the "License"); you may not use this file
+#   except in compliance with the License. You may obtain a copy of
+#   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+
+$(eval $(call gb_Executable_Executable,lo_kde5filepicker))
+
+# FIXME: how to find the moc files automatically?!
+$(eval $(call gb_Executable_set_include,lo_kde5filepicker,\
+    $$(INCLUDE) \
+    -I$(SRCDIR)/vcl/inc \
+    -I$(WORKDIR)/CustomTarget/vcl/unx/gtk3_kde5 \
+))
+
+$(eval $(call gb_Executable_add_cxxflags,lo_kde5filepicker,\
+    $$(INCLUDE) \
+    $$(BOOST_CXXFLAGS) \
+))
+
+$(eval $(call gb_Executable_use_custom_headers,lo_kde5filepicker,\
+	officecfg/registry \
+))
+
+$(eval $(call gb_Executable_use_sdk_api,lo_kde5filepicker))
+
+$(eval $(call gb_Executable_add_libs,lo_kde5filepicker,\
+	-lX11 \
+	-lXext \
+	-lSM \
+	-lICE \
+))
+
+$(eval $(call gb_Executable_use_libraries,lo_kde5filepicker,\
+    vclplug_gen \
+    vcl \
+    tl \
+    utl \
+    sot \
+    ucbhelper \
+    basegfx \
+    comphelper \
+    cppuhelper \
+    i18nlangtag \
+    i18nutil \
+    $(if $(ENABLE_JAVA), \
+        jvmaccess) \
+    cppu \
+    sal \
+))
+
+$(eval $(call gb_Executable_use_externals,lo_kde5filepicker,\
+	boost_headers \
+	epoxy \
+	kde5 \
+	dbus \
+))
+
+$(eval $(call gb_Executable_add_defs,lo_kde5filepicker,\
+    $(QT5_CFLAGS) \
+    $(QT5_GLIB_CFLAGS) \
+    $(KF5_CFLAGS) \
+))
+$(eval $(call gb_Executable_add_libs,lo_kde5filepicker,\
+    $(QT5_LIBS) \
+    $(QT5_GLIB_LIBS) \
+    $(KF5_LIBS) \
+    $(BOOST_PROCESS_LIB) \
+    $(BOOST_FILESYSTEM_LIB) \
+))
+
+$(eval $(call gb_Executable_add_exception_objects,lo_kde5filepicker,\
+	vcl/unx/gtk3_kde5/kde5_lo_filepicker_main \
+	vcl/unx/gtk3_kde5/kde5_filepicker \
+	vcl/unx/gtk3_kde5/kde5_filepicker_ipc \
+))
+
+ifeq ($(OS),LINUX)
+$(eval $(call gb_Executable_add_libs,lo_kde5filepicker,\
+	-lm \
+	-ldl \
+	-lpthread \
+))
+endif
+
+# vim: set noet sw=4 ts=4:
diff --git a/vcl/Library_vclplug_gtk3_kde5.mk b/vcl/Library_vclplug_gtk3_kde5.mk
new file mode 100644
index 000000000000..eaff74cad35c
--- /dev/null
+++ b/vcl/Library_vclplug_gtk3_kde5.mk
@@ -0,0 +1,128 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+#   Licensed to the Apache Software Foundation (ASF) under one or more
+#   contributor license agreements. See the NOTICE file distributed
+#   with this work for additional information regarding copyright
+#   ownership. The ASF licenses this file to you under the Apache
+#   License, Version 2.0 (the "License"); you may not use this file
+#   except in compliance with the License. You may obtain a copy of
+#   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+
+$(eval $(call gb_Library_Library,vclplug_gtk3_kde5))
+
+# Silence deprecation warnings wholesale as long as vcl/unx/gtk3/*.cxx just
+# forward to vcl/unx/gtk/*.cxx:
+$(eval $(call gb_Library_add_cxxflags,vclplug_gtk3_kde5, \
+    -Wno-deprecated-declarations \
+))
+
+$(eval $(call gb_Library_set_include,vclplug_gtk3_kde5,\
+    $$(INCLUDE) \
+    -I$(SRCDIR)/vcl/inc \
+    -I$(SRCDIR)/vcl/unx \
+    -I$(SRCDIR)/vcl/unx/gtk3 \
+))
+
+$(eval $(call gb_Library_add_cxxflags,vclplug_gtk3_kde5,\
+    $$(INCLUDE) \
+    $$(GTK3_CFLAGS) \
+))
+
+$(eval $(call gb_Library_add_defs,vclplug_gtk3_kde5,\
+    -DVCLPLUG_GTK_IMPLEMENTATION -DVCLPLUG_GTK3_KDE5_IMPLEMENTATION \
+))
+
+$(eval $(call gb_Library_use_custom_headers,vclplug_gtk3_kde5,\
+	officecfg/registry \
+))
+
+$(eval $(call gb_Library_use_sdk_api,vclplug_gtk3_kde5))
+
+$(eval $(call gb_Library_add_libs,vclplug_gtk3_kde5,\
+	$(GTK3_LIBS) \
+	$(GTHREAD_LIBS) \
+	-lX11 \
+	-lXext \
+	-lSM \
+	-lICE \
+))
+
+$(eval $(call gb_Library_use_libraries,vclplug_gtk3_kde5,\
+    vclplug_gen \
+    vcl \
+    tl \
+    utl \
+    sot \
+    ucbhelper \
+    basegfx \
+    comphelper \
+    cppuhelper \
+    i18nlangtag \
+    i18nutil \
+    $(if $(ENABLE_JAVA), \
+        jvmaccess) \
+    cppu \
+    sal \
+))
+
+$(eval $(call gb_Library_use_externals,vclplug_gtk3_kde5,\
+	boost_headers \
+	boost_filesystem \
+	epoxy \
+	dbus \
+))
+
+$(eval $(call gb_Library_add_exception_objects,vclplug_gtk3_kde5,\
+	vcl/unx/gtk3_kde5/a11y/gtk3_kde5_atkaction \
+	vcl/unx/gtk3_kde5/a11y/gtk3_kde5_atkbridge \
+	vcl/unx/gtk3_kde5/a11y/gtk3_kde5_atkcomponent \
+	vcl/unx/gtk3_kde5/a11y/gtk3_kde5_atkeditabletext \
+	vcl/unx/gtk3_kde5/a11y/gtk3_kde5_atkfactory \
+	vcl/unx/gtk3_kde5/a11y/gtk3_kde5_atkhypertext \
+	vcl/unx/gtk3_kde5/a11y/gtk3_kde5_atkimage \
+	vcl/unx/gtk3_kde5/a11y/gtk3_kde5_atklistener \
+	vcl/unx/gtk3_kde5/a11y/gtk3_kde5_atkregistry \
+	vcl/unx/gtk3_kde5/a11y/gtk3_kde5_atkselection \
+	vcl/unx/gtk3_kde5/a11y/gtk3_kde5_atktable \
+	vcl/unx/gtk3_kde5/a11y/gtk3_kde5_atktextattributes \
+	vcl/unx/gtk3_kde5/a11y/gtk3_kde5_atktext \
+	vcl/unx/gtk3_kde5/a11y/gtk3_kde5_atkutil \
+	vcl/unx/gtk3_kde5/a11y/gtk3_kde5_atkvalue \
+	vcl/unx/gtk3_kde5/a11y/gtk3_kde5_atkwindow \
+	vcl/unx/gtk3_kde5/a11y/gtk3_kde5_atkwrapper \
+	vcl/unx/gtk3_kde5/gtk3_kde5_gtkdata \
+	vcl/unx/gtk3_kde5/gtk3_kde5_gtkinst \
+	vcl/unx/gtk3_kde5/gtk3_kde5_gtksys \
+	vcl/unx/gtk3_kde5/gtk3_kde5_filepicker \
+	vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc \
+	vcl/unx/gtk3_kde5/gtk3_kde5_folderpicker \
+	vcl/unx/gtk3_kde5/gtk3_kde5_cairo \
+	vcl/unx/gtk3_kde5/gtk3_kde5_printwrapper \
+	vcl/unx/gtk3_kde5/gtk3_kde5_salnativewidgets-gtk \
+	vcl/unx/gtk3_kde5/gtk3_kde5_salprn-gtk \
+	vcl/unx/gtk3_kde5/gtk3_kde5_gtkframe \
+	vcl/unx/gtk3_kde5/gtk3_kde5_gtkobject \
+	vcl/unx/gtk3_kde5/gtk3_kde5_gtksalmenu \
+	vcl/unx/gtk3_kde5/gtk3_kde5_glomenu \
+	vcl/unx/gtk3_kde5/gtk3_kde5_gloactiongroup \
+	vcl/unx/gtk3_kde5/gtk3_kde5_hudawareness \
+))
+
+ifeq ($(OS),LINUX)
+$(eval $(call gb_Library_add_libs,vclplug_gtk3_kde5,\
+	-lm \
+	-ldl \
+	-lpthread \
+))
+endif
+
+# vim: set noet sw=4 ts=4:
diff --git a/vcl/Module_vcl.mk b/vcl/Module_vcl.mk
index 18b3ad95210d..7dc02b022a9c 100644
--- a/vcl/Module_vcl.mk
+++ b/vcl/Module_vcl.mk
@@ -81,6 +81,13 @@ $(eval $(call gb_Module_add_targets,vcl,\
     Library_vclplug_kde4 \
 ))
 endif
+ifneq ($(ENABLE_GTK3_KDE5),)
+$(eval $(call gb_Module_add_targets,vcl,\
+    CustomTarget_gtk3_kde5_moc \
+    Library_vclplug_gtk3_kde5 \
+    Executable_lo_kde5filepicker \
+))
+endif
 endif
 
 ifeq ($(OS),MACOSX)
diff --git a/vcl/unx/generic/plugadapt/salplug.cxx b/vcl/unx/generic/plugadapt/salplug.cxx

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list