diff options
author | Jan-Marek Glogowski <glogow@fbihome.de> | 2019-06-02 20:17:49 +0000 |
---|---|---|
committer | Jan-Marek Glogowski <glogow@fbihome.de> | 2019-06-05 13:21:36 +0200 |
commit | ca69a1e17782d88580f2449e0252be52c26cae42 (patch) | |
tree | 49fcf3067b414fe940ee04e6b35f75a3bb115042 /vcl/qt5 | |
parent | b1a17c2d3f35ed801d745785fdeb7cf1ea2e1c60 (diff) |
Qt5/KDE5 always use either Qt5 or KDE5 pickers
And use RunInMain for both SalInstances and for both picker types,
as there is no reason to assume just the file and not the folder
picker can be called from the non-GUI thread.
Little drawback is the inclusion of Qt5FilePicker header in the
Qt5Instance header, as Qt's enums aren't forward-declarable.
Change-Id: Ie170d247a76134df9aff835393c71c9d6e907d32
Reviewed-on: https://gerrit.libreoffice.org/73416
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
Diffstat (limited to 'vcl/qt5')
-rw-r--r-- | vcl/qt5/Qt5Instance.cxx | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/vcl/qt5/Qt5Instance.cxx b/vcl/qt5/Qt5Instance.cxx index 0358ecd548a6..52eab795682e 100644 --- a/vcl/qt5/Qt5Instance.cxx +++ b/vcl/qt5/Qt5Instance.cxx @@ -394,18 +394,32 @@ void Qt5Instance::ProcessEvent(SalUserEvent aEvent) aEvent.m_pFrame->CallCallback(aEvent.m_nEvent, aEvent.m_pData); } +Qt5FilePicker* Qt5Instance::createPicker(QFileDialog::FileMode eMode) +{ + if (!IsMainThread()) + { + SolarMutexGuard g; + Qt5FilePicker* pPicker; + RunInMainThread(std::function([&, this]() { pPicker = createPicker(eMode); })); + assert(pPicker); + return pPicker; + } + + return new Qt5FilePicker(eMode); +} + css::uno::Reference<css::ui::dialogs::XFilePicker2> Qt5Instance::createFilePicker(const css::uno::Reference<css::uno::XComponentContext>&) { return css::uno::Reference<css::ui::dialogs::XFilePicker2>( - new Qt5FilePicker(QFileDialog::ExistingFile)); + createPicker(QFileDialog::ExistingFile)); } css::uno::Reference<css::ui::dialogs::XFolderPicker2> Qt5Instance::createFolderPicker(const css::uno::Reference<css::uno::XComponentContext>&) { return css::uno::Reference<css::ui::dialogs::XFolderPicker2>( - new Qt5FilePicker(QFileDialog::Directory)); + createPicker(QFileDialog::Directory)); } css::uno::Reference<css::uno::XInterface> |