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)