diff options
-rw-r--r-- | src/plugins/platforms/wasm/qwasmevent.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/plugins/platforms/wasm/qwasmevent.cpp b/src/plugins/platforms/wasm/qwasmevent.cpp index d4f9991feb..19730c2c68 100644 --- a/src/plugins/platforms/wasm/qwasmevent.cpp +++ b/src/plugins/platforms/wasm/qwasmevent.cpp @@ -44,6 +44,14 @@ std::optional<PointerEvent> PointerEvent::fromWeb(emscripten::val event) PointerType::Mouse : PointerType::Other; ret.mouseButton = MouseEvent::buttonFromWeb(event["button"].as<int>()); ret.mouseButtons = MouseEvent::buttonsFromWeb(event["buttons"].as<unsigned short>()); + + // The current button state (event.buttons) may be out of sync for some PointerDown + // events where the "down" state is very brief, for example taps on Apple trackpads. + // Qt expects that the current button state is in sync with the event, so we sync + // it up here. + if (*eventType == EventType::PointerDown) + ret.mouseButtons |= ret.mouseButton; + ret.localPoint = QPoint(event["offsetX"].as<int>(), event["offsetY"].as<int>()); ret.pointInPage = QPoint(event["pageX"].as<int>(), event["pageY"].as<int>()); ret.pointInViewport = QPoint(event["clientX"].as<int>(), event["clientY"].as<int>()); |