From 0d57da067b47eac51ea725d267069d6e616cf586 Mon Sep 17 00:00:00 2001 From: Frederik Gladhorn Date: Mon, 25 Mar 2013 18:07:17 +0100 Subject: Let platform plugin decide if accessibility is active MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I881a8ff3fedf3db73ee37046a4363c70960a92a6 Reviewed-by: Jan Arve Sæther --- src/plugins/platforms/cocoa/qnsview.h | 1 - src/plugins/platforms/cocoa/qnsview.mm | 5 +---- src/plugins/platforms/cocoa/qnsviewaccessibility.mm | 19 ++++++++++++------- .../windows/accessible/qwindowsaccessibility.cpp | 4 ++++ 4 files changed, 17 insertions(+), 12 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/platforms/cocoa/qnsview.h b/src/plugins/platforms/cocoa/qnsview.h index e7ea3d8f8d..68145ec914 100644 --- a/src/plugins/platforms/cocoa/qnsview.h +++ b/src/plugins/platforms/cocoa/qnsview.h @@ -63,7 +63,6 @@ QT_END_NAMESPACE QWindow *m_window; QCocoaWindow *m_platformWindow; Qt::MouseButtons m_buttons; - QAccessibleInterface *m_accessibleRoot; QString m_composingText; bool m_sendKeyEvent; QStringList *currentCustomDragTypes; diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm index 568cc4bebf..52e2d781ee 100644 --- a/src/plugins/platforms/cocoa/qnsview.mm +++ b/src/plugins/platforms/cocoa/qnsview.mm @@ -121,7 +121,6 @@ static QTouchDevice *touchDevice = 0; m_window = window; m_platformWindow = platformWindow; - m_accessibleRoot = 0; m_sendKeyEvent = false; #ifdef QT_COCOA_ENABLE_ACCESSIBILITY_INSPECTOR @@ -130,15 +129,13 @@ static QTouchDevice *touchDevice = 0; static bool skipAccessibilityForInspectorWindows = false; if (!skipAccessibilityForInspectorWindows) { - m_accessibleRoot = window->accessibleRoot(); + // m_accessibleRoot = window->accessibleRoot(); AccessibilityInspector *inspector = new AccessibilityInspector(window); skipAccessibilityForInspectorWindows = true; inspector->inspectWindow(window); skipAccessibilityForInspectorWindows = false; } -#else - m_accessibleRoot = window->accessibleRoot(); #endif [self registerDragTypes]; diff --git a/src/plugins/platforms/cocoa/qnsviewaccessibility.mm b/src/plugins/platforms/cocoa/qnsviewaccessibility.mm index e3b8cf6532..c43c0b5068 100644 --- a/src/plugins/platforms/cocoa/qnsviewaccessibility.mm +++ b/src/plugins/platforms/cocoa/qnsviewaccessibility.mm @@ -45,6 +45,7 @@ #include "qcocoahelpers.h" #include "qcocoaaccessibility.h" #include "qcocoaaccessibilityelement.h" +#include #include #include @@ -60,22 +61,26 @@ } - (id)accessibilityAttributeValue:(NSString *)attribute { + + // activate accessibility updates + QGuiApplicationPrivate::platformIntegration()->accessibility()->setActive(true); + if ([attribute isEqualToString:NSAccessibilityRoleAttribute]) { - if (m_accessibleRoot) - return QCocoaAccessible::macRole(m_accessibleRoot); + if (m_window->accessibleRoot()) + return QCocoaAccessible::macRole(m_window->accessibleRoot()); return NSAccessibilityUnknownRole; } else if ([attribute isEqualToString:NSAccessibilityRoleDescriptionAttribute]) { return NSAccessibilityRoleDescriptionForUIElement(self); } else if ([attribute isEqualToString:NSAccessibilityChildrenAttribute]) { - if (!m_accessibleRoot) + if (!m_window->accessibleRoot()) return [super accessibilityAttributeValue:attribute]; // Create QCocoaAccessibleElements for each child if the // root accessible interface. - int numKids = m_accessibleRoot->childCount(); + int numKids = m_window->accessibleRoot()->childCount(); NSMutableArray *kids = [NSMutableArray arrayWithCapacity:numKids]; for (int i = 0; i < numKids; ++i) { - QAccessibleInterface *child = m_accessibleRoot->child(i); + QAccessibleInterface *child = m_window->accessibleRoot()->child(i); Q_ASSERT(child); QAccessible::Id childAxid = QAccessible::uniqueId(child); QCocoaAccessibleElement *element = [QCocoaAccessibleElement createElementWithId:childAxid parent:self]; @@ -90,10 +95,10 @@ } - (id)accessibilityHitTest:(NSPoint)point { - if (!m_accessibleRoot) + if (!m_window->accessibleRoot()) return [super accessibilityHitTest:point]; - QAccessibleInterface *childInterface = m_accessibleRoot->childAt(point.x, qt_mac_flipYCoordinate(point.y)); + QAccessibleInterface *childInterface = m_window->accessibleRoot()->childAt(point.x, qt_mac_flipYCoordinate(point.y)); // No child found, meaning we hit the NSView if (!childInterface) { return [super accessibilityHitTest:point]; diff --git a/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp b/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp index f222deeeac..63b4370dc2 100644 --- a/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp +++ b/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp @@ -52,7 +52,9 @@ #include #include #include +#include #include +#include #include #include @@ -245,6 +247,8 @@ bool QWindowsAccessibility::handleAccessibleObjectFromWindowRequest(HWND hwnd, W if (static_cast(lParam) == static_cast(UiaRootObjectId)) { /* For UI Automation */ } else if ((DWORD)lParam == DWORD(OBJID_CLIENT)) { + // Start handling accessibility internally + QGuiApplicationPrivate::platformIntegration()->accessibility()->setActive(true); #if 1 // Ignoring all requests while starting up // ### Maybe QPA takes care of this??? -- cgit v1.2.3