diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp index 89c186a2026..bfebe1d3944 100644 --- a/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp +++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp @@ -357,6 +357,24 @@ HRESULT QWindowsUiaMainProvider::GetPatternProvider(PATTERNID idPattern, IUnknow return S_OK; } +void QWindowsUiaMainProvider::setLabelledBy(QAccessibleInterface *accessible, VARIANT *pRetVal) +{ + Q_ASSERT(accessible); + + typedef std::pair RelationPair; + const QList relationInterfaces = accessible->relations(QAccessible::Label); + if (relationInterfaces.empty()) + return; + + // UIA_LabeledByPropertyId only supports one relation + ComPtr provider = providerForAccessible(relationInterfaces.first().first); + if (!provider) + return; + + pRetVal->vt = VT_UNKNOWN; + pRetVal->punkVal = provider.Detach(); +} + void QWindowsUiaMainProvider::fillVariantArrayForRelation(QAccessibleInterface* accessible, QAccessible::Relation relation, VARIANT *pRetVal) { @@ -512,6 +530,9 @@ HRESULT QWindowsUiaMainProvider::GetPropertyValue(PROPERTYID idProp, VARIANT *pR case UIA_FlowsToPropertyId: fillVariantArrayForRelation(accessible, QAccessible::FlowsFrom, pRetVal); break; + case UIA_LabeledByPropertyId: + setLabelledBy(accessible, pRetVal); + break; case UIA_FrameworkIdPropertyId: *pRetVal = QComVariant{ QStringLiteral("Qt") }.release(); break; diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.h b/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.h index 03954d28050..eae8e26901c 100644 --- a/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.h +++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.h @@ -59,6 +59,7 @@ public: HRESULT STDMETHODCALLTYPE GetFocus(IRawElementProviderFragment **pRetVal) override; private: + static void setLabelledBy(QAccessibleInterface *accessible, VARIANT *pRetVal); static void fillVariantArrayForRelation(QAccessibleInterface *accessible, QAccessible::Relation relation, VARIANT *pRetVal); static void setAriaProperties(QAccessibleInterface *accessible, VARIANT *pRetVal); static void setStyle(QAccessibleInterface *accessible, VARIANT *pRetVal);