Accessibility Bug with Windows and Text Entry Widgets

Hi!

So we are getting lots of amazingly positive feedback on the accesibility work we did, but also finding a few more bugs. This one I think is in JUCE.

The user report is: the announced character is always off by one, so you end up deleting the wrong character or inserting something in the wrong place.

Using windows with NVDA and other readers.

Further investigation by the folks who are working with us resulted in:

Just did some more experimenting on this:

  • It seems to be a Juce issue because it also happens in Pianoteq
  • It’s Windows specific - Mac works totally fine
  • You can reproduce it with any screen reader (tried with NVDA and Narrator)

This effects both deleting and cursor movement. If you go to the beginning of a line, then press the right arrow you should hear the screen reader speak the second character, but it repeats the first instead.

I also found a second issue on Windows though this one only seems to effect NVDA, if you make a selection by holding down shift and moving through the text, NVDA always repeats the entire selection, rather than saying just the part that was selected/unselected.

The fact that it is also in Pianoteq7 makes me think there’s an off by one somewhere in the juce text editor accesibility code on windows. I haven’t had a chance to hunt this down yet. We are also still running on 6.1.2 + patches (although plan to upgrade) so apols if you’ve already fixed this.

I’m going to attach this forum post into our issue https://github.com/surge-synthesizer/surge/issues/5714 also

Any thoughts?

Thanks as always folks!

Thanks for reporting. I think I’ve found the cause of the off-by-one cursor-position issue, and we’ll hopefully get the fix merged later this week.

I also tried to reproduce the issue with overly-verbose selection under NVDA in the Accessibility Demo, but wasn’t able to. I’m testing on Windows 11 with NVDA 2021.3.1. I haven’t tried reverting JUCE to 6.1.2 to see whether this was a regression that we’ve fixed at some point.

Could you ask the user that reported the issue to test again once the other fix is merged, and you’ve updated your project to the latest develop? If they still see the problem at that point, let me know and I’ll take another look.

If the selection issue does require further investigation, it would be great if you could provide some instructions to help me reproduce the issue. If you’re able to demonstrate the problem in the Accessiblity Demo, that would be ideal. Otherwise, if the problem is only present in Surge, then it would be useful to know which code (and which bit of the UI) to look at there.

Awesome. Will pull surge up to develop once it’s merged for our 11 beta and then test. I’ll ping the reporters for more details. Thanks!

Thanks for reporting the issue. I think it should be fixed here:

Here’s a report from user. Works but still has one issue. Nightly in reference is 086b21be1b08442631dcb58a9abc12acd48fce0a JUCE

Tried out the latest nightly, the cursor bug does appear fixed when moving around. But now when you backspace a character, which should speak the char that was deleted, Narrator works fine while NVDA says “blank”

Thanks for reporting. It looks like the previous fix was slightly faulty, as it caused MoveEndpointByUnit to return the incorrect result when moving the cursor backwards by a single character. I’ve put together a revised fix which should be on develop early next week.

1 Like

The fix is now merged: