From bf5dbc61b357e0897cafaca04f78ee4c093d5606 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20S=C3=B8rvig?= Date: Fri, 3 Feb 2023 14:26:07 +0100 Subject: [PATCH] wasm: convert a11y coordinates to window coordinates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The html accessibility elements are positioned relative to the window a11y container. Convert the global (screen) coordinates we get from QAccessibleIntreface::rect() to window coordinates. Pick-to: 6.5 Change-Id: Ifd4eb671def296b1eb418789b7ca85afa365e546 Reviewed-by: MikoĊ‚aj Boc --- src/plugins/platforms/wasm/qwasmaccessibility.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/wasm/qwasmaccessibility.cpp b/src/plugins/platforms/wasm/qwasmaccessibility.cpp index bea7380bfc..523f94578b 100644 --- a/src/plugins/platforms/wasm/qwasmaccessibility.cpp +++ b/src/plugins/platforms/wasm/qwasmaccessibility.cpp @@ -328,7 +328,17 @@ void QWasmAccessibility::setHtmlElementVisibility(QAccessibleInterface *iface, b void QWasmAccessibility::setHtmlElementGeometry(QAccessibleInterface *iface) { emscripten::val element = ensureHtmlElement(iface); - setHtmlElementGeometry(element, iface->rect()); + + // QAccessibleInterface gives us the geometry in global (screen) coordinates. Translate that + // to window geometry in order to position elements relative to window origin. + QWindow *window = getWindow(iface); + if (!window) + qCWarning(lcQpaAccessibility) << "Unable to find window for" << iface << "setting null geometry"; + QRect screenGeometry = iface->rect(); + QPoint windowPos = window ? window->mapFromGlobal(screenGeometry.topLeft()) : QPoint(); + QRect windowGeometry(windowPos, screenGeometry.size()); + + setHtmlElementGeometry(element, windowGeometry); } void QWasmAccessibility::setHtmlElementGeometry(emscripten::val element, QRect geometry)