summaryrefslogtreecommitdiffstats
path: root/src/platformsupport/input
diff options
context:
space:
mode:
Diffstat (limited to 'src/platformsupport/input')
-rw-r--r--src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp35
-rw-r--r--src/platformsupport/input/evdevmouse/qevdevmousemanager_p.h3
-rw-r--r--src/platformsupport/input/libinput/qlibinputhandler.cpp8
-rw-r--r--src/platformsupport/input/libinput/qlibinputhandler_p.h1
-rw-r--r--src/platformsupport/input/libinput/qlibinputpointer.cpp7
-rw-r--r--src/platformsupport/input/libinput/qlibinputpointer_p.h2
6 files changed, 46 insertions, 10 deletions
diff --git a/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp b/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp
index 6eb1fccba0..805397f021 100644
--- a/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp
+++ b/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp
@@ -92,6 +92,9 @@ QEvdevMouseManager::QEvdevMouseManager(const QString &key, const QString &specif
connect(m_deviceDiscovery, SIGNAL(deviceRemoved(QString)), this, SLOT(removeMouse(QString)));
}
}
+
+ connect(QGuiApplicationPrivate::inputDeviceManager(), SIGNAL(cursorPositionChangeRequested(QPoint)),
+ this, SLOT(handleCursorPositionChange(QPoint)));
}
QEvdevMouseManager::~QEvdevMouseManager()
@@ -100,17 +103,8 @@ QEvdevMouseManager::~QEvdevMouseManager()
m_mice.clear();
}
-void QEvdevMouseManager::handleMouseEvent(int x, int y, bool abs, Qt::MouseButtons buttons)
+void QEvdevMouseManager::clampPosition()
{
- // update current absolute coordinates
- if (!abs) {
- m_x += x;
- m_y += y;
- } else {
- m_x = x;
- m_y = y;
- }
-
// clamp to screen geometry
QRect g = QGuiApplication::primaryScreen()->virtualGeometry();
if (m_x + m_xoffset < g.left())
@@ -122,6 +116,20 @@ void QEvdevMouseManager::handleMouseEvent(int x, int y, bool abs, Qt::MouseButto
m_y = g.top() - m_yoffset;
else if (m_y + m_yoffset > g.bottom())
m_y = g.bottom() - m_yoffset;
+}
+
+void QEvdevMouseManager::handleMouseEvent(int x, int y, bool abs, Qt::MouseButtons buttons)
+{
+ // update current absolute coordinates
+ if (!abs) {
+ m_x += x;
+ m_y += y;
+ } else {
+ m_x = x;
+ m_y = y;
+ }
+
+ clampPosition();
QPoint pos(m_x + m_xoffset, m_y + m_yoffset);
// Cannot track the keyboard modifiers ourselves here. Instead, report the
@@ -163,4 +171,11 @@ void QEvdevMouseManager::removeMouse(const QString &deviceNode)
}
}
+void QEvdevMouseManager::handleCursorPositionChange(const QPoint &pos)
+{
+ m_x = pos.x();
+ m_y = pos.y();
+ clampPosition();
+}
+
QT_END_NAMESPACE
diff --git a/src/platformsupport/input/evdevmouse/qevdevmousemanager_p.h b/src/platformsupport/input/evdevmouse/qevdevmousemanager_p.h
index 944effd80b..e1b24b807d 100644
--- a/src/platformsupport/input/evdevmouse/qevdevmousemanager_p.h
+++ b/src/platformsupport/input/evdevmouse/qevdevmousemanager_p.h
@@ -69,8 +69,11 @@ public slots:
private slots:
void addMouse(const QString &deviceNode = QString());
void removeMouse(const QString &deviceNode);
+ void handleCursorPositionChange(const QPoint &pos);
private:
+ void clampPosition();
+
QString m_spec;
QHash<QString,QEvdevMouseHandler*> m_mice;
QDeviceDiscovery *m_deviceDiscovery;
diff --git a/src/platformsupport/input/libinput/qlibinputhandler.cpp b/src/platformsupport/input/libinput/qlibinputhandler.cpp
index 22b08960df..1a64ad5a30 100644
--- a/src/platformsupport/input/libinput/qlibinputhandler.cpp
+++ b/src/platformsupport/input/libinput/qlibinputhandler.cpp
@@ -107,6 +107,9 @@ QLibInputHandler::QLibInputHandler(const QString &key, const QString &spec)
m_keyboard.reset(new QLibInputKeyboard);
m_touch.reset(new QLibInputTouch);
+ connect(QGuiApplicationPrivate::inputDeviceManager(), SIGNAL(cursorPositionChangeRequested(QPoint)),
+ this, SLOT(onCursorPositionChangeRequested(QPoint)));
+
// Process the initial burst of DEVICE_ADDED events.
onReadyRead();
}
@@ -227,4 +230,9 @@ void QLibInputHandler::processEvent(libinput_event *ev)
}
}
+void QLibInputHandler::onCursorPositionChangeRequested(const QPoint &pos)
+{
+ m_pointer->setPos(pos);
+}
+
QT_END_NAMESPACE
diff --git a/src/platformsupport/input/libinput/qlibinputhandler_p.h b/src/platformsupport/input/libinput/qlibinputhandler_p.h
index 5d54f984de..de04d71f93 100644
--- a/src/platformsupport/input/libinput/qlibinputhandler_p.h
+++ b/src/platformsupport/input/libinput/qlibinputhandler_p.h
@@ -74,6 +74,7 @@ signals:
private slots:
void onReadyRead();
+ void onCursorPositionChangeRequested(const QPoint &pos);
private:
void processEvent(libinput_event *ev);
diff --git a/src/platformsupport/input/libinput/qlibinputpointer.cpp b/src/platformsupport/input/libinput/qlibinputpointer.cpp
index 794ac54e8e..48e5a6cf1c 100644
--- a/src/platformsupport/input/libinput/qlibinputpointer.cpp
+++ b/src/platformsupport/input/libinput/qlibinputpointer.cpp
@@ -108,4 +108,11 @@ void QLibInputPointer::processAxis(libinput_event_pointer *e)
#endif
}
+void QLibInputPointer::setPos(const QPoint &pos)
+{
+ const QRect g = QGuiApplication::primaryScreen()->virtualGeometry();
+ m_pos.setX(qBound(g.left(), pos.x(), g.right()));
+ m_pos.setY(qBound(g.top(), pos.y(), g.bottom()));
+}
+
QT_END_NAMESPACE
diff --git a/src/platformsupport/input/libinput/qlibinputpointer_p.h b/src/platformsupport/input/libinput/qlibinputpointer_p.h
index 3b0c5df1c6..a8ba19c7ec 100644
--- a/src/platformsupport/input/libinput/qlibinputpointer_p.h
+++ b/src/platformsupport/input/libinput/qlibinputpointer_p.h
@@ -60,6 +60,8 @@ public:
void processMotion(libinput_event_pointer *e);
void processAxis(libinput_event_pointer *e);
+ void setPos(const QPoint &pos);
+
private:
QPoint m_pos;
Qt::MouseButtons m_buttons;