Deliver wheel events when window is null
authorGirish Ramakrishnan <girish.1.ramakrishnan@nokia.com>
Tue, 12 Jun 2012 17:59:27 +0000 (10:59 -0700)
committerQt by Nokia <qt-info@nokia.com>
Thu, 14 Jun 2012 01:03:38 +0000 (03:03 +0200)
The generic input plugins do not set the window parameter. So,
use the same technique we use with mouse event handling to determine
the window to deliver the event to.

Done-with: Johannes Zellner

Change-Id: I950c0ad2f330dccfdcc41b8d01f62cd39902bc9c
Reviewed-by: Laszlo Agocs <laszlo.p.agocs@nokia.com>
src/gui/kernel/qguiapplication.cpp

index 846b7d0..3cd8d5f 100644 (file)
@@ -1255,26 +1255,26 @@ void QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::Mo
 
 void QGuiApplicationPrivate::processWheelEvent(QWindowSystemInterfacePrivate::WheelEvent *e)
 {
-    if (!e->window)
-        return;
-
+    QWindow *window = e->window.data();
     QPointF globalPoint = e->globalPos;
+
+    if (!window) {
+        window = QGuiApplication::topLevelAt(globalPoint.toPoint());
+        if (!window)
+            return;
+    }
+
     QGuiApplicationPrivate::lastCursorPosition = globalPoint;
     modifier_buttons = e->modifiers;
 
-    QWindow *window = e->window.data();
-
-    if (window) {
-        if (window->d_func()->blockedByModalWindow) {
-            // a modal window is blocking this window, don't allow wheel events through
-            return;
-        }
+    if (window->d_func()->blockedByModalWindow) {
+        // a modal window is blocking this window, don't allow wheel events through
+        return;
+    }
 
-         QWheelEvent ev(e->localPos, e->globalPos, e->pixelDelta, e->angleDelta, e->qt4Delta, e->qt4Orientation, buttons, e->modifiers);
-         ev.setTimestamp(e->timestamp);
-         QGuiApplication::sendSpontaneousEvent(window, &ev);
-         return;
-     }
+     QWheelEvent ev(e->localPos, e->globalPos, e->pixelDelta, e->angleDelta, e->qt4Delta, e->qt4Orientation, buttons, e->modifiers);
+     ev.setTimestamp(e->timestamp);
+     QGuiApplication::sendSpontaneousEvent(window, &ev);
 }
 
 // Remember, Qt convention is:  keyboard state is state *before*