When composing a new Email or replying to an Email within GMail using Chrome, NVDA does not properly track the cursor. Specifically, NVDA does not read the character on which the cursor is located. To replicate this:
Using Chrome open GMail in standard view.
Compose a new message.
Type some text in the message area.
Attempt to edit text.
The text was updated successfully, but these errors were encountered:
Can you be more specific as to exactly what you're seeing here? When you
"attempt to edit text", what exactly are you pressing and what does NVDA
report? if you use the left and right arrow keys, does NVDA report nothing
or does it report the incorrect character (e.g. the one before/after)?
Cursor tracking does seem to be a bit unreliable for me in Chrome stable.
It is a lot better in Chrome Canary, though. However, even in Chrome
stable, I still get characters reported, though often the character I was
previously on instead of the character at the new position.
Assuming we understand the issue, and Jamie has described it correctly. We think this issue is improving with updates to Chrome, while annoying this seems to be reasonably usable in Chrome canary. This would be a large chunk of uncertain work to work around in nvda. Applying a P3 label. Any questions or clarifications welcome.
…figurable (PR #7201, issue #6424)
- 30 ms was chosen to ensure maximum responsiveness, but this just isn't enough in the wild; e.g. in complex web editors (particularly in Chrome) or when connecting to remote terminals with connection latency.
- This is configurable via config.conf["editableText"]["caretMoveTimeout"]. It is not exposed in the GUI, as this should only be changed by advanced users. The value is in ms, not seconds, as that's a better unit for this purpose. However, the function continues to use seconds for its arguments for backwards compatibility.
- Previously, _hasCaretMoved slept at the end of the loop but didn't check for caret movement again. This meant that it could return False even if the caret did actually move during the last sleep. Now, the timeout check happens after the caret movement check, ensuring the correct result.
- _hasCaretMoved now works with ms rather than seconds to avoid floating point precision errors. These precision errors could result in an extraneous additional retry.
- Added some debug logging to help diagnose caret tracking problems in future.
- When pressing the delete key, we often can't detect this by comparing bookmarks. Therefore, when pressing delete, compare the word at the caret (in addition to bookmarks) to detect movement.