Windows QPA: Fix UIA-to-MSAA accessibility bridge
According to MS sample code, MSAA requests should be replied with UI Automation providers to enable the use the UIA-to-MSAA bridge, in order to support MSAA-only clients. Also changing the mapping of QAccessible::Client from UIA_CustomControlTypeId to UIA_GroupControlTypeId, as it seems more appropriate and avoids an incorrect mapping to a push button type in the UIA-to-MSAA conversion. Change-Id: I5149d250da2d1bd7b14b44ca46e856a81c9be045 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
This commit is contained in:
parent
a09a28879e
commit
f271dd8f96
@ -68,21 +68,18 @@ QWindowsUiaAccessibility::~QWindowsUiaAccessibility()
|
|||||||
// Handles UI Automation window messages.
|
// Handles UI Automation window messages.
|
||||||
bool QWindowsUiaAccessibility::handleWmGetObject(HWND hwnd, WPARAM wParam, LPARAM lParam, LRESULT *lResult)
|
bool QWindowsUiaAccessibility::handleWmGetObject(HWND hwnd, WPARAM wParam, LPARAM lParam, LRESULT *lResult)
|
||||||
{
|
{
|
||||||
if (lParam == LPARAM(UiaRootObjectId)) {
|
// Start handling accessibility internally
|
||||||
|
QGuiApplicationPrivate::platformIntegration()->accessibility()->setActive(true);
|
||||||
|
|
||||||
// Start handling accessibility internally
|
// Ignoring all requests while starting up / shutting down
|
||||||
QGuiApplicationPrivate::platformIntegration()->accessibility()->setActive(true);
|
if (QCoreApplication::startingUp() || QCoreApplication::closingDown())
|
||||||
|
return false;
|
||||||
|
|
||||||
// Ignoring all requests while starting up / shutting down
|
if (QWindow *window = QWindowsContext::instance()->findWindow(hwnd)) {
|
||||||
if (QCoreApplication::startingUp() || QCoreApplication::closingDown())
|
if (QAccessibleInterface *accessible = window->accessibleRoot()) {
|
||||||
return false;
|
QWindowsUiaMainProvider *provider = QWindowsUiaMainProvider::providerForAccessible(accessible);
|
||||||
|
*lResult = QWindowsUiaWrapper::instance()->returnRawElementProvider(hwnd, wParam, lParam, provider);
|
||||||
if (QWindow *window = QWindowsContext::instance()->findWindow(hwnd)) {
|
return true;
|
||||||
if (QAccessibleInterface *accessible = window->accessibleRoot()) {
|
|
||||||
QWindowsUiaMainProvider *provider = QWindowsUiaMainProvider::providerForAccessible(accessible);
|
|
||||||
*lResult = QWindowsUiaWrapper::instance()->returnRawElementProvider(hwnd, wParam, lParam, provider);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -149,7 +149,7 @@ long roleToControlTypeId(QAccessible::Role role)
|
|||||||
{QAccessible::Caret, UIA_CustomControlTypeId},
|
{QAccessible::Caret, UIA_CustomControlTypeId},
|
||||||
{QAccessible::AlertMessage, UIA_CustomControlTypeId},
|
{QAccessible::AlertMessage, UIA_CustomControlTypeId},
|
||||||
{QAccessible::Window, UIA_WindowControlTypeId},
|
{QAccessible::Window, UIA_WindowControlTypeId},
|
||||||
{QAccessible::Client, UIA_CustomControlTypeId},
|
{QAccessible::Client, UIA_GroupControlTypeId},
|
||||||
{QAccessible::PopupMenu, UIA_MenuControlTypeId},
|
{QAccessible::PopupMenu, UIA_MenuControlTypeId},
|
||||||
{QAccessible::MenuItem, UIA_MenuItemControlTypeId},
|
{QAccessible::MenuItem, UIA_MenuItemControlTypeId},
|
||||||
{QAccessible::ToolTip, UIA_ToolTipControlTypeId},
|
{QAccessible::ToolTip, UIA_ToolTipControlTypeId},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user