Update QPA mouse event handling in offscreen and VNC plugins

This is needed after a37785ec76
deprecated the versions of QWindowSystemInterface::handleMouseEvent()
that were in use here.

Change-Id: Ib704ae2be905436f5a4a80ae6686b5fe3972d34c
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
This commit is contained in:
Shawn Rutledge 2019-06-07 13:03:20 +02:00
parent acd7259a03
commit f00bbd5eb7
2 changed files with 13 additions and 3 deletions

View File

@ -77,7 +77,8 @@ public:
if (containing != previous)
QWindowSystemInterface::handleEnterLeaveEvent(containing, previous, local, pos);
QWindowSystemInterface::handleMouseEvent(containing, local, pos, QGuiApplication::mouseButtons(), QGuiApplication::keyboardModifiers());
QWindowSystemInterface::handleMouseEvent(containing, local, pos, QGuiApplication::mouseButtons(), Qt::NoButton,
QEvent::MouseMove, QGuiApplication::keyboardModifiers(), Qt::MouseEventSynthesizedByQt);
QOffscreenScreen::windowContainingCursor = containing ? containing->handle() : 0;
}

View File

@ -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;
}
}