evdevmouse: send correct event position for wheel events
authorJohannes Zellner <johannes.zellner@nokia.com>
Sun, 10 Jun 2012 01:40:33 +0000 (18:40 -0700)
committerQt by Nokia <qt-info@nokia.com>
Sun, 10 Jun 2012 07:39:36 +0000 (09:39 +0200)
The current position for mouse events is synchronized in the mousemanager,
thus the wheel event needs to pick the event position from there.

Change-Id: I1e73a0154b596885c7092f0a74e6dd448deb428c
Reviewed-by: Laszlo Agocs <laszlo.p.agocs@nokia.com>
src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp
src/platformsupport/input/evdevmouse/qevdevmousehandler_p.h
src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp
src/platformsupport/input/evdevmouse/qevdevmousemanager_p.h

index 554e70b..fde378c 100644 (file)
@@ -172,16 +172,12 @@ void QEvdevMouseHandler::readMouseData()
                 posChanged = true;
             } else if (data->code == ABS_WHEEL) { // vertical scroll
                 // data->value: 1 == up, -1 == down
-                int delta = 120 * data->value;
-                QWindowSystemInterface::handleWheelEvent(0, QPoint(m_x, m_y),
-                                                         QPoint(m_x, m_y),
-                                                         delta, Qt::Vertical);
+                const int delta = 120 * data->value;
+                emit handleWheelEvent(delta, Qt::Vertical);
             } else if (data->code == ABS_THROTTLE) { // horizontal scroll
                 // data->value: 1 == right, -1 == left
-                int delta = 120 * -data->value;
-                QWindowSystemInterface::handleWheelEvent(0, QPoint(m_x, m_y),
-                                                         QPoint(m_x, m_y),
-                                                         delta, Qt::Horizontal);
+                const int delta = 120 * -data->value;
+                emit handleWheelEvent(delta, Qt::Horizontal);
             }
         } else if (data->type == EV_KEY && data->code == BTN_TOUCH) {
             // We care about touchpads only, not touchscreens -> don't map to button press.
index 4b6ec1b..127bded 100644 (file)
@@ -60,6 +60,7 @@ public:
 
 signals:
     void handleMouseEvent(int x, int y, Qt::MouseButtons buttons);
+    void handleWheelEvent(int delta, Qt::Orientation orientation);
 
 private slots:
     void readMouseData();
index f1a86cb..d8e9586 100644 (file)
@@ -132,6 +132,16 @@ void QEvdevMouseManager::handleMouseEvent(int x, int y, Qt::MouseButtons buttons
 #endif
 }
 
+void QEvdevMouseManager::handleWheelEvent(int delta, Qt::Orientation orientation)
+{
+    QPoint pos(m_x + m_xoffset, m_y + m_yoffset);
+    QWindowSystemInterface::handleWheelEvent(0, pos, pos, delta, orientation);
+
+#ifdef QT_QPA_MOUSEMANAGER_DEBUG
+    qDebug("mouse wheel event %dx%d %d %d", pos.x(), pos.y(), delta, int(orientation));
+#endif
+}
+
 void QEvdevMouseManager::addMouse(const QString &deviceNode)
 {
 #ifdef QT_QPA_MOUSEMANAGER_DEBUG
@@ -142,6 +152,7 @@ void QEvdevMouseManager::addMouse(const QString &deviceNode)
     handler = QEvdevMouseHandler::create(deviceNode, m_spec);
     if (handler) {
         connect(handler, SIGNAL(handleMouseEvent(int, int, Qt::MouseButtons)), this, SLOT(handleMouseEvent(int, int, Qt::MouseButtons)));
+        connect(handler, SIGNAL(handleWheelEvent(int, Qt::Orientation)), this, SLOT(handleWheelEvent(int, Qt::Orientation)));
         m_mice.insert(deviceNode, handler);
     } else {
         qWarning("Failed to open mouse");
index 2bc3fa7..1055137 100644 (file)
@@ -63,6 +63,7 @@ public:
 
 public slots:
     void handleMouseEvent(int x, int y, Qt::MouseButtons buttons);
+    void handleWheelEvent(int delta, Qt::Orientation orientation);
 
 private slots:
     void addMouse(const QString &deviceNode = QString());