diff options
Diffstat (limited to 'src/widgets/kernel/qapplication.cpp')
-rw-r--r-- | src/widgets/kernel/qapplication.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp index 269fe452c1..b7d0869289 100644 --- a/src/widgets/kernel/qapplication.cpp +++ b/src/widgets/kernel/qapplication.cpp @@ -4172,11 +4172,13 @@ void QApplicationPrivate::giveFocusAccordingToFocusPolicy(QWidget *widget, QEven { const bool setFocusOnRelease = QGuiApplication::styleHints()->setFocusOnTouchRelease(); Qt::FocusPolicy focusPolicy = Qt::ClickFocus; + static QPointer<QWidget> focusedWidgetOnTouchBegin = 0; switch (event->type()) { case QEvent::MouseButtonPress: case QEvent::MouseButtonDblClick: case QEvent::TouchBegin: + focusedWidgetOnTouchBegin = QApplication::focusWidget(); if (setFocusOnRelease) return; break; @@ -4184,6 +4186,11 @@ void QApplicationPrivate::giveFocusAccordingToFocusPolicy(QWidget *widget, QEven case QEvent::TouchEnd: if (!setFocusOnRelease) return; + if (focusedWidgetOnTouchBegin != QApplication::focusWidget()) { + // Focus widget was changed while delivering press/move events. + // To not interfere with application logic, we leave focus as-is + return; + } break; case QEvent::Wheel: focusPolicy = Qt::WheelFocus; |