From e8dff5cf4e015ce1e28e9b31ba0977112bc001b9 Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Fri, 12 Aug 2022 09:58:58 -0500 Subject: [PATCH] feat(core): add event_flags to process_event #7046 - use a constant, KM_KBP_EVENT_FLAG_DEFAULT for 0 - update pascal and python - update linux and windows --- core/include/keyman/keyboardprocessor.h | 1 + core/python/keyman/keyboardprocessor/_api.py | 9 +++++++- core/python/keyman/keyboardprocessor/api.py | 3 ++- core/tests/unit/kmnkbd/debug_api.cpp | 22 +++++++++---------- core/tests/unit/kmnkbd/state_api.cpp | 12 +++++----- core/tests/unit/kmx/kmx.cpp | 2 +- core/tests/unit/kmx/kmx_imx.cpp | 10 ++++----- core/tests/unit/ldml/ldml.cpp | 2 +- developer/src/tike/child/UfrmDebug.pas | 2 +- .../tike/main/Keyman.System.KeymanCore.pas | 7 +++++- .../Keyman.System.VisualKeyboardImportKMX.pas | 2 +- linux/ibus-keyman/src/engine.c | 2 +- windows/src/engine/keyman32/kmprocess.cpp | 2 +- 13 files changed, 45 insertions(+), 31 deletions(-) diff --git a/core/include/keyman/keyboardprocessor.h b/core/include/keyman/keyboardprocessor.h index f8b1ca67cc..9509451e11 100644 --- a/core/include/keyman/keyboardprocessor.h +++ b/core/include/keyman/keyboardprocessor.h @@ -1052,6 +1052,7 @@ enum km_kbp_tech_value { * Bit flags to be used with the event_flags parameter of km_kbp_process_event */ enum km_kbp_event_flags { + KM_KBP_EVENT_FLAG_DEFAULT = 0, // default value: hardware KM_KBP_EVENT_FLAG_TOUCH = 1, // set if the event is touch, otherwise hardware }; diff --git a/core/python/keyman/keyboardprocessor/_api.py b/core/python/keyman/keyboardprocessor/_api.py index 0f2f59bd2c..590910c0e4 100644 --- a/core/python/keyman/keyboardprocessor/_api.py +++ b/core/python/keyman/keyboardprocessor/_api.py @@ -277,13 +277,20 @@ class Tech(IntFlag): KMN = 1 LDML = 2 +class EventFlag(IntFlag): + KM_KBP_EVENT_FLAG_DEFAULT = 0 + """default value: hardware""" + KM_KBP_EVENT_FLAG_TOUCH = 1 + """set if the event is touch, otherwise hardware""" + __method(None, 'get_engine_attrs', POINTER(Attributes)) __method(None, 'process_event', Status, (State_p, Dir.IN, 'state'), (VirtualKey, Dir.IN, 'vkey'), - (c_uint16, Dir.IN, 'modifier_state')) + (c_uint16, Dir.IN, 'modifier_state'), + (c_uint16, Dir.IN, 'event_flags')) class Modifier(IntFlag): diff --git a/core/python/keyman/keyboardprocessor/api.py b/core/python/keyman/keyboardprocessor/api.py index 6fcedf18e5..f7f642b9cf 100644 --- a/core/python/keyman/keyboardprocessor/api.py +++ b/core/python/keyman/keyboardprocessor/api.py @@ -114,5 +114,6 @@ class State: def process_event(vk: VirtualKey, modifier_state, state: State, - acts: ActionList): + acts: ActionList, + event_flags): pass diff --git a/core/tests/unit/kmnkbd/debug_api.cpp b/core/tests/unit/kmnkbd/debug_api.cpp index 657601a3c1..cdf58a8c72 100644 --- a/core/tests/unit/kmnkbd/debug_api.cpp +++ b/core/tests/unit/kmnkbd/debug_api.cpp @@ -73,7 +73,7 @@ void setup(const char *keyboard) { void test_debugging_disabled() { setup("000 - null keyboard.kmx"); try_status(km_kbp_state_debug_set(test_state, 0)); - try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_S, KM_KBP_MODIFIER_SHIFT, 1, 0)); + try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_S, KM_KBP_MODIFIER_SHIFT, 1, KM_KBP_EVENT_FLAG_DEFAULT)); assert(debug_items(test_state, { km_kbp_state_debug_item{KM_KBP_DEBUG_END} })); @@ -91,7 +91,7 @@ void test_debugging_no_rule_match() { setup("000 - null keyboard.kmx"); DEBUG_GROUP gp = {u"Main"}; try_status(km_kbp_state_debug_set(test_state, 1)); - try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_S, KM_KBP_MODIFIER_SHIFT, 1, 0)); + try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_S, KM_KBP_MODIFIER_SHIFT, 1, KM_KBP_EVENT_FLAG_DEFAULT)); assert(debug_items(test_state, { km_kbp_state_debug_item{KM_KBP_DEBUG_BEGIN, KM_KBP_DEBUG_FLAG_UNICODE, {KM_KBP_VKEY_S, KM_KBP_MODIFIER_SHIFT, 'S'}}, km_kbp_state_debug_item{KM_KBP_DEBUG_GROUP_ENTER, 0, {}, {u"", &gp}}, @@ -112,7 +112,7 @@ void test_debugging_function_key() { setup("000 - null keyboard.kmx"); DEBUG_GROUP gp = {u"Main"}; try_status(km_kbp_state_debug_set(test_state, 1)); - try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_F1, 0, 1, 0)); + try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_F1, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT)); assert(debug_items(test_state, { km_kbp_state_debug_item{KM_KBP_DEBUG_BEGIN, KM_KBP_DEBUG_FLAG_UNICODE, {KM_KBP_VKEY_F1, 0, 0}}, km_kbp_state_debug_item{KM_KBP_DEBUG_GROUP_ENTER, 0, {}, {u"", &gp}}, @@ -138,7 +138,7 @@ void test_basic_rule_matches() { // 'DE' + 'F' > U+0E04 U+0E05 U+0E06 - try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_D, KM_KBP_MODIFIER_SHIFT, 1, 0)); + try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_D, KM_KBP_MODIFIER_SHIFT, 1, KM_KBP_EVENT_FLAG_DEFAULT)); assert(debug_items(test_state, { km_kbp_state_debug_item{KM_KBP_DEBUG_BEGIN, KM_KBP_DEBUG_FLAG_UNICODE, {KM_KBP_VKEY_D, KM_KBP_MODIFIER_SHIFT, 'D'}}, km_kbp_state_debug_item{KM_KBP_DEBUG_GROUP_ENTER, 0, {}, {u"", &gp}}, @@ -151,7 +151,7 @@ void test_basic_rule_matches() { {KM_KBP_IT_END} })); - try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_E, KM_KBP_MODIFIER_SHIFT, 1, 0)); + try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_E, KM_KBP_MODIFIER_SHIFT, 1, KM_KBP_EVENT_FLAG_DEFAULT)); assert(debug_items(test_state, { km_kbp_state_debug_item{KM_KBP_DEBUG_BEGIN, KM_KBP_DEBUG_FLAG_UNICODE, {KM_KBP_VKEY_E, KM_KBP_MODIFIER_SHIFT, 'E'}}, km_kbp_state_debug_item{KM_KBP_DEBUG_GROUP_ENTER, 0, {}, {u"", &gp}}, @@ -164,7 +164,7 @@ void test_basic_rule_matches() { {KM_KBP_IT_END} })); - try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_F, KM_KBP_MODIFIER_SHIFT, 1, 0)); + try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_F, KM_KBP_MODIFIER_SHIFT, 1, KM_KBP_EVENT_FLAG_DEFAULT)); assert(debug_items(test_state, { km_kbp_state_debug_item{KM_KBP_DEBUG_BEGIN, KM_KBP_DEBUG_FLAG_UNICODE, {KM_KBP_VKEY_F, KM_KBP_MODIFIER_SHIFT, 'F'}}, km_kbp_state_debug_item{KM_KBP_DEBUG_GROUP_ENTER, 0, {}, {u"", &gp}}, @@ -208,7 +208,7 @@ void test_multiple_groups() { // '12' -> 'abc' - try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_1, 0, 1, 0)); + try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_1, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT)); assert(debug_items(test_state, { km_kbp_state_debug_item{KM_KBP_DEBUG_BEGIN, KM_KBP_DEBUG_FLAG_UNICODE, {KM_KBP_VKEY_1, 0, '1'}}, km_kbp_state_debug_item{KM_KBP_DEBUG_GROUP_ENTER, 0, {}, {u"", &gp}}, @@ -238,7 +238,7 @@ void test_multiple_groups() { {KM_KBP_IT_END} })); - try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_2, 0, 1, 0)); + try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_2, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT)); assert(debug_items(test_state, { km_kbp_state_debug_item{KM_KBP_DEBUG_BEGIN, KM_KBP_DEBUG_FLAG_UNICODE, {KM_KBP_VKEY_2, 0, '2'}}, km_kbp_state_debug_item{KM_KBP_DEBUG_GROUP_ENTER, 0, {}, {u"", &gp}}, @@ -287,7 +287,7 @@ void test_store_offsets() { // 'ab' -> 'ex' - try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_A, 0, 1, 0)); + try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_A, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT)); assert(debug_items(test_state, { km_kbp_state_debug_item{KM_KBP_DEBUG_BEGIN, KM_KBP_DEBUG_FLAG_UNICODE, {KM_KBP_VKEY_A, 0, 'a'}}, km_kbp_state_debug_item{KM_KBP_DEBUG_GROUP_ENTER, 0, {}, {u"", &gp}}, @@ -307,7 +307,7 @@ void test_store_offsets() { {KM_KBP_IT_END} })); - try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_B, 0, 1, 0)); + try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_B, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT)); assert(debug_items(test_state, { km_kbp_state_debug_item{KM_KBP_DEBUG_BEGIN, KM_KBP_DEBUG_FLAG_UNICODE, {KM_KBP_VKEY_B, 0, 'b'}}, km_kbp_state_debug_item{KM_KBP_DEBUG_GROUP_ENTER, 0, {}, {u"", &gp}}, @@ -361,7 +361,7 @@ void test_set_option() { // '1' -> set_option - try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_1, 0, 1, 0)); + try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_1, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT)); assert(debug_items(test_state, { km_kbp_state_debug_item{KM_KBP_DEBUG_BEGIN, KM_KBP_DEBUG_FLAG_UNICODE, {KM_KBP_VKEY_1, 0, '1'}}, km_kbp_state_debug_item{KM_KBP_DEBUG_GROUP_ENTER, 0, {}, {u"", &gp}}, diff --git a/core/tests/unit/kmnkbd/state_api.cpp b/core/tests/unit/kmnkbd/state_api.cpp index 8f38726a3d..37964489b7 100644 --- a/core/tests/unit/kmnkbd/state_api.cpp +++ b/core/tests/unit/kmnkbd/state_api.cpp @@ -156,20 +156,20 @@ int main(int argc, char * argv[]) DISABLE_WARNING_POP try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_S, - KM_KBP_MODIFIER_SHIFT, 1, 0)); + KM_KBP_MODIFIER_SHIFT, 1, KM_KBP_EVENT_FLAG_DEFAULT)); assert(action_items(test_state, {{KM_KBP_IT_CHAR, {0,}, {km_kbp_usv('S')}}, {KM_KBP_IT_END}})); try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_I, - KM_KBP_MODIFIER_SHIFT, 1, 0)); + KM_KBP_MODIFIER_SHIFT, 1, KM_KBP_EVENT_FLAG_DEFAULT)); assert(action_items(test_state, {{KM_KBP_IT_CHAR, {0,}, {km_kbp_usv('I')}}, {KM_KBP_IT_END}})); - try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_L, 0, 1, 0)); + try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_L, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT)); assert(action_items(test_state, {{KM_KBP_IT_CHAR, {0,}, {km_kbp_usv('l')}}, {KM_KBP_IT_END}})); - try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_BKSP, 0, 1, 0)); + try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_BKSP, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT)); assert(action_items(test_state, {{KM_KBP_IT_BACK, {0,}, {0}}, {KM_KBP_IT_END}})); try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_L, - KM_KBP_MODIFIER_SHIFT, 1, 0)); + KM_KBP_MODIFIER_SHIFT, 1, KM_KBP_EVENT_FLAG_DEFAULT)); assert(action_items(test_state, {{KM_KBP_IT_CHAR, {0,}, {km_kbp_usv('L')}}, {KM_KBP_IT_END}})); - try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_F2, 0, 1, 0)); + try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_F2, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT)); assert(action_items(test_state, {{KM_KBP_IT_PERSIST_OPT, {0,}, {uintptr_t(&expected_persist_opt)}}, {KM_KBP_IT_END}})); diff --git a/core/tests/unit/kmx/kmx.cpp b/core/tests/unit/kmx/kmx.cpp index acd6c0db2a..5a240b01fb 100644 --- a/core/tests/unit/kmx/kmx.cpp +++ b/core/tests/unit/kmx/kmx.cpp @@ -218,7 +218,7 @@ run_test(const km::kbp::path &source, const km::kbp::path &compiled) { } for (auto key_down = 1; key_down >= 0; key_down--) { - try_status(km_kbp_process_event(test_state, p.vk, p.modifier_state | test_source.caps_lock_state(), key_down, 0)); + try_status(km_kbp_process_event(test_state, p.vk, p.modifier_state | test_source.caps_lock_state(), key_down, KM_KBP_EVENT_FLAG_DEFAULT)); for (auto act = km_kbp_state_action_items(test_state, nullptr); act->type != KM_KBP_IT_END; act++) { apply_action(test_state, *act, text_store, test_context, options, test_source); diff --git a/core/tests/unit/kmx/kmx_imx.cpp b/core/tests/unit/kmx/kmx_imx.cpp index 8376b6df8d..2afb9c63bc 100644 --- a/core/tests/unit/kmx/kmx_imx.cpp +++ b/core/tests/unit/kmx/kmx_imx.cpp @@ -214,26 +214,26 @@ void test_queue_actions (const km::kbp::path &source_keyboard) { km_kbp_state_imx_register_callback(test_state, test_imx_callback, (void*)&g_extract_imx_map); // Key Press that doesn't trigger a call back - try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_S,KM_KBP_MODIFIER_SHIFT, 1, 0)); + try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_S,KM_KBP_MODIFIER_SHIFT, 1, KM_KBP_EVENT_FLAG_DEFAULT)); assert(action_items(test_state, {{KM_KBP_IT_CHAR, {0,}, {km_kbp_usv('S')}}, {KM_KBP_IT_END}})); - try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_BKSP, 0, 1, 0)); + try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_BKSP, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT)); assert(action_items(test_state, {{KM_KBP_IT_CHAR, {0,}, {km_kbp_usv('X')}}, {KM_KBP_IT_ALERT, {0,}, {0}}, {KM_KBP_IT_END}})); - try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_ESC, 0, 1, 0)); + try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_ESC, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT)); assert(action_items(test_state, { {KM_KBP_IT_CHAR, {0,}, {km_kbp_usv('Y')}}, {KM_KBP_IT_MARKER, {0,}, {1}}, {KM_KBP_IT_CHAR, {0,}, {km_kbp_usv('A')}}, {KM_KBP_IT_END}})); - try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_1, 0, 1, 0)); + try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_1, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT)); km_kbp_action_item bksp_a = {KM_KBP_IT_BACK}; bksp_a.backspace.expected_type = KM_KBP_BT_CHAR; bksp_a.backspace.expected_value = 'A'; assert(action_items(test_state, {bksp_a,{KM_KBP_IT_CHAR, {0,}, {km_kbp_usv('Z')}}, {KM_KBP_IT_END}})); - try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_2, 0, 1, 0)); + try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_2, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT)); assert(action_items(test_state, {{KM_KBP_IT_INVALIDATE_CONTEXT, {0,}, {0}}, {KM_KBP_IT_END}})); km_kbp_state_imx_deregister_callback(test_state); diff --git a/core/tests/unit/ldml/ldml.cpp b/core/tests/unit/ldml/ldml.cpp index 4e4bb2d0ae..c1e1aff366 100644 --- a/core/tests/unit/ldml/ldml.cpp +++ b/core/tests/unit/ldml/ldml.cpp @@ -190,7 +190,7 @@ run_test(const km::kbp::path &source, const km::kbp::path &compiled) { } for (auto key_down = 1; key_down >= 0; key_down--) { - try_status(km_kbp_process_event(test_state, p.vk, p.modifier_state | test_source.caps_lock_state(), key_down, 0)); // TODO-LDML: for now. Should send touch and hardware events. + try_status(km_kbp_process_event(test_state, p.vk, p.modifier_state | test_source.caps_lock_state(), key_down, KM_KBP_EVENT_FLAG_DEFAULT)); // TODO-LDML: for now. Should send touch and hardware events. for (auto act = km_kbp_state_action_items(test_state, nullptr); act->type != KM_KBP_IT_END; act++) { apply_action(test_state, *act, text_store, test_context, test_source); diff --git a/developer/src/tike/child/UfrmDebug.pas b/developer/src/tike/child/UfrmDebug.pas index f31f151a08..d6fff6c55f 100644 --- a/developer/src/tike/child/UfrmDebug.pas +++ b/developer/src/tike/child/UfrmDebug.pas @@ -462,7 +462,7 @@ begin if not SetKeyEventContext then Exit(False); - if km_kbp_process_event(FDebugCore.State, Message.WParam, modifier, 1) = KM_KBP_STATUS_OK then + if km_kbp_process_event(FDebugCore.State, Message.WParam, modifier, 1, KM_KBP_EVENT_FLAG_DEFAULT) = KM_KBP_STATUS_OK then begin // Process keystroke Result := True; diff --git a/developer/src/tike/main/Keyman.System.KeymanCore.pas b/developer/src/tike/main/Keyman.System.KeymanCore.pas index 8c9358b93a..fc39934f57 100644 --- a/developer/src/tike/main/Keyman.System.KeymanCore.pas +++ b/developer/src/tike/main/Keyman.System.KeymanCore.pas @@ -307,9 +307,14 @@ km_kbp_process_event( state: pkm_kbp_state; vk: km_kbp_virtual_key; modifier_state: uint16_t; - is_key_down: uint8_t + is_key_down: uint8_t; + event_flags: uint16_t; ): km_kbp_status; cdecl; external kmnkbp0 delayed; +const + KM_KBP_EVENT_FLAG_DEFAULT = 0; // default value: hardware + KM_KBP_EVENT_FLAG_TOUCH = 1; // set if the event is touch, otherwise hardware + // keyboardprocessor_vkeys.h diff --git a/developer/src/tike/main/Keyman.System.VisualKeyboardImportKMX.pas b/developer/src/tike/main/Keyman.System.VisualKeyboardImportKMX.pas index b1536bd0a8..e36216e155 100644 --- a/developer/src/tike/main/Keyman.System.VisualKeyboardImportKMX.pas +++ b/developer/src/tike/main/Keyman.System.VisualKeyboardImportKMX.pas @@ -110,7 +110,7 @@ var begin context := km_kbp_state_context(FCore.State); km_kbp_context_clear(context); - if km_kbp_process_event(FCore.State, vk.vkey, vk.kmshift, 1) = KM_KBP_STATUS_OK then + if km_kbp_process_event(FCore.State, vk.vkey, vk.kmshift, 1, KM_KBP_EVENT_FLAG_DEFAULT) = KM_KBP_STATUS_OK then begin FEvents.Clear; FEvents.AddStateItems(FCore.State, vk.vkey, vk.kmshift); diff --git a/linux/ibus-keyman/src/engine.c b/linux/ibus-keyman/src/engine.c index 81625cc672..2037514625 100644 --- a/linux/ibus-keyman/src/engine.c +++ b/linux/ibus-keyman/src/engine.c @@ -838,7 +838,7 @@ ibus_keyman_engine_process_key_event( km_kbp_context *context = km_kbp_state_context(keyman->state); g_free(get_current_context_text(context)); g_message("DAR: ibus_keyman_engine_process_key_event - km_mod_state=0x%x", km_mod_state); - km_kbp_status event_status = km_kbp_process_event(keyman->state, keycode_to_vk[keycode], km_mod_state, isKeyDown); + km_kbp_status event_status = km_kbp_process_event(keyman->state, keycode_to_vk[keycode], km_mod_state, isKeyDown, KM_KBP_EVENT_FLAG_DEFAULT); context = km_kbp_state_context(keyman->state); g_message("after process key event"); g_free(get_current_context_text(context)); diff --git a/windows/src/engine/keyman32/kmprocess.cpp b/windows/src/engine/keyman32/kmprocess.cpp index 8b7286afbc..c3af0cb750 100644 --- a/windows/src/engine/keyman32/kmprocess.cpp +++ b/windows/src/engine/keyman32/kmprocess.cpp @@ -112,7 +112,7 @@ Process_Event_Core(PKEYMAN64THREADDATA _td) { // Mask the bits supported according to `km_kbp_modifier_state` enum, update the mask if this enum is expanded. if (KM_KBP_STATUS_OK != km_kbp_process_event( _td->lpActiveKeyboard->lpCoreKeyboardState, _td->state.vkey, - static_cast(Globals::get_ShiftState() & (KM_KBP_MODIFIER_MASK_ALL | KM_KBP_MODIFIER_MASK_CAPS)), (uint8_t)_td->state.isDown)) { + static_cast(Globals::get_ShiftState() & (KM_KBP_MODIFIER_MASK_ALL | KM_KBP_MODIFIER_MASK_CAPS)), (uint8_t)_td->state.isDown), KM_KBP_EVENT_FLAG_DEFAULT) { SendDebugMessageFormat(0, sdmGlobal, 0, "ProcessEvent CoreProcessEvent Result:False %d ", FALSE); return FALSE; }