summaryrefslogtreecommitdiffstats
path: root/src/widgets/kernel/qapplication.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets/kernel/qapplication.cpp')
-rw-r--r--src/widgets/kernel/qapplication.cpp7
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;