diff options
author | Morten Johan Sorvig <morten.sorvig@nokia.com> | 2012-01-09 14:37:33 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-01-12 10:19:49 +0100 |
commit | ff5ae4a5785a12089910feda533e8230498ccfb7 (patch) | |
tree | d19916715f76bb8bcb9788dfc118d5503ea8a714 /src/plugins/platforms/cocoa/qcocoaaccessibility.mm | |
parent | 893eb97b2ad29c846026cbeb1da86edbb0be9cb5 (diff) |
Ignore uninteresting accessibile interfaces.
Certain interface roles should be ignored and not
be a part of the user-visible accessibility interface
tree.
Change-Id: I264fef909052c528ee505875e3a211a33114d881
Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
Diffstat (limited to 'src/plugins/platforms/cocoa/qcocoaaccessibility.mm')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoaaccessibility.mm | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoaaccessibility.mm b/src/plugins/platforms/cocoa/qcocoaaccessibility.mm index 26ff9531a5..436d27eddf 100644 --- a/src/plugins/platforms/cocoa/qcocoaaccessibility.mm +++ b/src/plugins/platforms/cocoa/qcocoaaccessibility.mm @@ -114,6 +114,55 @@ NSString *macRole(QAccessible::Role qtRole) } /* + Mac accessibility supports ignoring elements, which means that + the elements are still present in the accessibility tree but is + not used by the screen reader. +*/ +bool shouldBeIgnrored(QAccessibleInterface *interface) +{ + // Mac accessibility does not have an attribute that corresponds to the Invisible/Offscreen + // state. Ignore interfaces with those flags set. + const QAccessible::State state = interface->state(); + if (state.invisible || + state.offscreen) + return true; + + // Some roles are not interesting. In particular, container roles should be + // ignored in order to flatten the accessibility tree as seen by the user. + const QAccessible::Role role = interface->role(); + if (role == QAccessible::Border || // QFrame + role == QAccessible::Application || // We use the system-provided application element. + role == QAccessible::MenuItem || // The system also provides the menu items. + role == QAccessible::ToolBar) // Access the tool buttons directly. + return true; + + NSString *mac_role = macRole(interface->role()); + if (mac_role == NSAccessibilityWindowRole || // We use the system-provided window elements. + mac_role == NSAccessibilityGroupRole || + mac_role == NSAccessibilityUnknownRole) + return true; + + // Client is a generic role returned by plain QWidgets or other + // widgets that does not have separate QAccessible interface, such + // as the TabWidget. Return false unless macRole gives the interface + // a special role. + if (role == QAccessible::Client && mac_role == NSAccessibilityUnknownRole) + return true; + + if (QObject * const object = interface->object()) { + const QString className = QLatin1String(object->metaObject()->className()); + + // VoiceOver focusing on tool tips can be confusing. The contents of the + // tool tip is available through the description attribute anyway, so + // we disable accessibility for tool tips. + if (className == QLatin1String("QTipLabel")) + return true; + } + + return false; +} + +/* Translates a predefined QAccessibleActionInterface action to a Mac action constant. Returns 0 if the Qt Action has no mac equivalent. Ownership of the NSString is not transferred. |