From 6fc623e4f37303eecd508e7ad56e0175c34cf4c8 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 22 Aug 2022 11:51:01 +1000 Subject: [PATCH] fix: Add invalidate context action to non-updatable parse Rename ProcessActionsTestParse to NonUpdatable parse. It does more then just test. Add handling for the invalidate context action to this parse, so that if we emit a keystroke we invalidate the context --- windows/src/engine/keyman32/kmprocess.cpp | 2 +- windows/src/engine/keyman32/kmprocessactions.cpp | 7 +++++-- windows/src/engine/keyman32/kmprocessactions.h | 6 +++--- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/windows/src/engine/keyman32/kmprocess.cpp b/windows/src/engine/keyman32/kmprocess.cpp index 8b7286afbc..35e30c6857 100644 --- a/windows/src/engine/keyman32/kmprocess.cpp +++ b/windows/src/engine/keyman32/kmprocess.cpp @@ -190,7 +190,7 @@ BOOL ProcessHook() } if (!_td->TIPFUpdateable) { - ProcessActionsTestParse(&fOutputKeystroke); + ProcessActionsNonUpdatableParse(&fOutputKeystroke); } else { ProcessActions(&fOutputKeystroke); } diff --git a/windows/src/engine/keyman32/kmprocessactions.cpp b/windows/src/engine/keyman32/kmprocessactions.cpp index f0aa36256d..6a5e03c123 100644 --- a/windows/src/engine/keyman32/kmprocessactions.cpp +++ b/windows/src/engine/keyman32/kmprocessactions.cpp @@ -167,7 +167,7 @@ BOOL ProcessActions(BOOL* emitKeyStroke) } BOOL -ProcessActionsTestParse(BOOL* emitKeyStroke) { +ProcessActionsNonUpdatableParse(BOOL* emitKeyStroke) { PKEYMAN64THREADDATA _td = ThreadGlobals(); if (!_td) { return FALSE; @@ -184,13 +184,16 @@ ProcessActionsTestParse(BOOL* emitKeyStroke) { switch (act->type) { case KM_KBP_IT_EMIT_KEYSTROKE: *emitKeyStroke = TRUE; - SendDebugMessageFormat(0, sdmGlobal, 0, "ProcessActionsTestParse EMIT_KEYSTROKE: act->type=%d", act->type); + SendDebugMessageFormat(0, sdmGlobal, 0, "ProcessActionsNonUpdatableParse EMIT_KEYSTROKE: act->type=[%d]", act->type); continueProcessingActions = TRUE; _td->CoreProcessEventRun = FALSE; // If we emit the key stroke on this parse we don't need the second parse break; case KM_KBP_IT_CAPSLOCK: continueProcessingActions = processCapsLock(act, !_td->state.isDown, _td->TIPFUpdateable); break; + case KM_KBP_IT_INVALIDATE_CONTEXT: + continueProcessingActions = processInvalidateContext(_td->app, _td->lpActiveKeyboard->lpCoreKeyboardState); + break; } if (!continueProcessingActions) { return FALSE; diff --git a/windows/src/engine/keyman32/kmprocessactions.h b/windows/src/engine/keyman32/kmprocessactions.h index e96f2226d1..6d269493b2 100644 --- a/windows/src/engine/keyman32/kmprocessactions.h +++ b/windows/src/engine/keyman32/kmprocessactions.h @@ -18,12 +18,12 @@ BOOL ProcessActions(BOOL* emitKeyStroke); /** * This function process the actions queued in the core processor in - * the non updateable parse of a keystroke. - * Emit keystroke and capslock are required to be processed in this phase. + * the non-updateable parse of a keystroke. + * Emit keystroke , capslock, and possibly invalidate key stroke are required to be processed in this phase. * * @param [in, out] emitKeyStroke is set to true if requested by the core action queue * @return BOOL True if actions were successfully processed */ -BOOL ProcessActionsTestParse(BOOL* emitKeyStroke); +BOOL ProcessActionsNonUpdatableParse(BOOL* emitKeyStroke); #endif