diff options
Diffstat (limited to 'src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm index 11cc89f04f..1441a02d1e 100644 --- a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm +++ b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm @@ -60,7 +60,7 @@ static QAccessibleInterface *acast(void *ptr) if (self) { index = aIndex; accessibleInterface = anQAccessibleInterface; - role = macRole(acast(accessibleInterface)->role()); + role = QCocoaAccessible::macRole(acast(accessibleInterface)->role()); parent = aParent; } @@ -177,17 +177,40 @@ static QAccessibleInterface *acast(void *ptr) // actions - (NSArray *)accessibilityActionNames { - return [NSArray arrayWithObject:NSAccessibilityPressAction]; + NSMutableArray * nsActions = [NSMutableArray new]; + + QAccessibleActionInterface *actionInterface = acast(accessibleInterface)->actionInterface(); + if (actionInterface) { + QStringList supportedActionNames = actionInterface->actionNames(); + + foreach (const QString &qtAction, supportedActionNames) { + NSString *nsAction = QCocoaAccessible::getTranslatedAction(qtAction); + if (nsAction) + [nsActions addObject : nsAction]; + } + } + + return nsActions; } - (NSString *)accessibilityActionDescription:(NSString *)action { + QAccessibleActionInterface *actionInterface = acast(accessibleInterface)->actionInterface(); + if (actionInterface) { + QString qtAction = QCocoaAccessible::translateAction(action); + QString description = actionInterface->localizedActionDescription(qtAction); + if (!description.isEmpty()) + return qt_mac_QStringToNSString(description); + } + return NSAccessibilityActionDescription(action); } - (void)accessibilityPerformAction:(NSString *)action { - Q_UNUSED(action); - if (acast(accessibleInterface)->actionInterface()) - acast(accessibleInterface)->actionInterface()->doAction(0); + QAccessibleActionInterface *actionInterface = acast(accessibleInterface)->actionInterface(); + if (actionInterface) { + QString qtAction = QCocoaAccessible::translateAction(action); + actionInterface->doAction(QAccessibleActionInterface::pressAction()); + } } // misc |