Wheel event forwarding.
authorSamuel Rødal <samuel.rodal@nokia.com>
Tue, 3 May 2011 14:41:18 +0000 (16:41 +0200)
committerSamuel Rødal <samuel.rodal@nokia.com>
Tue, 3 May 2011 14:41:26 +0000 (16:41 +0200)
src/gui/kernel/qwidgetwindow_qpa.cpp
src/gui/kernel/qwidgetwindow_qpa_p.h

index b5bc50c..fc49b30 100644 (file)
@@ -77,6 +77,10 @@ bool QWidgetWindow::event(QEvent *event)
         handleResizeEvent(static_cast<QResizeEvent *>(event));
         return true;
 
+    case QEvent::Wheel:
+        handleWheelEvent(static_cast<QWheelEvent *>(event));
+        return true;
+
     default:
         break;
     }
@@ -127,4 +131,18 @@ void QWidgetWindow::handleCloseEvent(QCloseEvent *)
     m_widget->d_func()->close_helper(QWidgetPrivate::CloseWithSpontaneousEvent);
 }
 
+void QWidgetWindow::handleWheelEvent(QWheelEvent *event)
+{
+    // which child should have it?
+    QWidget *widget = m_widget->childAt(event->pos());
+
+    if (!widget)
+        widget = m_widget;
+
+    QPoint mapped = widget->mapFrom(m_widget, event->pos());
+
+    QWheelEvent translated(mapped, event->globalPos(), event->delta(), event->buttons(), event->modifiers(), event->orientation());
+    QGuiApplication::sendSpontaneousEvent(widget, &translated);
+}
+
 QT_END_NAMESPACE
index 37c9f38..0780af1 100644 (file)
@@ -68,6 +68,7 @@ protected:
     void handleMouseEvent(QMouseEvent *);
     void handleMoveEvent(QMoveEvent *);
     void handleResizeEvent(QResizeEvent *);
+    void handleWheelEvent(QWheelEvent *);
 
 private:
     QWidget *m_widget;