diff options
-rw-r--r-- | vcl/CustomTarget_qt5_moc.mk | 2 | ||||
-rw-r--r-- | vcl/CustomTarget_qt6_moc.mk | 2 | ||||
-rw-r--r-- | vcl/inc/qt5/QtInstanceContainer.hxx | 6 | ||||
-rw-r--r-- | vcl/inc/qt5/QtInstanceDialog.hxx | 2 | ||||
-rw-r--r-- | vcl/inc/qt5/QtInstanceWindow.hxx | 4 | ||||
-rw-r--r-- | vcl/qt5/QtInstanceContainer.cxx | 11 | ||||
-rw-r--r-- | vcl/qt5/QtInstanceWindow.cxx | 19 |
7 files changed, 41 insertions, 5 deletions
diff --git a/vcl/CustomTarget_qt5_moc.mk b/vcl/CustomTarget_qt5_moc.mk index 672398d4b03f..5af117c05488 100644 --- a/vcl/CustomTarget_qt5_moc.mk +++ b/vcl/CustomTarget_qt5_moc.mk @@ -15,6 +15,7 @@ $(call gb_CustomTarget_get_target,vcl/qt5) : \ $(gb_CustomTarget_workdir)/vcl/qt5/QtFrame.moc \ $(gb_CustomTarget_workdir)/vcl/qt5/QtInstance.moc \ $(gb_CustomTarget_workdir)/vcl/qt5/QtInstanceComboBox.moc \ + $(gb_CustomTarget_workdir)/vcl/qt5/QtInstanceContainer.moc \ $(gb_CustomTarget_workdir)/vcl/qt5/QtInstanceDialog.moc \ $(gb_CustomTarget_workdir)/vcl/qt5/QtInstanceDrawingArea.moc \ $(gb_CustomTarget_workdir)/vcl/qt5/QtInstanceEntry.moc \ @@ -23,6 +24,7 @@ $(call gb_CustomTarget_get_target,vcl/qt5) : \ $(gb_CustomTarget_workdir)/vcl/qt5/QtInstanceMessageDialog.moc \ $(gb_CustomTarget_workdir)/vcl/qt5/QtInstanceProgressBar.moc \ $(gb_CustomTarget_workdir)/vcl/qt5/QtInstanceRadioButton.moc \ + $(gb_CustomTarget_workdir)/vcl/qt5/QtInstanceWindow.moc \ $(gb_CustomTarget_workdir)/vcl/qt5/QtMainWindow.moc \ $(gb_CustomTarget_workdir)/vcl/qt5/QtMenu.moc \ $(gb_CustomTarget_workdir)/vcl/qt5/QtTransferable.moc \ diff --git a/vcl/CustomTarget_qt6_moc.mk b/vcl/CustomTarget_qt6_moc.mk index 03d3c079771f..ddb805833b66 100644 --- a/vcl/CustomTarget_qt6_moc.mk +++ b/vcl/CustomTarget_qt6_moc.mk @@ -15,6 +15,7 @@ $(call gb_CustomTarget_get_target,vcl/qt6) : \ $(gb_CustomTarget_workdir)/vcl/qt6/QtFrame.moc \ $(gb_CustomTarget_workdir)/vcl/qt6/QtInstance.moc \ $(gb_CustomTarget_workdir)/vcl/qt6/QtInstanceComboBox.moc \ + $(gb_CustomTarget_workdir)/vcl/qt6/QtInstanceContainer.moc \ $(gb_CustomTarget_workdir)/vcl/qt6/QtInstanceDialog.moc \ $(gb_CustomTarget_workdir)/vcl/qt6/QtInstanceDrawingArea.moc \ $(gb_CustomTarget_workdir)/vcl/qt6/QtInstanceEntry.moc \ @@ -23,6 +24,7 @@ $(call gb_CustomTarget_get_target,vcl/qt6) : \ $(gb_CustomTarget_workdir)/vcl/qt6/QtInstanceMessageDialog.moc \ $(gb_CustomTarget_workdir)/vcl/qt6/QtInstanceProgressBar.moc \ $(gb_CustomTarget_workdir)/vcl/qt6/QtInstanceRadioButton.moc \ + $(gb_CustomTarget_workdir)/vcl/qt6/QtInstanceWindow.moc \ $(gb_CustomTarget_workdir)/vcl/qt6/QtMainWindow.moc \ $(gb_CustomTarget_workdir)/vcl/qt6/QtMenu.moc \ $(gb_CustomTarget_workdir)/vcl/qt6/QtTransferable.moc \ diff --git a/vcl/inc/qt5/QtInstanceContainer.hxx b/vcl/inc/qt5/QtInstanceContainer.hxx index 371cc4d46aae..4d5c13dcd12f 100644 --- a/vcl/inc/qt5/QtInstanceContainer.hxx +++ b/vcl/inc/qt5/QtInstanceContainer.hxx @@ -13,8 +13,10 @@ #include <QtWidgets/QLayout> -class QtInstanceContainer : public QtInstanceWidget, public virtual weld::Container +class QtInstanceContainer : public QObject, public QtInstanceWidget, public virtual weld::Container { + Q_OBJECT + public: QtInstanceContainer(QWidget* pWidget); @@ -24,7 +26,7 @@ public: virtual void child_grab_focus() override; - virtual void connect_container_focus_changed(const Link<Container&, void>&) override; + virtual void connect_container_focus_changed(const Link<Container&, void>& rLink) override; private: QLayout& getLayout(); diff --git a/vcl/inc/qt5/QtInstanceDialog.hxx b/vcl/inc/qt5/QtInstanceDialog.hxx index d4c8dc3ff9b1..f4ed8d4423c8 100644 --- a/vcl/inc/qt5/QtInstanceDialog.hxx +++ b/vcl/inc/qt5/QtInstanceDialog.hxx @@ -13,7 +13,7 @@ #include <QtWidgets/QAbstractButton> -class QtInstanceDialog : public QObject, public QtInstanceWindow, public virtual weld::Dialog +class QtInstanceDialog : public QtInstanceWindow, public virtual weld::Dialog { Q_OBJECT diff --git a/vcl/inc/qt5/QtInstanceWindow.hxx b/vcl/inc/qt5/QtInstanceWindow.hxx index e84a6071b3f0..ee2cbcb757c6 100644 --- a/vcl/inc/qt5/QtInstanceWindow.hxx +++ b/vcl/inc/qt5/QtInstanceWindow.hxx @@ -13,6 +13,8 @@ class QtInstanceWindow : public QtInstanceContainer, public virtual weld::Window { + Q_OBJECT + public: QtInstanceWindow(QWidget* pWidget); @@ -45,6 +47,8 @@ public: virtual VclPtr<VirtualDevice> screenshot() override; virtual const vcl::ILibreOfficeKitNotifier* GetLOKNotifier() override; + + bool eventFilter(QObject* pObject, QEvent* pEvent) override; }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/qt5/QtInstanceContainer.cxx b/vcl/qt5/QtInstanceContainer.cxx index 8f8742387235..83909a83675e 100644 --- a/vcl/qt5/QtInstanceContainer.cxx +++ b/vcl/qt5/QtInstanceContainer.cxx @@ -8,6 +8,9 @@ */ #include <QtInstanceContainer.hxx> +#include <QtInstanceContainer.moc> + +#include <QtInstanceWindow.hxx> QtInstanceContainer::QtInstanceContainer(QWidget* pWidget) : QtInstanceWidget(pWidget) @@ -43,9 +46,13 @@ css::uno::Reference<css::awt::XWindow> QtInstanceContainer::CreateChildFrame() void QtInstanceContainer::child_grab_focus() { assert(false && "Not implemented yet"); } -void QtInstanceContainer::connect_container_focus_changed(const Link<Container&, void>&) +void QtInstanceContainer::connect_container_focus_changed(const Link<Container&, void>& rLink) { - assert(false && "Not implemented yet"); + // for QtInstanceWindow, no special handling is needed, activate/deactivate events trigger the signal + if (!qobject_cast<QtInstanceWindow*>(this)) + assert(false && "Not implemented yet"); + + weld::Container::connect_container_focus_changed(rLink); } QLayout& QtInstanceContainer::getLayout() diff --git a/vcl/qt5/QtInstanceWindow.cxx b/vcl/qt5/QtInstanceWindow.cxx index a3c6b3de3687..344db175764b 100644 --- a/vcl/qt5/QtInstanceWindow.cxx +++ b/vcl/qt5/QtInstanceWindow.cxx @@ -8,12 +8,15 @@ */ #include <QtInstanceWindow.hxx> +#include <QtInstanceWindow.moc> #include <vcl/qt/QtUtils.hxx> QtInstanceWindow::QtInstanceWindow(QWidget* pWidget) : QtInstanceContainer(pWidget) { + // install event filter to handle window activation/deactivation events + pWidget->installEventFilter(this); } void QtInstanceWindow::set_title(const OUString& rTitle) @@ -93,4 +96,20 @@ VclPtr<VirtualDevice> QtInstanceWindow::screenshot() { return nullptr; } const vcl::ILibreOfficeKitNotifier* QtInstanceWindow::GetLOKNotifier() { return nullptr; } +bool QtInstanceWindow::eventFilter(QObject* pObject, QEvent* pEvent) +{ + if (pObject != getQWidget()) + return false; + + switch (pEvent->type()) + { + case QEvent::WindowActivate: + case QEvent::WindowDeactivate: + signal_container_focus_changed(); + return false; + default: + return false; + } +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |