summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gui/kernel/qwindow.cpp9
-rw-r--r--src/gui/kernel/qwindow.h1
-rw-r--r--src/widgets/kernel/qwidgetwindow_qpa.cpp17
-rw-r--r--src/widgets/kernel/qwidgetwindow_qpa_p.h1
4 files changed, 23 insertions, 5 deletions
diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp
index 04098b44c8..80666b87d2 100644
--- a/src/gui/kernel/qwindow.cpp
+++ b/src/gui/kernel/qwindow.cpp
@@ -663,6 +663,15 @@ QAccessibleInterface *QWindow::accessibleRoot() const
return 0;
}
+/*!
+ Returns the QObject that will be the final receiver of events tied focus, such
+ as key events.
+*/
+QObject *QWindow::focusObject() const
+{
+ return const_cast<QWindow *>(this);
+}
+
void QWindow::showMinimized()
{
diff --git a/src/gui/kernel/qwindow.h b/src/gui/kernel/qwindow.h
index 44cbfd04e4..7d6a391339 100644
--- a/src/gui/kernel/qwindow.h
+++ b/src/gui/kernel/qwindow.h
@@ -196,6 +196,7 @@ public:
void setScreen(QScreen *screen);
virtual QAccessibleInterface *accessibleRoot() const;
+ virtual QObject *focusObject() const;
QPoint mapToGlobal(const QPoint &pos) const;
QPoint mapFromGlobal(const QPoint &pos) const;
diff --git a/src/widgets/kernel/qwidgetwindow_qpa.cpp b/src/widgets/kernel/qwidgetwindow_qpa.cpp
index 2265fb55fb..32a446fa54 100644
--- a/src/widgets/kernel/qwidgetwindow_qpa.cpp
+++ b/src/widgets/kernel/qwidgetwindow_qpa.cpp
@@ -67,6 +67,16 @@ QAccessibleInterface *QWidgetWindow::accessibleRoot() const
return 0;
}
+QObject *QWidgetWindow::focusObject() const
+{
+ QWidget *widget = m_widget->focusWidget();
+
+ if (!widget)
+ widget = m_widget;
+
+ return widget;
+}
+
bool QWidgetWindow::event(QEvent *event)
{
switch (event->type()) {
@@ -287,12 +297,9 @@ void QWidgetWindow::handleKeyEvent(QKeyEvent *event)
if (QApplicationPrivate::instance()->modalState() && !qt_try_modal(m_widget, event->type()))
return;
- QWidget *widget = m_widget->focusWidget();
-
- if (!widget)
- widget = m_widget;
+ QObject *receiver = focusObject();
- QGuiApplication::sendSpontaneousEvent(widget, event);
+ QGuiApplication::sendSpontaneousEvent(receiver, event);
}
void QWidgetWindow::updateGeometry()
diff --git a/src/widgets/kernel/qwidgetwindow_qpa_p.h b/src/widgets/kernel/qwidgetwindow_qpa_p.h
index 9f31d0e2ca..906b96c47b 100644
--- a/src/widgets/kernel/qwidgetwindow_qpa_p.h
+++ b/src/widgets/kernel/qwidgetwindow_qpa_p.h
@@ -65,6 +65,7 @@ public:
QWidget *widget() const { return m_widget; }
QAccessibleInterface *accessibleRoot() const;
+ QObject *focusObject() const;
protected:
bool event(QEvent *);