aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quick/items/qquickwindow.cpp9
-rw-r--r--src/quickwidgets/qquickwidget.cpp14
-rw-r--r--src/quickwidgets/qquickwidget.h3
3 files changed, 25 insertions, 1 deletions
diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp
index 6220ea2e1f..e78f9141a8 100644
--- a/src/quick/items/qquickwindow.cpp
+++ b/src/quick/items/qquickwindow.cpp
@@ -687,6 +687,13 @@ void QQuickWindowPrivate::translateTouchEvent(QTouchEvent *touchEvent)
touchEvent->setTouchPoints(touchPoints);
}
+
+static inline bool windowHasFocus(QQuickWindow *win)
+{
+ const QWindow *focusWindow = QGuiApplication::focusWindow();
+ return win == focusWindow || QQuickRenderControl::renderWindowFor(win) == focusWindow;
+}
+
/*!
Set the focus inside \a scope to be \a item.
If the scope contains the active focus item, it will be changed to \a item.
@@ -762,7 +769,7 @@ void QQuickWindowPrivate::setFocusInScope(QQuickItem *scope, QQuickItem *item, Q
}
if (!(options & DontChangeFocusProperty)) {
- if (item != contentItem || QGuiApplication::focusWindow() == q) {
+ if (item != contentItem || windowHasFocus(q)) {
itemPrivate->focus = true;
changed << item;
}
diff --git a/src/quickwidgets/qquickwidget.cpp b/src/quickwidgets/qquickwidget.cpp
index e20e5f22ab..7e31c271f4 100644
--- a/src/quickwidgets/qquickwidget.cpp
+++ b/src/quickwidgets/qquickwidget.cpp
@@ -941,6 +941,20 @@ void QQuickWidget::wheelEvent(QWheelEvent *e)
}
#endif
+
+void QQuickWidget::focusInEvent(QFocusEvent * event)
+{
+ Q_D(QQuickWidget);
+ d->offscreenWindow->focusInEvent(event);
+}
+
+void QQuickWidget::focusOutEvent(QFocusEvent * event)
+{
+ Q_D(QQuickWidget);
+ d->offscreenWindow->focusOutEvent(event);
+}
+
+
/*! \reimp */
bool QQuickWidget::event(QEvent *e)
{
diff --git a/src/quickwidgets/qquickwidget.h b/src/quickwidgets/qquickwidget.h
index 81e9af02fb..4287933063 100644
--- a/src/quickwidgets/qquickwidget.h
+++ b/src/quickwidgets/qquickwidget.h
@@ -120,6 +120,9 @@ protected:
virtual void showEvent(QShowEvent *);
virtual void hideEvent(QHideEvent *);
+ virtual void focusInEvent(QFocusEvent * event);
+ virtual void focusOutEvent(QFocusEvent * event);
+
#ifndef QT_NO_WHEELEVENT
virtual void wheelEvent(QWheelEvent *);
#endif