From 4a511bde1ebe852e15cdfb00323837e8a28f9b8a Mon Sep 17 00:00:00 2001 From: rc-swag <58423624+rc-swag@users.noreply.github.com> Date: Tue, 12 Dec 2023 23:49:04 +1000 Subject: [PATCH] fix(core): clear core context on invalidate cache --- common/test/keyboards/baseline/baseline.kpj | 7 +++++++ .../baseline/k_049___context_and_invalidate.kmn | 16 ++++++++++++++++ .../baseline/k_049___context_and_invalidate.kmx | Bin 0 -> 368 bytes core/src/kmx/kmx_processor.cpp | 1 + core/tests/unit/kmx/kmx.cpp | 2 ++ core/tests/unit/kmx/meson.build | 3 ++- 6 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 common/test/keyboards/baseline/k_049___context_and_invalidate.kmn create mode 100644 common/test/keyboards/baseline/k_049___context_and_invalidate.kmx diff --git a/common/test/keyboards/baseline/baseline.kpj b/common/test/keyboards/baseline/baseline.kpj index b98e7519fd..3371c33490 100644 --- a/common/test/keyboards/baseline/baseline.kpj +++ b/common/test/keyboards/baseline/baseline.kpj @@ -323,5 +323,12 @@ 1.0 .kmn + + id_k_049___context_and_invalidate + k_049___context_and_invalidate.kmn + k_049___context_and_invalidate.kmn + 1.0 + .kmn + diff --git a/common/test/keyboards/baseline/k_049___context_and_invalidate.kmn b/common/test/keyboards/baseline/k_049___context_and_invalidate.kmn new file mode 100644 index 0000000000..bb30514594 --- /dev/null +++ b/common/test/keyboards/baseline/k_049___context_and_invalidate.kmn @@ -0,0 +1,16 @@ +store(&NAME) '049 - context and invalidate' +c Description: Tests that core context is cleared when invalidated See #10182. +c keys: [K_A][K_B][K_ENTER][K_C] +c expected: c +c context: + +store(&version) '10.0' + +begin Unicode > use(Main) + +group(Main) using keys + +c Test if context was not invalidated by [K_ENTER] context will be 'abd' + +'a' 'b' + [K_C] > 'abd' + diff --git a/common/test/keyboards/baseline/k_049___context_and_invalidate.kmx b/common/test/keyboards/baseline/k_049___context_and_invalidate.kmx new file mode 100644 index 0000000000000000000000000000000000000000..64efeb72f23159cfdccf69dce247461b6f9d04c3 GIT binary patch literal 368 zcmYL@y-q?w5JnFT5F2fT#OhX5Y9OJp1C>}1X^@2W;-!F~5;aEOz{2_)Zhw3-WDVY5HeWGHk&Lp0?#Q;{%TWHs^2b=S^C0(9mnV6YioD6Q zROM4XWJAhvS3+-DYtmFhpDA~ok#nBTP1@{{u_LEk*uBcv`3mYdE06 zfG)@M)GfE~rWYDIr(ANSH@3yBWj=D6>CV$Od=vH=>6oQ=i?s8w1Oxevkiq}G15fKQ P?!d&+TyiG<>$}1VMpY|6 literal 0 HcmV?d00001 diff --git a/core/src/kmx/kmx_processor.cpp b/core/src/kmx/kmx_processor.cpp index 6790d5b46d..1fa0734e07 100644 --- a/core/src/kmx/kmx_processor.cpp +++ b/core/src/kmx/kmx_processor.cpp @@ -247,6 +247,7 @@ kmx_processor::internal_process_queued_actions(km_core_state *state) { } break; case QIT_INVALIDATECONTEXT: + state->context().clear(); state->actions().push_invalidate_context(); break; default: diff --git a/core/tests/unit/kmx/kmx.cpp b/core/tests/unit/kmx/kmx.cpp index cf1105d3f3..e1c1845739 100644 --- a/core/tests/unit/kmx/kmx.cpp +++ b/core/tests/unit/kmx/kmx.cpp @@ -147,6 +147,8 @@ apply_action( } } break; case KM_CORE_IT_INVALIDATE_CONTEXT: + context.clear(); + text_store.clear(); std::cout << "action: context invalidated (markers cleared)" << std::endl; break; case KM_CORE_IT_EMIT_KEYSTROKE: diff --git a/core/tests/unit/kmx/meson.build b/core/tests/unit/kmx/meson.build index a2e43ff1d4..289b59b7b6 100644 --- a/core/tests/unit/kmx/meson.build +++ b/core/tests/unit/kmx/meson.build @@ -79,7 +79,8 @@ tests = [ 'k_045___deadkey_and_context', 'k_046___deadkey_and_contextex', 'k_047___caps_always_off_initially_on', - 'k_048___modifier_keys_keep_context' + 'k_048___modifier_keys_keep_context', + 'k_049___context_and_invalidate' ] node = find_program('node', required: true)