diff options
Diffstat (limited to 'src/plugins/platforms/winrt')
3 files changed, 20 insertions, 2 deletions
diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiaaccessibility.cpp b/src/plugins/platforms/winrt/uiautomation/qwinrtuiaaccessibility.cpp index 878fcd0f96..40274fb967 100644 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiaaccessibility.cpp +++ b/src/plugins/platforms/winrt/uiautomation/qwinrtuiaaccessibility.cpp @@ -81,6 +81,13 @@ void QWinRTUiaAccessibility::notifyAccessibilityUpdate(QAccessibleEvent *event) case QAccessible::Focus: QWinRTUiaMainProvider::notifyFocusChange(event); break; + case QAccessible::ObjectCreated: + case QAccessible::ObjectDestroyed: + case QAccessible::ObjectShow: + case QAccessible::ObjectHide: + case QAccessible::ObjectReorder: + QWinRTUiaMainProvider::notifyVisibilityChange(event); + break; case QAccessible::StateChanged: QWinRTUiaMainProvider::notifyStateChange(static_cast<QAccessibleStateChangeEvent *>(event)); break; diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiamainprovider.cpp b/src/plugins/platforms/winrt/uiautomation/qwinrtuiamainprovider.cpp index 99efe27c34..6f3ad6dcd2 100644 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiamainprovider.cpp +++ b/src/plugins/platforms/winrt/uiautomation/qwinrtuiamainprovider.cpp @@ -230,6 +230,14 @@ void QWinRTUiaMainProvider::notifyFocusChange(QAccessibleEvent *event) } } +void QWinRTUiaMainProvider::notifyVisibilityChange(QAccessibleEvent *event) +{ + if (QAccessibleInterface *accessible = event->accessibleInterface()) { + QAccessible::Id accid = idForAccessible(accessible); + QWinRTUiaMetadataCache::instance()->load(accid); + } +} + void QWinRTUiaMainProvider::notifyStateChange(QAccessibleStateChangeEvent *event) { if (QAccessibleInterface *accessible = event->accessibleInterface()) { @@ -517,7 +525,8 @@ HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::GetChildrenCore(IVector<Automat if (QAccessibleInterface *childAcc = accessible->child(i)) { QAccessible::Id childId = idForAccessible(childAcc); QWinRTUiaMetadataCache::instance()->load(childId); - (*ptrChildren)->append(childId); + if (!childAcc->state().invisible) + (*ptrChildren)->append(childId); } } } @@ -683,7 +692,8 @@ HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::IsOffscreenCore(boolean *return if (!returnValue) return E_INVALIDARG; - *returnValue = false; + QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); + *returnValue = (metadata->state().offscreen != 0); return S_OK; } diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiamainprovider.h b/src/plugins/platforms/winrt/uiautomation/qwinrtuiamainprovider.h index 3ae9d2759e..384a166cf7 100644 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiamainprovider.h +++ b/src/plugins/platforms/winrt/uiautomation/qwinrtuiamainprovider.h @@ -71,6 +71,7 @@ public: static HRESULT rawProviderForAccessibleId(QAccessible::Id elementId, ABI::Windows::UI::Xaml::Automation::Provider::IIRawElementProviderSimple **returnValue); static HRESULT rawProviderArrayForAccessibleIdList(const QList<QAccessible::Id> &elementIds, UINT32 *returnValueSize, ABI::Windows::UI::Xaml::Automation::Provider::IIRawElementProviderSimple ***returnValue); static void notifyFocusChange(QAccessibleEvent *event); + static void notifyVisibilityChange(QAccessibleEvent *event); static void notifyStateChange(QAccessibleStateChangeEvent *event); static void notifyValueChange(QAccessibleValueChangeEvent *event); static void notifyTextChange(QAccessibleEvent *event); |