Skip to content

Commit e8dff5c

Browse files
committed
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
1 parent 21a783a commit e8dff5c

13 files changed

Lines changed: 45 additions & 31 deletions

File tree

core/include/keyman/keyboardprocessor.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1052,6 +1052,7 @@ enum km_kbp_tech_value {
10521052
* Bit flags to be used with the event_flags parameter of km_kbp_process_event
10531053
*/
10541054
enum km_kbp_event_flags {
1055+
KM_KBP_EVENT_FLAG_DEFAULT = 0, // default value: hardware
10551056
KM_KBP_EVENT_FLAG_TOUCH = 1, // set if the event is touch, otherwise hardware
10561057
};
10571058

core/python/keyman/keyboardprocessor/_api.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,13 +277,20 @@ class Tech(IntFlag):
277277
KMN = 1
278278
LDML = 2
279279

280+
class EventFlag(IntFlag):
281+
KM_KBP_EVENT_FLAG_DEFAULT = 0
282+
"""default value: hardware"""
283+
KM_KBP_EVENT_FLAG_TOUCH = 1
284+
"""set if the event is touch, otherwise hardware"""
285+
280286

281287
__method(None, 'get_engine_attrs', POINTER(Attributes))
282288

283289
__method(None, 'process_event', Status,
284290
(State_p, Dir.IN, 'state'),
285291
(VirtualKey, Dir.IN, 'vkey'),
286-
(c_uint16, Dir.IN, 'modifier_state'))
292+
(c_uint16, Dir.IN, 'modifier_state'),
293+
(c_uint16, Dir.IN, 'event_flags'))
287294

288295

289296
class Modifier(IntFlag):

core/python/keyman/keyboardprocessor/api.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,5 +114,6 @@ def indentify_option_src(opt: Option):
114114
def process_event(vk: VirtualKey,
115115
modifier_state,
116116
state: State,
117-
acts: ActionList):
117+
acts: ActionList,
118+
event_flags):
118119
pass

core/tests/unit/kmnkbd/debug_api.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ void setup(const char *keyboard) {
7373
void test_debugging_disabled() {
7474
setup("000 - null keyboard.kmx");
7575
try_status(km_kbp_state_debug_set(test_state, 0));
76-
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_S, KM_KBP_MODIFIER_SHIFT, 1, 0));
76+
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_S, KM_KBP_MODIFIER_SHIFT, 1, KM_KBP_EVENT_FLAG_DEFAULT));
7777
assert(debug_items(test_state, {
7878
km_kbp_state_debug_item{KM_KBP_DEBUG_END}
7979
}));
@@ -91,7 +91,7 @@ void test_debugging_no_rule_match() {
9191
setup("000 - null keyboard.kmx");
9292
DEBUG_GROUP gp = {u"Main"};
9393
try_status(km_kbp_state_debug_set(test_state, 1));
94-
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_S, KM_KBP_MODIFIER_SHIFT, 1, 0));
94+
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_S, KM_KBP_MODIFIER_SHIFT, 1, KM_KBP_EVENT_FLAG_DEFAULT));
9595
assert(debug_items(test_state, {
9696
km_kbp_state_debug_item{KM_KBP_DEBUG_BEGIN, KM_KBP_DEBUG_FLAG_UNICODE, {KM_KBP_VKEY_S, KM_KBP_MODIFIER_SHIFT, 'S'}},
9797
km_kbp_state_debug_item{KM_KBP_DEBUG_GROUP_ENTER, 0, {}, {u"", &gp}},
@@ -112,7 +112,7 @@ void test_debugging_function_key() {
112112
setup("000 - null keyboard.kmx");
113113
DEBUG_GROUP gp = {u"Main"};
114114
try_status(km_kbp_state_debug_set(test_state, 1));
115-
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_F1, 0, 1, 0));
115+
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_F1, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT));
116116
assert(debug_items(test_state, {
117117
km_kbp_state_debug_item{KM_KBP_DEBUG_BEGIN, KM_KBP_DEBUG_FLAG_UNICODE, {KM_KBP_VKEY_F1, 0, 0}},
118118
km_kbp_state_debug_item{KM_KBP_DEBUG_GROUP_ENTER, 0, {}, {u"", &gp}},
@@ -138,7 +138,7 @@ void test_basic_rule_matches() {
138138

139139
// 'DE' + 'F' > U+0E04 U+0E05 U+0E06
140140

141-
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_D, KM_KBP_MODIFIER_SHIFT, 1, 0));
141+
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_D, KM_KBP_MODIFIER_SHIFT, 1, KM_KBP_EVENT_FLAG_DEFAULT));
142142
assert(debug_items(test_state, {
143143
km_kbp_state_debug_item{KM_KBP_DEBUG_BEGIN, KM_KBP_DEBUG_FLAG_UNICODE, {KM_KBP_VKEY_D, KM_KBP_MODIFIER_SHIFT, 'D'}},
144144
km_kbp_state_debug_item{KM_KBP_DEBUG_GROUP_ENTER, 0, {}, {u"", &gp}},
@@ -151,7 +151,7 @@ void test_basic_rule_matches() {
151151
{KM_KBP_IT_END}
152152
}));
153153

154-
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_E, KM_KBP_MODIFIER_SHIFT, 1, 0));
154+
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_E, KM_KBP_MODIFIER_SHIFT, 1, KM_KBP_EVENT_FLAG_DEFAULT));
155155
assert(debug_items(test_state, {
156156
km_kbp_state_debug_item{KM_KBP_DEBUG_BEGIN, KM_KBP_DEBUG_FLAG_UNICODE, {KM_KBP_VKEY_E, KM_KBP_MODIFIER_SHIFT, 'E'}},
157157
km_kbp_state_debug_item{KM_KBP_DEBUG_GROUP_ENTER, 0, {}, {u"", &gp}},
@@ -164,7 +164,7 @@ void test_basic_rule_matches() {
164164
{KM_KBP_IT_END}
165165
}));
166166

167-
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_F, KM_KBP_MODIFIER_SHIFT, 1, 0));
167+
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_F, KM_KBP_MODIFIER_SHIFT, 1, KM_KBP_EVENT_FLAG_DEFAULT));
168168
assert(debug_items(test_state, {
169169
km_kbp_state_debug_item{KM_KBP_DEBUG_BEGIN, KM_KBP_DEBUG_FLAG_UNICODE, {KM_KBP_VKEY_F, KM_KBP_MODIFIER_SHIFT, 'F'}},
170170
km_kbp_state_debug_item{KM_KBP_DEBUG_GROUP_ENTER, 0, {}, {u"", &gp}},
@@ -208,7 +208,7 @@ void test_multiple_groups() {
208208

209209
// '12' -> 'abc'
210210

211-
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_1, 0, 1, 0));
211+
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_1, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT));
212212
assert(debug_items(test_state, {
213213
km_kbp_state_debug_item{KM_KBP_DEBUG_BEGIN, KM_KBP_DEBUG_FLAG_UNICODE, {KM_KBP_VKEY_1, 0, '1'}},
214214
km_kbp_state_debug_item{KM_KBP_DEBUG_GROUP_ENTER, 0, {}, {u"", &gp}},
@@ -238,7 +238,7 @@ void test_multiple_groups() {
238238
{KM_KBP_IT_END}
239239
}));
240240

241-
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_2, 0, 1, 0));
241+
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_2, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT));
242242
assert(debug_items(test_state, {
243243
km_kbp_state_debug_item{KM_KBP_DEBUG_BEGIN, KM_KBP_DEBUG_FLAG_UNICODE, {KM_KBP_VKEY_2, 0, '2'}},
244244
km_kbp_state_debug_item{KM_KBP_DEBUG_GROUP_ENTER, 0, {}, {u"", &gp}},
@@ -287,7 +287,7 @@ void test_store_offsets() {
287287

288288
// 'ab' -> 'ex'
289289

290-
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_A, 0, 1, 0));
290+
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_A, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT));
291291
assert(debug_items(test_state, {
292292
km_kbp_state_debug_item{KM_KBP_DEBUG_BEGIN, KM_KBP_DEBUG_FLAG_UNICODE, {KM_KBP_VKEY_A, 0, 'a'}},
293293
km_kbp_state_debug_item{KM_KBP_DEBUG_GROUP_ENTER, 0, {}, {u"", &gp}},
@@ -307,7 +307,7 @@ void test_store_offsets() {
307307
{KM_KBP_IT_END}
308308
}));
309309

310-
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_B, 0, 1, 0));
310+
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_B, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT));
311311
assert(debug_items(test_state, {
312312
km_kbp_state_debug_item{KM_KBP_DEBUG_BEGIN, KM_KBP_DEBUG_FLAG_UNICODE, {KM_KBP_VKEY_B, 0, 'b'}},
313313
km_kbp_state_debug_item{KM_KBP_DEBUG_GROUP_ENTER, 0, {}, {u"", &gp}},
@@ -361,7 +361,7 @@ void test_set_option() {
361361

362362
// '1' -> set_option
363363

364-
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_1, 0, 1, 0));
364+
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_1, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT));
365365
assert(debug_items(test_state, {
366366
km_kbp_state_debug_item{KM_KBP_DEBUG_BEGIN, KM_KBP_DEBUG_FLAG_UNICODE, {KM_KBP_VKEY_1, 0, '1'}},
367367
km_kbp_state_debug_item{KM_KBP_DEBUG_GROUP_ENTER, 0, {}, {u"", &gp}},

core/tests/unit/kmnkbd/state_api.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -156,20 +156,20 @@ int main(int argc, char * argv[])
156156
DISABLE_WARNING_POP
157157

158158
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_S,
159-
KM_KBP_MODIFIER_SHIFT, 1, 0));
159+
KM_KBP_MODIFIER_SHIFT, 1, KM_KBP_EVENT_FLAG_DEFAULT));
160160
assert(action_items(test_state, {{KM_KBP_IT_CHAR, {0,}, {km_kbp_usv('S')}}, {KM_KBP_IT_END}}));
161161
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_I,
162-
KM_KBP_MODIFIER_SHIFT, 1, 0));
162+
KM_KBP_MODIFIER_SHIFT, 1, KM_KBP_EVENT_FLAG_DEFAULT));
163163
assert(action_items(test_state, {{KM_KBP_IT_CHAR, {0,}, {km_kbp_usv('I')}}, {KM_KBP_IT_END}}));
164-
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_L, 0, 1, 0));
164+
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_L, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT));
165165
assert(action_items(test_state, {{KM_KBP_IT_CHAR, {0,}, {km_kbp_usv('l')}}, {KM_KBP_IT_END}}));
166166

167-
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_BKSP, 0, 1, 0));
167+
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_BKSP, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT));
168168
assert(action_items(test_state, {{KM_KBP_IT_BACK, {0,}, {0}}, {KM_KBP_IT_END}}));
169169
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_L,
170-
KM_KBP_MODIFIER_SHIFT, 1, 0));
170+
KM_KBP_MODIFIER_SHIFT, 1, KM_KBP_EVENT_FLAG_DEFAULT));
171171
assert(action_items(test_state, {{KM_KBP_IT_CHAR, {0,}, {km_kbp_usv('L')}}, {KM_KBP_IT_END}}));
172-
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_F2, 0, 1, 0));
172+
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_F2, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT));
173173
assert(action_items(test_state, {{KM_KBP_IT_PERSIST_OPT, {0,},
174174
{uintptr_t(&expected_persist_opt)}}, {KM_KBP_IT_END}}));
175175

core/tests/unit/kmx/kmx.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ run_test(const km::kbp::path &source, const km::kbp::path &compiled) {
218218
}
219219

220220
for (auto key_down = 1; key_down >= 0; key_down--) {
221-
try_status(km_kbp_process_event(test_state, p.vk, p.modifier_state | test_source.caps_lock_state(), key_down, 0));
221+
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));
222222

223223
for (auto act = km_kbp_state_action_items(test_state, nullptr); act->type != KM_KBP_IT_END; act++) {
224224
apply_action(test_state, *act, text_store, test_context, options, test_source);

core/tests/unit/kmx/kmx_imx.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -214,26 +214,26 @@ void test_queue_actions (const km::kbp::path &source_keyboard) {
214214
km_kbp_state_imx_register_callback(test_state, test_imx_callback, (void*)&g_extract_imx_map);
215215

216216
// Key Press that doesn't trigger a call back
217-
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_S,KM_KBP_MODIFIER_SHIFT, 1, 0));
217+
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_S,KM_KBP_MODIFIER_SHIFT, 1, KM_KBP_EVENT_FLAG_DEFAULT));
218218
assert(action_items(test_state, {{KM_KBP_IT_CHAR, {0,}, {km_kbp_usv('S')}}, {KM_KBP_IT_END}}));
219219

220-
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_BKSP, 0, 1, 0));
220+
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_BKSP, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT));
221221
assert(action_items(test_state, {{KM_KBP_IT_CHAR, {0,}, {km_kbp_usv('X')}}, {KM_KBP_IT_ALERT, {0,}, {0}}, {KM_KBP_IT_END}}));
222222

223-
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_ESC, 0, 1, 0));
223+
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_ESC, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT));
224224
assert(action_items(test_state, { {KM_KBP_IT_CHAR, {0,}, {km_kbp_usv('Y')}},
225225
{KM_KBP_IT_MARKER, {0,}, {1}},
226226
{KM_KBP_IT_CHAR, {0,}, {km_kbp_usv('A')}},
227227
{KM_KBP_IT_END}}));
228228

229-
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_1, 0, 1, 0));
229+
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_1, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT));
230230

231231
km_kbp_action_item bksp_a = {KM_KBP_IT_BACK};
232232
bksp_a.backspace.expected_type = KM_KBP_BT_CHAR;
233233
bksp_a.backspace.expected_value = 'A';
234234
assert(action_items(test_state, {bksp_a,{KM_KBP_IT_CHAR, {0,}, {km_kbp_usv('Z')}}, {KM_KBP_IT_END}}));
235235

236-
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_2, 0, 1, 0));
236+
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_2, 0, 1, KM_KBP_EVENT_FLAG_DEFAULT));
237237
assert(action_items(test_state, {{KM_KBP_IT_INVALIDATE_CONTEXT, {0,}, {0}}, {KM_KBP_IT_END}}));
238238

239239
km_kbp_state_imx_deregister_callback(test_state);

core/tests/unit/ldml/ldml.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ run_test(const km::kbp::path &source, const km::kbp::path &compiled) {
190190
}
191191

192192
for (auto key_down = 1; key_down >= 0; key_down--) {
193-
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.
193+
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.
194194

195195
for (auto act = km_kbp_state_action_items(test_state, nullptr); act->type != KM_KBP_IT_END; act++) {
196196
apply_action(test_state, *act, text_store, test_context, test_source);

developer/src/tike/child/UfrmDebug.pas

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -462,7 +462,7 @@ function TfrmDebug.ProcessKeyEvent(var Message: TMessage): Boolean;
462462
if not SetKeyEventContext then
463463
Exit(False);
464464

465-
if km_kbp_process_event(FDebugCore.State, Message.WParam, modifier, 1) = KM_KBP_STATUS_OK then
465+
if km_kbp_process_event(FDebugCore.State, Message.WParam, modifier, 1, KM_KBP_EVENT_FLAG_DEFAULT) = KM_KBP_STATUS_OK then
466466
begin
467467
// Process keystroke
468468
Result := True;

developer/src/tike/main/Keyman.System.KeymanCore.pas

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,9 +307,14 @@ function
307307
state: pkm_kbp_state;
308308
vk: km_kbp_virtual_key;
309309
modifier_state: uint16_t;
310-
is_key_down: uint8_t
310+
is_key_down: uint8_t;
311+
event_flags: uint16_t;
311312
): km_kbp_status; cdecl; external kmnkbp0 delayed;
312313

314+
const
315+
KM_KBP_EVENT_FLAG_DEFAULT = 0; // default value: hardware
316+
KM_KBP_EVENT_FLAG_TOUCH = 1; // set if the event is touch, otherwise hardware
317+
313318

314319
// keyboardprocessor_vkeys.h
315320

0 commit comments

Comments
 (0)