From 4366e0605214260e55a937173b0c2e02225dc843 Mon Sep 17 00:00:00 2001 From: Jan-Marek Glogowski Date: Tue, 24 May 2022 11:34:59 +0200 Subject: tdf#148864 Qt switch QtObjectWindow to QWidget ... and therefore rename it to QtObjectWidget Replacement of the QWidget with QWindow originally happened in commit 56b19f9a814ae5a39ed760ee542d715493cd0bf3 ("tdf#121247, tdf#121266 KDE5: Add basic support for OpenGL"), but that unfortunately has a very sparce commit message with no reason for this change. Then the code was further complicated in commit 25edbded9946801effd117b9c46de0f8b4bc5632 ("tdf#125517 Qt5 implement a minimal Qt5ObjectWindow") and a few follow up fixes to restore input and focus handling. But appearingly all this QWindow handling isn't necessary and just returning to a QWidget based class fixes the problems with the video overlay (AKA QWidget::winId()) and video playback for good. The OpenGL Impress transition (Fade) mentioned in the original tdf#121266 bug still works. This also adds the previously missing SolarMutexGuard to all the overridden QtObjectWidget functions, which call the SalObject's Callback function. I accidently triggered a DBG_TESTSOLARMUTEX crashing Impress while debugging this. Change-Id: Ia22cabfd4f3585dc7fa3f9f18a913c5bd1987dd8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134864 Reviewed-by: Michael Weghorn Tested-by: Jenkins --- vcl/inc/qt5/QtObject.hxx | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 'vcl/inc') diff --git a/vcl/inc/qt5/QtObject.hxx b/vcl/inc/qt5/QtObject.hxx index 328946e4388e..bc5a8e584b8f 100644 --- a/vcl/inc/qt5/QtObject.hxx +++ b/vcl/inc/qt5/QtObject.hxx @@ -24,10 +24,11 @@ #include #include -#include +#include class QtFrame; -class QWidget; +class QtObjectWidget; +class QWindow; class QtObject final : public QObject, public SalObject { @@ -35,17 +36,18 @@ class QtObject final : public QObject, public SalObject SystemEnvData m_aSystemData; QtFrame* m_pParent; - QWidget* m_pQWidget; // main widget, container - QWindow* m_pQWindow; // contained window, used for opengl rendering + QtObjectWidget* m_pQWidget; QRegion m_pRegion; + bool m_bForwardKey; public: QtObject(QtFrame* pParent, bool bShow); ~QtObject() override; QtFrame* frame() const { return m_pParent; } - QWidget* widget() const { return m_pQWidget; } - QWindow* windowHandle() const { return m_pQWindow; } + inline QWidget* widget() const; + QWindow* windowHandle() const; + bool forwardKey() const { return m_bForwardKey; } virtual void ResetClipRegion() override; virtual void BeginSetClipRegion(sal_uInt32 nRects) override; @@ -60,22 +62,25 @@ public: virtual void SetForwardKey(bool bEnable) override; virtual const SystemEnvData* GetSystemData() const override { return &m_aSystemData; } + + virtual void Reparent(SalFrame* pFrame) override; }; -class QtObjectWindow final : public QWindow +class QtObjectWidget final : public QWidget { QtObject& m_rParent; - bool event(QEvent*) override; void focusInEvent(QFocusEvent*) override; void focusOutEvent(QFocusEvent*) override; void mousePressEvent(QMouseEvent*) override; void mouseReleaseEvent(QMouseEvent*) override; - // keyPressEvent(QKeyEvent*) is handled via event(QEvent*); see comment in QtWidget::event + void keyPressEvent(QKeyEvent*) override; void keyReleaseEvent(QKeyEvent*) override; public: - explicit QtObjectWindow(QtObject& rParent); + explicit QtObjectWidget(QtObject& rParent); }; +QWidget* QtObject::widget() const { return m_pQWidget; } + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit