diff options
author | Michael Stahl <Michael.Stahl@cib.de> | 2019-02-25 17:00:21 +0100 |
---|---|---|
committer | Thorsten Behrens <Thorsten.Behrens@CIB.de> | 2019-05-22 13:44:56 +0200 |
commit | 97ecb2af57c5aa469d9d5dff5a488d96220269dc (patch) | |
tree | b112363444e49707ed5ae6c25700f2730af10d10 /vcl/unx | |
parent | 5be0bd7ca8d8ed890f3a95680a8c7710c473dcdf (diff) |
tdf#119856 vcl: convert Qt5FilePicker and Qt5Menu to RunInMainThread
... and also convert KDE5FilePicker. And Qt5Frame.
The UNO methods in Qt5FilePicker/KDE5FilePicker have to ensure that the
thread actually owns SolarMutex, because if RunInMainThread() is
called without that it will deadlock.
Change-Id: Ie4d2f494ac81c799ec7c9a3acb3a9b0f77bb6361
Reviewed-on: https://gerrit.libreoffice.org/68357
Tested-by: Jenkins
Reviewed-by: Katarina Behrens <Katarina.Behrens@cib.de>
(cherry picked from commit 7e251025b97ed2a300270b1a565727441005c77e)
Reviewed-on: https://gerrit.libreoffice.org/72660
Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Diffstat (limited to 'vcl/unx')
-rw-r--r-- | vcl/unx/kde5/KDE5FilePicker.hxx | 3 | ||||
-rw-r--r-- | vcl/unx/kde5/KDE5FilePicker2.cxx | 26 | ||||
-rw-r--r-- | vcl/unx/kde5/KDE5SalInstance.cxx | 1 |
3 files changed, 18 insertions, 12 deletions
diff --git a/vcl/unx/kde5/KDE5FilePicker.hxx b/vcl/unx/kde5/KDE5FilePicker.hxx index fb73fbe3b9af..dc3f5c0f63a4 100644 --- a/vcl/unx/kde5/KDE5FilePicker.hxx +++ b/vcl/unx/kde5/KDE5FilePicker.hxx @@ -92,9 +92,6 @@ private: protected: bool eventFilter(QObject* watched, QEvent* event) override; - -Q_SIGNALS: - sal_Int16 executeSignal(); }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index 5eb1a315db2a..6bdc63de926a 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -36,6 +36,7 @@ #include <unx/geninst.h> #include <qt5/Qt5Tools.hxx> +#include <qt5/Qt5Instance.hxx> #include <QtCore/QDebug> #include <QtCore/QThread> @@ -106,19 +107,20 @@ KDE5FilePicker::KDE5FilePicker(QFileDialog::FileMode eMode) QStringLiteral("smb"), }); - connect(this, &KDE5FilePicker::executeSignal, this, &KDE5FilePicker::execute, - Qt::BlockingQueuedConnection); - // used to set the custom controls qApp->installEventFilter(this); } sal_Int16 SAL_CALL KDE5FilePicker::execute() { - if (qApp->thread() != QThread::currentThread()) + SolarMutexGuard g; + auto* pSalInst(static_cast<Qt5Instance*>(GetSalData()->m_pInstance)); + assert(pSalInst); + if (!pSalInst->IsMainThread()) { - //SolarMutexReleaser aReleaser; - return Q_EMIT executeSignal(); + sal_Int16 ret; + pSalInst->RunInMainThread([&ret, this] { ret = execute(); }); + return ret; } if (!m_aNamedFilterList.isEmpty()) @@ -144,10 +146,16 @@ void SAL_CALL KDE5FilePicker::setValue(sal_Int16 controlId, sal_Int16 nControlAc uno::Any SAL_CALL KDE5FilePicker::getValue(sal_Int16 controlId, sal_Int16 nControlAction) { - if (qApp->thread() != QThread::currentThread()) + SolarMutexGuard g; + auto* pSalInst(static_cast<Qt5Instance*>(GetSalData()->m_pInstance)); + assert(pSalInst); + if (!pSalInst->IsMainThread()) { - SolarMutexReleaser aReleaser; - return Q_EMIT getValueSignal(controlId, nControlAction); + uno::Any ret; + pSalInst->RunInMainThread([&ret, this, controlId, nControlAction]() { + ret = getValue(controlId, nControlAction); + }); + return ret; } if (CHECKBOX_AUTOEXTENSION == controlId) diff --git a/vcl/unx/kde5/KDE5SalInstance.cxx b/vcl/unx/kde5/KDE5SalInstance.cxx index 565140cbcf4c..c8453c49d21a 100644 --- a/vcl/unx/kde5/KDE5SalInstance.cxx +++ b/vcl/unx/kde5/KDE5SalInstance.cxx @@ -63,6 +63,7 @@ KDE5SalInstance::createFilePicker(const uno::Reference<uno::XComponentContext>& { if (!IsMainThread()) { + SolarMutexGuard g; uno::Reference<ui::dialogs::XFilePicker2> xRet; RunInMainThread( std::function([&xRet, this, xMSF]() { xRet = this->createFilePicker(xMSF); })); |