summaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
authorVolker Hilsheimer <volker.hilsheimer@qt.io>2023-04-07 20:35:22 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-04-11 23:30:46 +0000
commit4599ead6a918b20a2a34f095251c7d5209f4643e (patch)
tree77fcf6d6f63d128f3e9b9ec8f25bc2b6b7ba7f58 /src/plugins
parent39de9b44f73489af8068c4e7ca330a7734e610be (diff)
downloadqtbase-4599ead6a918b20a2a34f095251c7d5209f4643e.tar.gz
macOS Accessibility: add an elementWithInterface helper
Instead of explicitly creating an ID from an interface and then asking for the element for the ID, ask for the element for the interface directly. In that helper we can also make sure that the created element is correctly configured if the interface for which it was created was for a table cell. Task-number: QTBUG-34337 Change-Id: Id0f9247b0b50195301b293dcabb8925c3fc2d2cf Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io> (cherry picked from commit 03b7e979072761d75d155a7351295f821dc48ae9) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/platforms/cocoa/qcocoaaccessibilityelement.h1
-rw-r--r--src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm28
2 files changed, 17 insertions, 12 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.h b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.h
index 6151b68037..a96ab55735 100644
--- a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.h
+++ b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.h
@@ -15,6 +15,7 @@ QT_DECLARE_NAMESPACED_OBJC_INTERFACE(QMacAccessibilityElement, NSObject <NSAcces
- (instancetype)initWithId:(QAccessible::Id)anId;
- (instancetype)initWithId:(QAccessible::Id)anId role:(NSAccessibilityRole)role;
+ (instancetype)elementWithId:(QAccessible::Id)anId;
++ (instancetype)elementWithInterface:(QAccessibleInterface *)iface;
- (void)updateTableModel;
- (QAccessibleInterface *)qtInterface;
)
diff --git a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm
index 5ff4f767ff..406878d893 100644
--- a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm
+++ b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm
@@ -148,6 +148,16 @@ static void convertLineOffset(QAccessibleTextInterface *text, int *line, int *of
return element;
}
++ (instancetype)elementWithInterface:(QAccessibleInterface *)iface
+{
+ Q_ASSERT(iface);
+ if (!iface)
+ return nil;
+
+ const QAccessible::Id anId = QAccessible::uniqueId(iface);
+ return [self elementWithId:anId];
+}
+
- (void)invalidate {
axid = 0;
rows = nil;
@@ -343,9 +353,8 @@ static void convertLineOffset(QAccessibleTextInterface *text, int *line, int *of
for (int i = 0; i < numColumns; ++i) {
QAccessibleInterface *cell = table->cellAt(m_rowIndex, i);
if (cell && cell->isValid()) {
- QAccessible::Id cellId = QAccessible::uniqueId(cell);
QMacAccessibilityElement *element =
- [QMacAccessibilityElement elementWithId:cellId];
+ [QMacAccessibilityElement elementWithInterface:cell];
if (element) {
element->m_rowIndex = m_rowIndex;
element->m_columnIndex = i;
@@ -405,9 +414,8 @@ static void convertLineOffset(QAccessibleTextInterface *text, int *line, int *of
if (QAccessibleInterface *parent = iface->parent()) {
if (parent->tableInterface()) {
- QAccessible::Id parentId = QAccessible::uniqueId(parent);
QMacAccessibilityElement *tableElement =
- [QMacAccessibilityElement elementWithId:parentId];
+ [QMacAccessibilityElement elementWithInterface:parent];
// parent of cell should be row
int rowIndex = -1;
@@ -419,10 +427,8 @@ static void convertLineOffset(QAccessibleTextInterface *text, int *line, int *of
QMacAccessibilityElement *rowElement = tableElement->rows[rowIndex];
return NSAccessibilityUnignoredAncestor(rowElement);
}
- if (parent->role() != QAccessible::Application) {
- QAccessible::Id parentId = QAccessible::uniqueId(parent);
- return NSAccessibilityUnignoredAncestor([QMacAccessibilityElement elementWithId: parentId]);
- }
+ if (parent->role() != QAccessible::Application)
+ return NSAccessibilityUnignoredAncestor([QMacAccessibilityElement elementWithInterface: parent]);
}
if (QWindow *window = iface->window()) {
@@ -779,9 +785,8 @@ static void convertLineOffset(QAccessibleTextInterface *text, int *line, int *of
childInterface = childOfChildInterface;
} while (childOfChildInterface && childOfChildInterface->isValid());
- QAccessible::Id childId = QAccessible::uniqueId(childInterface);
// hit a child, forward to child accessible interface.
- QMacAccessibilityElement *accessibleElement = [QMacAccessibilityElement elementWithId:childId];
+ QMacAccessibilityElement *accessibleElement = [QMacAccessibilityElement elementWithInterface:childInterface];
if (accessibleElement)
return NSAccessibilityUnignoredAncestor(accessibleElement);
return NSAccessibilityUnignoredAncestor(self);
@@ -796,8 +801,7 @@ static void convertLineOffset(QAccessibleTextInterface *text, int *line, int *of
QAccessibleInterface *childInterface = iface->focusChild();
if (childInterface && childInterface->isValid()) {
- QAccessible::Id childAxid = QAccessible::uniqueId(childInterface);
- QMacAccessibilityElement *accessibleElement = [QMacAccessibilityElement elementWithId:childAxid];
+ QMacAccessibilityElement *accessibleElement = [QMacAccessibilityElement elementWithInterface:childInterface];
return NSAccessibilityUnignoredAncestor(accessibleElement);
}