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 0000000000..64efeb72f2 Binary files /dev/null and b/common/test/keyboards/baseline/k_049___context_and_invalidate.kmx differ 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)