summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vcl/CustomTarget_qt5_moc.mk2
-rw-r--r--vcl/CustomTarget_qt6_moc.mk2
-rw-r--r--vcl/inc/qt5/QtInstanceContainer.hxx6
-rw-r--r--vcl/inc/qt5/QtInstanceDialog.hxx2
-rw-r--r--vcl/inc/qt5/QtInstanceWindow.hxx4
-rw-r--r--vcl/qt5/QtInstanceContainer.cxx11
-rw-r--r--vcl/qt5/QtInstanceWindow.cxx19
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: */