diff options
Diffstat (limited to 'src/widgets/kernel/qwidgetwindow.cpp')
-rw-r--r-- | src/widgets/kernel/qwidgetwindow.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/widgets/kernel/qwidgetwindow.cpp b/src/widgets/kernel/qwidgetwindow.cpp index bedcfe78bf..c19b617091 100644 --- a/src/widgets/kernel/qwidgetwindow.cpp +++ b/src/widgets/kernel/qwidgetwindow.cpp @@ -476,6 +476,10 @@ void QWidgetWindow::handleTouchEvent(QTouchEvent *event) if (event->type() == QEvent::TouchCancel) { QApplicationPrivate::translateTouchCancel(event->device(), event->timestamp()); event->accept(); + } else if (qApp->d_func()->inPopupMode()) { + // Ignore touch events for popups. This will cause QGuiApplication to synthesise mouse + // events instead, which QWidgetWindow::handleMouseEvent will forward correctly: + event->ignore(); } else { event->setAccepted(QApplicationPrivate::translateRawTouchEvent(m_widget, event->device(), event->touchPoints(), event->timestamp())); } @@ -486,15 +490,13 @@ void QWidgetWindow::handleKeyEvent(QKeyEvent *event) if (QApplicationPrivate::instance()->modalState() && !qt_try_modal(m_widget, event->type())) return; - QObject *receiver = 0; - if (QApplicationPrivate::inPopupMode()) { + QObject *receiver = QWidget::keyboardGrabber(); + if (!receiver && QApplicationPrivate::inPopupMode()) { QWidget *popup = QApplication::activePopupWidget(); QWidget *popupFocusWidget = popup->focusWidget(); receiver = popupFocusWidget ? popupFocusWidget : popup; } if (!receiver) - receiver = QWidget::keyboardGrabber(); - if (!receiver) receiver = focusObject(); QGuiApplication::sendSpontaneousEvent(receiver, event); } |