diff options
author | Peter Varga <pvarga@inf.u-szeged.hu> | 2023-02-21 18:06:39 +0100 |
---|---|---|
committer | Peter Varga <pvarga@inf.u-szeged.hu> | 2023-02-22 11:50:20 +0100 |
commit | 442e347f592d389ff664f3b1cae466c3e2506d78 (patch) | |
tree | f76adc08f02c7868b6a7d4753380bec3f0bd1e44 /src | |
parent | cc30b803650102b19f0748b07d82f2929b53ebf2 (diff) | |
download | qtwebengine-442e347f592d389ff664f3b1cae466c3e2506d78.tar.gz |
Fix uniqueId() for accessible events
QAccessibleEvent::uniqueId() expects child index to be set if the event
object is set. If the index is not explicitly set the event interprets the
unique ID as a child index what is invalid.
This change fixes warnings like:
qt.accessibility.core: Invalid child in QAccessibleEvent:
QObject(0x1cc9ec25d60, name = "search") child: -2147483017
In case of an invalid child, uniqueId() returns 0 and this causes assert
on macOS.
Task-number: QTBUG-105988
Pick-to: 6.4 6.5
Change-Id: If068ab648226284bb3bd6502fc0381f4229d19e2
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/core/browser_accessibility_manager_qt.cpp | 14 | ||||
-rw-r--r-- | src/core/render_widget_host_view_qt_delegate_item.cpp | 2 |
2 files changed, 16 insertions, 0 deletions
diff --git a/src/core/browser_accessibility_manager_qt.cpp b/src/core/browser_accessibility_manager_qt.cpp index f89110036..8aa245e68 100644 --- a/src/core/browser_accessibility_manager_qt.cpp +++ b/src/core/browser_accessibility_manager_qt.cpp @@ -103,6 +103,8 @@ void BrowserAccessibilityManagerQt::FireBlinkEvent(ax::mojom::Event event_type, switch (event_type) { case ax::mojom::Event::kFocus: { QAccessibleEvent event(iface, QAccessible::Focus); + if (event.object()) + event.setChild(-1); QAccessible::updateAccessibility(&event); break; } @@ -110,6 +112,8 @@ void BrowserAccessibilityManagerQt::FireBlinkEvent(ax::mojom::Event event_type, QAccessible::State change; change.checked = true; QAccessibleStateChangeEvent event(iface, change); + if (event.object()) + event.setChild(-1); QAccessible::updateAccessibility(&event); break; } @@ -118,6 +122,8 @@ void BrowserAccessibilityManagerQt::FireBlinkEvent(ax::mojom::Event event_type, if (QAccessibleValueInterface *valueIface = iface->valueInterface()) value = valueIface->currentValue(); QAccessibleValueChangeEvent event(iface, value); + if (event.object()) + event.setChild(-1); QAccessible::updateAccessibility(&event); break; } @@ -129,6 +135,8 @@ void BrowserAccessibilityManagerQt::FireBlinkEvent(ax::mojom::Event event_type, break; case ax::mojom::Event::kTextChanged: { QAccessibleTextUpdateEvent event(iface, -1, QString(), QString()); + if (event.object()) + event.setChild(-1); QAccessible::updateAccessibility(&event); break; } @@ -140,9 +148,13 @@ void BrowserAccessibilityManagerQt::FireBlinkEvent(ax::mojom::Event event_type, textIface->selection(0, &start, &end); if (start == end) { QAccessibleTextCursorEvent event(iface, start); + if (event.object()) + event.setChild(-1); QAccessible::updateAccessibility(&event); } else { QAccessibleTextSelectionEvent event(iface, start, end); + if (event.object()) + event.setChild(-1); QAccessible::updateAccessibility(&event); } } @@ -166,6 +178,8 @@ void BrowserAccessibilityManagerQt::FireGeneratedEvent(ui::AXEventGenerator::Eve case ui::AXEventGenerator::Event::VALUE_IN_TEXT_FIELD_CHANGED: if (iface->role() == QAccessible::EditableText) { QAccessibleTextUpdateEvent event(iface, -1, QString(), QString()); + if (event.object()) + event.setChild(-1); QAccessible::updateAccessibility(&event); } break; diff --git a/src/core/render_widget_host_view_qt_delegate_item.cpp b/src/core/render_widget_host_view_qt_delegate_item.cpp index dcf7e104c..91f765c2d 100644 --- a/src/core/render_widget_host_view_qt_delegate_item.cpp +++ b/src/core/render_widget_host_view_qt_delegate_item.cpp @@ -204,6 +204,8 @@ void RenderWidgetHostViewQtDelegateItem::focusInEvent(QFocusEvent *event) if (QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(this)) { if (auto *focusChild = iface->focusChild()) { QAccessibleEvent focusEvent(focusChild, QAccessible::Focus); + if (focusEvent.object()) + focusEvent.setChild(-1); QAccessible::updateAccessibility(&focusEvent); } } |