diff options
author | Johannes Zellner <johannes.zellner@nokia.com> | 2012-05-17 15:16:55 -0700 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-05-21 16:02:06 +0200 |
commit | 39c5bad574ab9db7f4127d433d54dcc33f57465b (patch) | |
tree | f6cdb4b5e277ffeda260ab2f593bcacb23c41479 /src/plugins/generic/evdevmouse/qevdevmousehandler.cpp | |
parent | 33fb856a6da3a1897cc7ac6ea8e482006b7196b1 (diff) |
input: Synchronize multiple mice handled through evdevmouse plugin
EvdevMouseManager now receives relative pointer coordinates from each
connected mouse and is then responsible for clamping and forwarding them
to the QWindowSystemInterface. This avoids jumping cursors when multiple
pointer devices are connected. This does not change behavior together
with devices handled through the evdevtouch plugin.
Change-Id: I7feb358f68c3b3ebd138116224b4747c88c6761f
Reviewed-by: Girish Ramakrishnan <girish.1.ramakrishnan@nokia.com>
Diffstat (limited to 'src/plugins/generic/evdevmouse/qevdevmousehandler.cpp')
-rw-r--r-- | src/plugins/generic/evdevmouse/qevdevmousehandler.cpp | 30 |
1 files changed, 4 insertions, 26 deletions
diff --git a/src/plugins/generic/evdevmouse/qevdevmousehandler.cpp b/src/plugins/generic/evdevmouse/qevdevmousehandler.cpp index 73da200d17..55392c20c4 100644 --- a/src/plugins/generic/evdevmouse/qevdevmousehandler.cpp +++ b/src/plugins/generic/evdevmouse/qevdevmousehandler.cpp @@ -73,8 +73,6 @@ QEvdevMouseHandler *QEvdevMouseHandler::createLinuxInputMouseHandler(const QStri QString device = "/dev/input/event0"; bool compression = true; int jitterLimit = 0; - int xoffset = 0; - int yoffset = 0; QStringList args = specification.split(QLatin1Char(':')); foreach (const QString &arg, args) { @@ -82,10 +80,6 @@ QEvdevMouseHandler *QEvdevMouseHandler::createLinuxInputMouseHandler(const QStri compression = false; else if (arg.startsWith("dejitter=")) jitterLimit = arg.mid(9).toInt(); - else if (arg.startsWith("xoffset=")) - xoffset = arg.mid(8).toInt(); - else if (arg.startsWith("yoffset=")) - yoffset = arg.mid(8).toInt(); else if (arg.startsWith(QLatin1String("/dev/"))) device = arg; } @@ -97,17 +91,17 @@ QEvdevMouseHandler *QEvdevMouseHandler::createLinuxInputMouseHandler(const QStri int fd; fd = qt_safe_open(device.toLocal8Bit().constData(), O_RDONLY | O_NDELAY, 0); if (fd >= 0) { - return new QEvdevMouseHandler(fd, compression, jitterLimit, xoffset, yoffset); + return new QEvdevMouseHandler(fd, compression, jitterLimit); } else { qWarning("Cannot open mouse input device '%s': %s", qPrintable(device), strerror(errno)); return 0; } } -QEvdevMouseHandler::QEvdevMouseHandler(int deviceDescriptor, bool compression, int jitterLimit, int xoffset, int yoffset) +QEvdevMouseHandler::QEvdevMouseHandler(int deviceDescriptor, bool compression, int jitterLimit) : m_notify(0), m_x(0), m_y(0), m_prevx(0), m_prevy(0), m_fd(deviceDescriptor), m_compression(compression), - m_xoffset(xoffset), m_yoffset(yoffset), m_buttons(0) + m_buttons(0) { setObjectName(QLatin1String("Evdev Mouse Handler")); @@ -127,24 +121,8 @@ QEvdevMouseHandler::~QEvdevMouseHandler() void QEvdevMouseHandler::sendMouseEvent() { - QRect g = QGuiApplication::primaryScreen()->virtualGeometry(); - if (m_x + m_xoffset < g.left()) - m_x = g.left() - m_xoffset; - else if (m_x + m_xoffset > g.right()) - m_x = g.right() - m_xoffset; + emit handleMouseEvent(m_x - m_prevx, m_y - m_prevy, m_buttons); - if (m_y + m_yoffset < g.top()) - m_y = g.top() - m_yoffset; - else if (m_y + m_yoffset > g.bottom()) - m_y = g.bottom() - m_yoffset; - - QPoint pos(m_x + m_xoffset, m_y + m_yoffset); - -#ifdef QT_QPA_MOUSE_HANDLER_DEBUG - qDebug("mouse event %d %d %d", pos.x(), pos.y(), int(m_buttons)); -#endif - - QWindowSystemInterface::handleMouseEvent(0, pos, pos, m_buttons); m_prevx = m_x; m_prevy = m_y; } |