summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLorn Potter <lorn.potter@gmail.com>2018-11-26 10:05:15 +1000
committerLorn Potter <lorn.potter@gmail.com>2018-12-16 21:29:15 +0000
commit582237a593421b3e98470a03f29459d02662e9ec (patch)
tree20764d20ad525add64313a75d25246ea77c2e6dc /src
parentae825a48dcb702cef6b9b5dc0cb24c5192fc4b63 (diff)
wasm: send mouse release to proper window
When the mouse is released, it gets the current window to send the event to from the pointer position. If the release happens out of the browser viewport, that window is null and the release event essentially gets ignored. This change keeps the last known QWindow object to send the event to until the release. Also replace hardcoded emscripten events with enum names. Task-number: QTBUG-71948 Change-Id: I354d14479a43489f210cca31d6b9e0f65d083bb0 Fixes: QTBUG-71948 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Mikhail Svetkin <mikhail.svetkin@qt.io> Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/platforms/wasm/qwasmeventtranslator.cpp27
-rw-r--r--src/plugins/platforms/wasm/qwasmeventtranslator.h1
2 files changed, 17 insertions, 11 deletions
diff --git a/src/plugins/platforms/wasm/qwasmeventtranslator.cpp b/src/plugins/platforms/wasm/qwasmeventtranslator.cpp
index a3fdcd1025..8ab109f03c 100644
--- a/src/plugins/platforms/wasm/qwasmeventtranslator.cpp
+++ b/src/plugins/platforms/wasm/qwasmeventtranslator.cpp
@@ -63,6 +63,7 @@ EMSCRIPTEN_BINDINGS(mouse_module) {
QWasmEventTranslator::QWasmEventTranslator(QObject *parent)
: QObject(parent)
, draggedWindow(nullptr)
+ , lastWindow(nullptr)
, pressedButtons(Qt::NoButton)
, resizeMode(QWasmWindow::ResizeNone)
{
@@ -370,15 +371,16 @@ void QWasmEventTranslator::processMouse(int eventType, const EmscriptenMouseEven
Qt::KeyboardModifiers modifiers = translateMouseEventModifier(mouseEvent);
QWindow *window2 = QWasmIntegration::get()->compositor()->windowAt(point, 5);
+ if (window2 != nullptr)
+ lastWindow = window2;
+
QWasmWindow *htmlWindow = static_cast<QWasmWindow*>(window2->handle());
- bool onFrame = false;
- if (window2 && !window2->geometry().contains(point))
- onFrame = true;
- QPoint localPoint(point.x() - window2->geometry().x(), point.y() - window2->geometry().y());
+ bool interior = window2 && window2->geometry().contains(point);
+ QPoint localPoint(point.x() - window2->geometry().x(), point.y() - window2->geometry().y());
switch (eventType) {
- case 5: //down
+ case EMSCRIPTEN_EVENT_MOUSEDOWN:
{
if (window2)
window2->raise();
@@ -403,7 +405,7 @@ void QWasmEventTranslator::processMouse(int eventType, const EmscriptenMouseEven
htmlWindow->injectMousePressed(localPoint, point, button, modifiers);
break;
}
- case 6: //up
+ case EMSCRIPTEN_EVENT_MOUSEUP:
{
pressedButtons.setFlag(translateMouseButton(mouseEvent->button), false);
buttonEventType = QEvent::MouseButtonRelease;
@@ -414,7 +416,6 @@ void QWasmEventTranslator::processMouse(int eventType, const EmscriptenMouseEven
pressedWindow = nullptr;
}
-
if (mouseEvent->button == 0) {
draggedWindow = nullptr;
resizeMode = QWasmWindow::ResizeNone;
@@ -424,7 +425,7 @@ void QWasmEventTranslator::processMouse(int eventType, const EmscriptenMouseEven
oldWindow->injectMouseReleased(localPoint, point, button, modifiers);
break;
}
- case 8://move //drag event
+ case EMSCRIPTEN_EVENT_MOUSEMOVE: // drag event
{
buttonEventType = QEvent::MouseMove;
if (!(htmlWindow->m_windowState & Qt::WindowFullScreen) && !(htmlWindow->m_windowState & Qt::WindowMaximized)) {
@@ -440,11 +441,15 @@ void QWasmEventTranslator::processMouse(int eventType, const EmscriptenMouseEven
}
break;
}
- default:
+ default: // MOUSELEAVE MOUSEENTER
break;
};
-
- if (window2 && !onFrame) {
+ if (!window2 && buttonEventType == QEvent::MouseButtonRelease) {
+ window2 = lastWindow;
+ lastWindow = nullptr;
+ interior = true;
+ }
+ if (window2 && interior) {
QWindowSystemInterface::handleMouseEvent<QWindowSystemInterface::SynchronousDelivery>(
window2, timestamp, localPoint, point, pressedButtons, button, buttonEventType, modifiers);
}
diff --git a/src/plugins/platforms/wasm/qwasmeventtranslator.h b/src/plugins/platforms/wasm/qwasmeventtranslator.h
index 11430a57a2..f3dff8e48c 100644
--- a/src/plugins/platforms/wasm/qwasmeventtranslator.h
+++ b/src/plugins/platforms/wasm/qwasmeventtranslator.h
@@ -197,6 +197,7 @@ private:
private:
QWindow *draggedWindow;
QWindow *pressedWindow;
+ QWindow *lastWindow;
Qt::MouseButtons pressedButtons;
QWasmWindow::ResizeMode resizeMode;