diff options
author | Morten Sørvig <morten.sorvig@qt.io> | 2023-02-03 14:26:07 +0100 |
---|---|---|
committer | Morten Sørvig <morten.sorvig@qt.io> | 2023-02-03 18:42:21 +0100 |
commit | bf5dbc61b357e0897cafaca04f78ee4c093d5606 (patch) | |
tree | e496ce07aa6df769f0efb6a065024e89d102fae7 | |
parent | 34c36821578f39e9c7f99e1dd0e7887a52418b9d (diff) |
wasm: convert a11y coordinates to window coordinates
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 <Mikolaj.Boc@qt.io>
-rw-r--r-- | src/plugins/platforms/wasm/qwasmaccessibility.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
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) |