More robust keyboard modifier tracking (PR #12610)
Fixes: #12609
# Summary of the issue:
NVDA wasn't correctly tracking the state of keyboard modifiers (such as Control, or Insert) in some cases,
e.g. when watchdog is recovering.
In winInputHook.py def keyboardHook():
if watchdog.isAttemptingRecovery or code!=HC_ACTION:
return windll.user32.CallNextHookEx(0,code,wParam,lParam)
When watchdog.isAttemptingRecovery is True, this function returned early and didn't process any keyboard
events, including events related to keyboard modifiers.
When a pressing a modifier while watchdog is recovering, NVDA didn't process this and became out
of sync with the keyboard state.
# Description of fix:
Move the check for isAttemptingRecovery into internal_keyDownEvent after modifier tracking has occurred but before the gesture is executed.
Co-authored-by: Reef Turner <reef@nvaccess.org>