diff --git a/accessible/windows/ia2/ia2Accessible.cpp b/accessible/windows/ia2/ia2Accessible.cpp index a18012649902..0867e767cbd2 100644 --- a/accessible/windows/ia2/ia2Accessible.cpp +++ b/accessible/windows/ia2/ia2Accessible.cpp @@ -18,6 +18,7 @@ #include "nsIAccessibleTypes.h" #include "mozilla/a11y/PDocAccessible.h" #include "Relation.h" +#include "nsAccessibilityService.h" #include "nsIPersistentProperties2.h" #include "nsISimpleEnumerator.h" @@ -651,7 +652,27 @@ ia2Accessible::get_accessibleWithCaret(IUnknown** aAccessible, *aAccessible = nullptr; *aCaretOffset = -1; - return E_NOTIMPL; + + AccessibleWrap* acc = static_cast(this); + if (acc->IsDefunct()) + return CO_E_OBJNOTCONNECTED; + + int32_t caretOffset = -1; + Accessible* accWithCaret = SelectionMgr()->AccessibleWithCaret(&caretOffset); + if (acc->Document() != accWithCaret->Document()) + return S_FALSE; + + Accessible* child = accWithCaret; + while (child != acc) + child = child->Parent(); + + if (!child) + return S_FALSE; + + *aAccessible = static_cast( + static_cast(accWithCaret)); + *aCaretOffset = caretOffset; + return S_OK; A11Y_TRYBLOCK_END }