From 16548ce85ee29ad57f6948b262ce0dbcc99ab46d Mon Sep 17 00:00:00 2001 From: Johannes Zellner Date: Sat, 9 Jun 2012 18:40:33 -0700 Subject: [PATCH] evdevmouse: send correct event position for wheel events 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 --- .../input/evdevmouse/qevdevmousehandler.cpp | 12 ++++-------- .../input/evdevmouse/qevdevmousehandler_p.h | 1 + .../input/evdevmouse/qevdevmousemanager.cpp | 11 +++++++++++ .../input/evdevmouse/qevdevmousemanager_p.h | 1 + 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp b/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp index 554e70bc44..fde378ce02 100644 --- a/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp +++ b/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp @@ -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. diff --git a/src/platformsupport/input/evdevmouse/qevdevmousehandler_p.h b/src/platformsupport/input/evdevmouse/qevdevmousehandler_p.h index 4b6ec1bb94..127bdedc78 100644 --- a/src/platformsupport/input/evdevmouse/qevdevmousehandler_p.h +++ b/src/platformsupport/input/evdevmouse/qevdevmousehandler_p.h @@ -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(); diff --git a/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp b/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp index f1a86cb15a..d8e9586736 100644 --- a/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp +++ b/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp @@ -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"); diff --git a/src/platformsupport/input/evdevmouse/qevdevmousemanager_p.h b/src/platformsupport/input/evdevmouse/qevdevmousemanager_p.h index 2bc3fa798d..1055137c22 100644 --- a/src/platformsupport/input/evdevmouse/qevdevmousemanager_p.h +++ b/src/platformsupport/input/evdevmouse/qevdevmousemanager_p.h @@ -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());