From e0e3064e43dd21f9d91805718618625ac4fb29d7 Mon Sep 17 00:00:00 2001 From: Aleksei Nikiforov Date: Mon, 25 Feb 2019 14:40:45 +0300 Subject: 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 (cherry picked from commit 5fe551931d49a64ca4ea793a5016c098e41e84cd) Reviewed-on: https://gerrit.libreoffice.org/68414 Reviewed-by: Michael Weghorn --- 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(-) 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 640c83753deb..6d30dfb6d388 100644 --- a/vcl/inc/qt5/Qt5Object.hxx +++ b/vcl/inc/qt5/Qt5Object.hxx @@ -22,14 +22,17 @@ #include #include +#include #include 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 3d9f78b876d8..adbe70bfb296 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(pParent), nStyle, m_bUseCairo); } -void Qt5Instance::DestroyFrame(SalFrame* pFrame) { delete pFrame; } +void Qt5Instance::DestroyFrame(SalFrame* pFrame) +{ + if (pFrame) + { + assert(dynamic_cast(pFrame)); + static_cast(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(pParent), bShow); } -void Qt5Instance::DestroyObject(SalObject* pObject) { delete pObject; } +void Qt5Instance::DestroyObject(SalObject* pObject) +{ + if (pObject) + { + assert(dynamic_cast(pObject)); + static_cast(pObject)->deleteLater(); + } +} std::unique_ptr Qt5Instance::CreateVirtualDevice(SalGraphics* pGraphics, long& nDX, long& nDY, DeviceFormat eFormat, diff --git a/vcl/qt5/Qt5Object.cxx b/vcl/qt5/Qt5Object.cxx index e498283ef1ee..3787bc715976 100644 --- a/vcl/qt5/Qt5Object.cxx +++ b/vcl/qt5/Qt5Object.cxx @@ -18,6 +18,7 @@ */ #include +#include #include -- cgit v1.2.3