winaccessibility/source/UAccCOM/MAccessible.cxx | 12 ++++++++++++ 1 file changed, 12 insertions(+)
New commits: commit 21b29f25660db973fa1480de77e6a69d76a5de53 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Wed Aug 28 15:14:54 2024 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Thu Aug 29 09:32:39 2024 +0200 tdf#155447 wina11y: Report accessible ID as "id" obj attribute Report the accessible ID as an "id" object attribute. Firefox also already uses that object attribute. Pending PR suggesting to add the "id" attribute to the official IAccessible2 object attribute specification: [1] Sample use in NVDA's Python console, with the caret/focus in the Spelling dialog's "Not in Dictionary" edit: >>> focus.parent.IAccessibleObject.attributes 'id:sentence;' [1] https://github.com/LinuxA11y/IAccessible2/pull/31 Change-Id: I42250c3f46afbb2ab64c884d8bf5f2bf7d2a5ced Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172538 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/winaccessibility/source/UAccCOM/MAccessible.cxx b/winaccessibility/source/UAccCOM/MAccessible.cxx index 44ba7016c6b2..bd0a2d45ac76 100644 --- a/winaccessibility/source/UAccCOM/MAccessible.cxx +++ b/winaccessibility/source/UAccCOM/MAccessible.cxx @@ -45,6 +45,7 @@ #include <systools/win32/oleauto.hxx> #include <com/sun/star/accessibility/AccessibleRelationType.hpp> +#include <com/sun/star/accessibility/XAccessibleContext2.hpp> #include <com/sun/star/accessibility/XAccessibleText.hpp> #include <com/sun/star/accessibility/XAccessibleEditableText.hpp> #include <com/sun/star/accessibility/XAccessibleImage.hpp> @@ -2668,6 +2669,17 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP CMAccessible::get_attributes(/*[out]*/ BSTR *p xText, IA2AttributeType::ObjectAttributes, 0, nStartOffset, nEndOffset); } + // report accessible ID via "id" object attribute + // (pending PR suggesting to add that attribute to the IAccessible2 spec: + // https://github.com/LinuxA11y/IAccessible2/pull/31 ) + Reference<XAccessibleContext2> xContext2(pRContext, UNO_QUERY); + if (xContext2.is()) + { + const OUString sId = xContext2->getAccessibleId(); + if (!sId.isEmpty()) + sAttributes += "id:" + sId + ";"; + } + if (*pAttr) SysFreeString(*pAttr); *pAttr = sal::systools::BStr::newBSTR(sAttributes);