summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Varga <pvarga@inf.u-szeged.hu>2023-02-21 18:06:39 +0100
committerPeter Varga <pvarga@inf.u-szeged.hu>2023-02-22 11:50:20 +0100
commit442e347f592d389ff664f3b1cae466c3e2506d78 (patch)
treef76adc08f02c7868b6a7d4753380bec3f0bd1e44 /src
parentcc30b803650102b19f0748b07d82f2929b53ebf2 (diff)
downloadqtwebengine-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.cpp14
-rw-r--r--src/core/render_widget_host_view_qt_delegate_item.cpp2
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);
}
}