diff options
author | Morten Johan Sorvig <morten.sorvig@nokia.com> | 2012-01-10 11:54:54 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-01-11 11:18:51 +0100 |
commit | 630131d58542dc3a69587b4a982b04544d30b92b (patch) | |
tree | c91d82c06ea0e31acff144424ba4e9b4f4ee022d /src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm | |
parent | d060b6f04f956ab3a6358f826dc6928b3353f5f7 (diff) |
Add support for accessibility actions.
Match Cocoa and Qt actions manually. Some have no
corresponding action on the other side.
Change-Id: I775cb8987ab843bd88d57d856ef7c0403290db00
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@nokia.com>
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 |