[Libreoffice-commits] core.git: vcl/CustomTarget_qt5_moc.mk vcl/inc vcl/qt5

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Wed Feb 27 00:04:27 UTC 2019


 vcl/CustomTarget_qt5_moc.mk |    1 +
 vcl/inc/qt5/Qt5Object.hxx   |    5 ++++-
 vcl/qt5/Qt5Instance.cxx     |   18 ++++++++++++++++--
 vcl/qt5/Qt5Object.cxx       |    1 +
 4 files changed, 22 insertions(+), 3 deletions(-)

New commits:
commit 5fe551931d49a64ca4ea793a5016c098e41e84cd
Author:     Aleksei Nikiforov <darktemplar at basealt.ru>
AuthorDate: Mon Feb 25 14:40:45 2019 +0300
Commit:     Thorsten Behrens <Thorsten.Behrens at CIB.de>
CommitDate: Wed Feb 27 01:04:03 2019 +0100

    tdf#123406 KDE5: Use delayed frame destruction
    
    Destroy Qt5Frame after all events are received.
    Update Qt5Object to use delayed destruction too.
    
    Change-Id: I07c7251e097ad56f3616f325fdc394d00fec4f4f
    Reviewed-on: https://gerrit.libreoffice.org/68316
    Tested-by: Jenkins
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/vcl/CustomTarget_qt5_moc.mk b/vcl/CustomTarget_qt5_moc.mk
index 55e9dcee9cd3..289fea74aa2e 100644
--- a/vcl/CustomTarget_qt5_moc.mk
+++ b/vcl/CustomTarget_qt5_moc.mk
@@ -16,6 +16,7 @@ $(call gb_CustomTarget_get_target,vcl/qt5) : \
 	$(call gb_CustomTarget_get_workdir,vcl/qt5)/Qt5Instance.moc \
 	$(call gb_CustomTarget_get_workdir,vcl/qt5)/Qt5MainWindow.moc \
 	$(call gb_CustomTarget_get_workdir,vcl/qt5)/Qt5Menu.moc \
+	$(call gb_CustomTarget_get_workdir,vcl/qt5)/Qt5Object.moc \
 	$(call gb_CustomTarget_get_workdir,vcl/qt5)/Qt5Timer.moc \
 	$(call gb_CustomTarget_get_workdir,vcl/qt5)/Qt5Widget.moc \
 	$(call gb_CustomTarget_get_workdir,vcl/qt5)/Qt5XAccessible.moc \
diff --git a/vcl/inc/qt5/Qt5Object.hxx b/vcl/inc/qt5/Qt5Object.hxx
index a0aad7c43551..88cd8baa78da 100644
--- a/vcl/inc/qt5/Qt5Object.hxx
+++ b/vcl/inc/qt5/Qt5Object.hxx
@@ -22,14 +22,17 @@
 #include <salobj.hxx>
 #include <vcl/sysdata.hxx>
 
+#include <QtCore/QObject>
 #include <QtGui/QRegion>
 
 class Qt5Frame;
 class QWidget;
 class QWindow;
 
-class Qt5Object : public SalObject
+class Qt5Object : public QObject, public SalObject
 {
+    Q_OBJECT
+
     friend class Qt5OpenGLContext;
 
     SystemEnvData m_aSystemData;
diff --git a/vcl/qt5/Qt5Instance.cxx b/vcl/qt5/Qt5Instance.cxx
index 31dfb83c25ba..2a190e4a0437 100644
--- a/vcl/qt5/Qt5Instance.cxx
+++ b/vcl/qt5/Qt5Instance.cxx
@@ -89,7 +89,14 @@ SalFrame* Qt5Instance::CreateFrame(SalFrame* pParent, SalFrameStyleFlags nStyle)
     return new Qt5Frame(static_cast<Qt5Frame*>(pParent), nStyle, m_bUseCairo);
 }
 
-void Qt5Instance::DestroyFrame(SalFrame* pFrame) { delete pFrame; }
+void Qt5Instance::DestroyFrame(SalFrame* pFrame)
+{
+    if (pFrame)
+    {
+        assert(dynamic_cast<Qt5Frame*>(pFrame));
+        static_cast<Qt5Frame*>(pFrame)->deleteLater();
+    }
+}
 
 SalObject* Qt5Instance::CreateObject(SalFrame* pParent, SystemWindowData*, bool bShow)
 {
@@ -97,7 +104,14 @@ SalObject* Qt5Instance::CreateObject(SalFrame* pParent, SystemWindowData*, bool
     return new Qt5Object(static_cast<Qt5Frame*>(pParent), bShow);
 }
 
-void Qt5Instance::DestroyObject(SalObject* pObject) { delete pObject; }
+void Qt5Instance::DestroyObject(SalObject* pObject)
+{
+    if (pObject)
+    {
+        assert(dynamic_cast<Qt5Object*>(pObject));
+        static_cast<Qt5Object*>(pObject)->deleteLater();
+    }
+}
 
 std::unique_ptr<SalVirtualDevice>
 Qt5Instance::CreateVirtualDevice(SalGraphics* pGraphics, long& nDX, long& nDY, DeviceFormat eFormat,
diff --git a/vcl/qt5/Qt5Object.cxx b/vcl/qt5/Qt5Object.cxx
index b37ef20e61ac..b1952727c3a2 100644
--- a/vcl/qt5/Qt5Object.cxx
+++ b/vcl/qt5/Qt5Object.cxx
@@ -18,6 +18,7 @@
  */
 
 #include <Qt5Object.hxx>
+#include <Qt5Object.moc>
 
 #include <Qt5Frame.hxx>
 


More information about the Libreoffice-commits mailing list