diff options
author | Peter Varga <pvarga@inf.u-szeged.hu> | 2023-02-21 18:06:39 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-02-22 16:53:29 +0000 |
commit | 7b669203bedf4e0801761389d3dc6ce5f6b1d0e2 (patch) | |
tree | 4ed5db695505b05dd60d5eefb47ad7b7bbf88928 | |
parent | bea7576b3681c85056d266306c2bf91cf6df534b (diff) |
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
Change-Id: If068ab648226284bb3bd6502fc0381f4229d19e2
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
(cherry picked from commit 442e347f592d389ff664f3b1cae466c3e2506d78)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-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 7c16d54a0..b5f978b89 100644 --- a/src/core/browser_accessibility_manager_qt.cpp +++ b/src/core/browser_accessibility_manager_qt.cpp @@ -97,6 +97,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; } @@ -104,6 +106,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; } @@ -112,6 +116,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; } @@ -123,6 +129,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; } @@ -134,9 +142,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); } } @@ -156,6 +168,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 a44046aac..63eea37e2 100644 --- a/src/core/render_widget_host_view_qt_delegate_item.cpp +++ b/src/core/render_widget_host_view_qt_delegate_item.cpp @@ -199,6 +199,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); } } |