summaryrefslogtreecommitdiff
path: root/vcl/unx
diff options
context:
space:
mode:
authorMichael Stahl <Michael.Stahl@cib.de>2019-02-25 17:00:21 +0100
committerThorsten Behrens <Thorsten.Behrens@CIB.de>2019-05-22 13:44:56 +0200
commit97ecb2af57c5aa469d9d5dff5a488d96220269dc (patch)
treeb112363444e49707ed5ae6c25700f2730af10d10 /vcl/unx
parent5be0bd7ca8d8ed890f3a95680a8c7710c473dcdf (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.hxx3
-rw-r--r--vcl/unx/kde5/KDE5FilePicker2.cxx26
-rw-r--r--vcl/unx/kde5/KDE5SalInstance.cxx1
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); }));