2929import core
3030from contextlib import contextmanager
3131import threading
32-
32+ _watchdogObserver = None
3333ignoreInjected = False
3434
3535# Fake vk codes.
@@ -195,6 +195,10 @@ def internal_keyDownEvent(vkCode,scanCode,extended,injected):
195195 currentModifiers .discard (stickyNVDAModifier )
196196 stickyNVDAModifier = None
197197
198+ if _watchdogObserver ._get_isAttemptingRecovery ():
199+ # When attempting recovery only process modifiers, but do not execute gesture.
200+ return True
201+
198202 try :
199203 inputCore .manager .executeGesture (gesture )
200204 gestureExecuted = True
@@ -208,6 +212,8 @@ def internal_keyDownEvent(vkCode,scanCode,extended,injected):
208212 except :
209213 log .error ("internal_keyDownEvent" , exc_info = True )
210214 finally :
215+ if _watchdogObserver ._get_isAttemptingRecovery ():
216+ return True
211217 # #6017: handle typed characters in Win10 RS2 and above where we can't detect typed characters in-process
212218 # This code must be in the 'finally' block as code above returns in several places yet we still want to execute this particular code.
213219 focus = api .getFocusObject ()
@@ -275,8 +281,10 @@ def internal_keyUpEvent(vkCode,scanCode,extended,injected):
275281
276282#Register internal key press event with operating system
277283
278- def initialize ():
284+ def initialize (watchdogObserver = None ):
279285 """Initialises keyboard support."""
286+ global _watchdogObserver
287+ _watchdogObserver = watchdogObserver
280288 winInputHook .initialize ()
281289 winInputHook .setCallbacks (keyDown = internal_keyDownEvent ,keyUp = internal_keyUpEvent )
282290
0 commit comments