Created attachment 200984 [details] accessibility text cursor indicators basically the title. the text cursor itself (the vertcial bar) is showing, just the "balloons" on the top and the bottom are missing. i've added a screenshot to make clear which type of cursor i'm talking about. it affects at least writer, calc and impress. it doesn't make any difference if skia rendering is enabled or disabled. Version: 25.2.3.2 (X86_64) / LibreOffice Community Build ID: bbb074479178df812d175f709636b368952c2ce3 CPU threads: 12; OS: Windows 11 X86_64 (10.0 build 26100); UI render: Skia/Vulkan; VCL: win Locale: de-DE (de_DE); UI: de-DE Calc: threaded i've added a screenshot to make clear which type of cursor i'm talking about.
Enhancement is valid, but is there really a functional requirement to implement MS 'Text cursor indicator' balloons. The colored 'Text cursor indicator' ballons are native MS controls for visual decoration that are not implemented. As Assistive Technology LibreOffice currently correctly responds to os/DE color theme/a11y contrast theme for the mouse pointer styles, and does honor the text cursor thickness as set by slider. This MS Ease of Access decoration requires additional dev native code for the win vcl. Don't believe it could be implemented cross platform.
It would be interesting to have some reference to documentation how that text cursor indicator is implemented and what would be needed to make it work. If it reacts to accessibility events (like caret-moved events) and uses information available via accessibility API (like and caret position) and takes care of drawing the "balloons" itself, I think it would be easier to support than if it requires using some kind of native Windows control for drawing the cursor inside LibreOffice. (In case of accessibility events, it might be that this depends on UIA events, while we currently use IAccessible2 only.) In a quick test, Firefox was an application where that setting had an effect, while it didn't in a few other open source apps I tried (Notepad++, Kate).
(In reply to Michael Weghorn from comment #2) > In a quick test, Firefox was an application where that setting had an > effect, while it didn't in a few other open source apps I tried (Notepad++, > Kate). It also works with the Qt "spinboxes" example (qtbase\examples\widgets\widgets\spinboxes\spinboxes.exe) in a current Qt development build at least.
(In reply to Michael Weghorn from comment #3) > It also works with the Qt "spinboxes" example > (qtbase\examples\widgets\widgets\spinboxes\spinboxes.exe) in a current Qt > development build at least. With a local test change in qtbase to report an incorrect cursor position via the UIA ITextProvider2 interface, this results in the cursor/caret still being shown in the same position as previously, but the "balloon indicators" to be shown a few characters further to the left, which might be an indication that the following is true: (In reply to Michael Weghorn from comment #2) > If it reacts to accessibility events (like caret-moved events) and uses > information available via accessibility API (like and caret position) and > takes care of drawing the "balloons" itself, [...] So potentially, emitting the relevant UIA event and supporting the text-related UIA API might be what would be needed. If so, this sounds like a valid request in general, but I don't see implementing UIA support in LibreOffice as something that's going to happen soon, as we use the IAccessible2 API for AT support instead. (Alternatively, one could also try asking Microsoft to implement support for IAccessible2 for that text cursor indicator, or extend their MSAA to UIA bridge shipped included in Windows to make this work.) Test change in qtbase: $ git diff diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiatextprovider.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiatextprovider.cpp index 00c2dfbd13e..630b24fac46 100644 --- a/src/plugins/platforms/windows/uiautomation/qwindowsuiatextprovider.cpp +++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiatextprovider.cpp @@ -203,7 +203,7 @@ HRESULT STDMETHODCALLTYPE QWindowsUiaTextProvider::GetCaretRange(BOOL *isActive, *isActive = accessible->state().focused; int cursorPosition = textInterface->cursorPosition(); - *pRetVal = makeComObject<QWindowsUiaTextRangeProvider>(id(), cursorPosition, cursorPosition) + *pRetVal = makeComObject<QWindowsUiaTextRangeProvider>(id(), cursorPosition -4, cursorPosition -4) .Detach(); return S_OK; }