summaryrefslogtreecommitdiffstats
path: root/vcl/qt5
diff options
context:
space:
mode:
authorAleksei Nikiforov <darktemplar@basealt.ru>2019-03-06 16:10:17 +0300
committerThorsten Behrens <Thorsten.Behrens@CIB.de>2019-04-02 01:59:19 +0200
commitd622be2d6bcfcc2c7260421e0eaa09c76ce15da2 (patch)
tree1b3692182cf4c11d1179d9f003fffa7f9b05250b /vcl/qt5
parenttdf#124413 Crash on undo / redo in Basic IDE (diff)
downloadcore-d622be2d6bcfcc2c7260421e0eaa09c76ce15da2.tar.gz
core-d622be2d6bcfcc2c7260421e0eaa09c76ce15da2.zip
tdf#123406 KDE5: Update delayed frame destruction
Move deleteLater() call to the different event loop. This fixes issue with frames not being disposed of deterministically, and previously opened window not reactivating. Also hide modal dialog window before unsetting modal mode. Unsetting modal mode may require to toggle window visibility. Window will be hidden soon anyway, and additional generated events might make finding correct focused window harder. Change-Id: Id7839f817075785287b09f6ac79eb3fb211726aa Reviewed-on: https://gerrit.libreoffice.org/68852 Tested-by: Jenkins Reviewed-by: Katarina Behrens <Katarina.Behrens@cib.de> Reviewed-on: https://gerrit.libreoffice.org/70078 Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Diffstat (limited to 'vcl/qt5')
-rw-r--r--vcl/qt5/Qt5Instance.cxx12
1 files changed, 10 insertions, 2 deletions
diff --git a/vcl/qt5/Qt5Instance.cxx b/vcl/qt5/Qt5Instance.cxx
index 8de9fc7f5712..58f93fea73c6 100644
--- a/vcl/qt5/Qt5Instance.cxx
+++ b/vcl/qt5/Qt5Instance.cxx
@@ -67,6 +67,12 @@ Qt5Instance::Qt5Instance(bool bUseCairo)
Qt::BlockingQueuedConnection);
connect(this, &Qt5Instance::createMenuSignal, this, &Qt5Instance::CreateMenu,
Qt::BlockingQueuedConnection);
+
+ // this one needs to be queued non-blocking
+ // in order to have this event arriving to correct event processing loop
+ connect(this, &Qt5Instance::deleteObjectLaterSignal, this,
+ [](QObject* pObject) { Qt5Instance::deleteObjectLater(pObject); },
+ Qt::QueuedConnection);
}
Qt5Instance::~Qt5Instance()
@@ -78,6 +84,8 @@ Qt5Instance::~Qt5Instance()
free(m_pFakeArgvFreeable[i]);
}
+void Qt5Instance::deleteObjectLater(QObject* pObject) { pObject->deleteLater(); }
+
SalFrame* Qt5Instance::CreateChildFrame(SystemParentData* /*pParent*/, SalFrameStyleFlags nStyle)
{
return new Qt5Frame(nullptr, nStyle, m_bUseCairo);
@@ -94,7 +102,7 @@ void Qt5Instance::DestroyFrame(SalFrame* pFrame)
if (pFrame)
{
assert(dynamic_cast<Qt5Frame*>(pFrame));
- static_cast<Qt5Frame*>(pFrame)->deleteLater();
+ Q_EMIT deleteObjectLaterSignal(static_cast<Qt5Frame*>(pFrame));
}
}
@@ -109,7 +117,7 @@ void Qt5Instance::DestroyObject(SalObject* pObject)
if (pObject)
{
assert(dynamic_cast<Qt5Object*>(pObject));
- static_cast<Qt5Object*>(pObject)->deleteLater();
+ Q_EMIT deleteObjectLaterSignal(static_cast<Qt5Object*>(pObject));
}
}