diff options
Diffstat (limited to 'src/plugins/platforms/vnc/qvncclient.cpp')
-rw-r--r-- | src/plugins/platforms/vnc/qvncclient.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/plugins/platforms/vnc/qvncclient.cpp b/src/plugins/platforms/vnc/qvncclient.cpp index 9dfe873927..3a373a5e4b 100644 --- a/src/plugins/platforms/vnc/qvncclient.cpp +++ b/src/plugins/platforms/vnc/qvncclient.cpp @@ -587,9 +587,18 @@ void QVncClient::frameBufferUpdateRequest() void QVncClient::pointerEvent() { QRfbPointerEvent ev; + static int buttonState = Qt::NoButton; if (ev.read(m_clientSocket)) { - const QPoint pos = m_server->screen()->geometry().topLeft() + QPoint(ev.x, ev.y); - QWindowSystemInterface::handleMouseEvent(0, pos, pos, ev.buttons, QGuiApplication::keyboardModifiers()); + const QPointF pos = m_server->screen()->geometry().topLeft() + QPoint(ev.x, ev.y); + int buttonStateChange = buttonState ^ int(ev.buttons); + QEvent::Type type = QEvent::MouseMove; + if (int(ev.buttons) > buttonState) + type = QEvent::MouseButtonPress; + else if (int(ev.buttons) < buttonState) + type = QEvent::MouseButtonRelease; + QWindowSystemInterface::handleMouseEvent(nullptr, pos, pos, ev.buttons, Qt::MouseButton(buttonStateChange), + type, QGuiApplication::keyboardModifiers()); + buttonState = int(ev.buttons); m_handleMsg = false; } } |