diff options
author | Błażej Szczygieł <spaz16@wp.pl> | 2016-02-09 15:51:05 +0100 |
---|---|---|
committer | Błażej Szczygieł <spaz16@wp.pl> | 2016-02-24 09:03:53 +0000 |
commit | 544bbcbcdabdd012cbcce484196053a0b9f37104 (patch) | |
tree | 2dd32e5b65f66a1d934b346e681ac0e278a7898d /src/widgets/kernel/qwidgetwindow.cpp | |
parent | 7091be1b7999d93fe2126042161dcd1d8fd20026 (diff) |
QtWidgets: Always deliver the wheel event to submenus
When mouse events are delivered using XInput2 then the wheel event is
missing on submenus, because XInput2 delivers the wheel event only to
the root menu.
Task-number: QTBUG-50996
Change-Id: I757c0b5e3aea4606d2e45dfc8180c263e02167ca
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
Diffstat (limited to 'src/widgets/kernel/qwidgetwindow.cpp')
-rw-r--r-- | src/widgets/kernel/qwidgetwindow.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/widgets/kernel/qwidgetwindow.cpp b/src/widgets/kernel/qwidgetwindow.cpp index b2a2ecc3b9..15c28d0913 100644 --- a/src/widgets/kernel/qwidgetwindow.cpp +++ b/src/widgets/kernel/qwidgetwindow.cpp @@ -747,13 +747,24 @@ void QWidgetWindow::handleWheelEvent(QWheelEvent *event) if (QApplicationPrivate::instance()->modalState() && !qt_try_modal(m_widget, event->type())) return; + QWidget *rootWidget = m_widget; + QPoint pos = event->pos(); + + // Use proper popup window for wheel event. Some QPA sends the wheel + // event to the root menu, so redirect it to the proper popup window. + QWidget *activePopupWidget = QApplication::activePopupWidget(); + if (activePopupWidget && activePopupWidget != m_widget) { + rootWidget = activePopupWidget; + pos = rootWidget->mapFromGlobal(event->globalPos()); + } + // which child should have it? - QWidget *widget = m_widget->childAt(event->pos()); + QWidget *widget = rootWidget->childAt(pos); if (!widget) - widget = m_widget; + widget = rootWidget; - QPoint mapped = widget->mapFrom(m_widget, event->pos()); + QPoint mapped = widget->mapFrom(rootWidget, pos); QWheelEvent translated(mapped, event->globalPos(), event->pixelDelta(), event->angleDelta(), event->delta(), event->orientation(), event->buttons(), event->modifiers(), event->phase(), event->source()); QGuiApplication::sendSpontaneousEvent(widget, &translated); |