112 g_autoptr(FlKeyEmbedderResponder) responder =
116 g_ptr_array_new_with_free_func(g_object_unref);
130 static_cast<GdkModifierType
>(0), 0);
131 g_autoptr(GMainLoop) loop1 = g_main_loop_new(
nullptr, 0);
133 responder, event1, 0,
nullptr,
134 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
137 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
138 EXPECT_EQ(handled,
TRUE);
140 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
144 EXPECT_EQ(call_records->len, 1u);
145 FlKeyEmbedderCallRecord* record =
146 FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
148 EXPECT_EQ(record->event->timestamp, 12345000);
150 EXPECT_EQ(record->event->physical, kPhysicalKeyA);
151 EXPECT_EQ(record->event->logical, kLogicalKeyA);
152 EXPECT_STREQ(record->event->character,
"a");
153 EXPECT_EQ(record->event->synthesized,
false);
156 g_main_loop_run(loop1);
162 static_cast<GdkModifierType
>(0), 0);
163 g_autoptr(GMainLoop) loop2 = g_main_loop_new(
nullptr, 0);
165 responder, event2, 0,
nullptr,
166 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
169 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
170 EXPECT_EQ(handled, FALSE);
172 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
176 EXPECT_EQ(call_records->len, 1u);
177 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
179 EXPECT_EQ(record->event->timestamp, 12346000);
181 EXPECT_EQ(record->event->physical, kPhysicalKeyA);
182 EXPECT_EQ(record->event->logical, kLogicalKeyA);
183 EXPECT_STREQ(record->event->character,
nullptr);
184 EXPECT_EQ(record->event->synthesized,
false);
187 g_main_loop_run(loop2);
194 static_cast<GdkModifierType
>(0), 0);
195 g_autoptr(GMainLoop) loop3 = g_main_loop_new(
nullptr, 0);
197 responder, event3, 0,
nullptr,
198 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
201 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
202 EXPECT_EQ(handled,
TRUE);
204 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
208 EXPECT_EQ(call_records->len, 1u);
209 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
211 EXPECT_EQ(record->event->timestamp, 12347000);
213 EXPECT_EQ(record->event->physical, kPhysicalKeyA);
214 EXPECT_EQ(record->event->logical, kLogicalKeyQ);
215 EXPECT_STREQ(record->event->character,
"q");
216 EXPECT_EQ(record->event->synthesized,
false);
219 g_main_loop_run(loop3);
225 static_cast<GdkModifierType
>(0), 0);
226 g_autoptr(GMainLoop) loop4 = g_main_loop_new(
nullptr, 0);
228 responder, event4, 0,
nullptr,
229 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
232 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
233 EXPECT_EQ(handled, FALSE);
235 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
239 EXPECT_EQ(call_records->len, 1u);
240 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
242 EXPECT_EQ(record->event->timestamp, 12348000);
244 EXPECT_EQ(record->event->physical, kPhysicalKeyA);
245 EXPECT_EQ(record->event->logical, kLogicalKeyQ);
246 EXPECT_STREQ(record->event->character,
nullptr);
247 EXPECT_EQ(record->event->synthesized,
false);
250 g_main_loop_run(loop4);
257 g_autoptr(FlKeyEmbedderResponder) responder =
261 g_ptr_array_new_with_free_func(g_object_unref);
275 static_cast<GdkModifierType
>(0), 0);
276 g_autoptr(GMainLoop) loop = g_main_loop_new(
nullptr, 0);
278 responder, event, kLogicalDigit1,
nullptr,
279 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
282 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
283 EXPECT_EQ(handled,
TRUE);
285 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
289 EXPECT_EQ(call_records->len, 1u);
290 FlKeyEmbedderCallRecord* record =
291 FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
293 EXPECT_EQ(record->event->timestamp, 12345000);
295 EXPECT_EQ(record->event->physical, kPhysicalDigit1);
296 EXPECT_EQ(record->event->logical, kLogicalDigit1);
297 EXPECT_STREQ(record->event->character,
"&");
298 EXPECT_EQ(record->event->synthesized,
false);
301 g_main_loop_run(loop);
308 g_autoptr(FlKeyEmbedderResponder) responder =
312 g_ptr_array_new_with_free_func(g_object_unref);
325 static_cast<GdkModifierType
>(0), 0);
326 g_autoptr(GMainLoop) loop1 = g_main_loop_new(
nullptr, 0);
328 responder, event1, 0,
nullptr,
329 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
332 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
333 EXPECT_EQ(handled,
TRUE);
335 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
339 EXPECT_EQ(call_records->len, 1u);
340 FlKeyEmbedderCallRecord* record =
341 FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
343 EXPECT_EQ(record->event->physical, kPhysicalShiftRight);
344 EXPECT_EQ(record->event->logical, kLogicalShiftRight);
345 EXPECT_STREQ(record->event->character,
nullptr);
346 EXPECT_EQ(record->event->synthesized,
false);
349 g_main_loop_run(loop1);
355 g_autoptr(GMainLoop) loop2 = g_main_loop_new(
nullptr, 0);
357 responder, event2, 0,
nullptr,
358 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
361 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
362 EXPECT_EQ(handled,
TRUE);
364 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
368 EXPECT_EQ(call_records->len, 1u);
369 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
371 EXPECT_EQ(record->event->physical, kPhysicalKeyA);
372 EXPECT_EQ(record->event->logical, kLogicalKeyA);
373 EXPECT_STREQ(record->event->character,
"A");
374 EXPECT_EQ(record->event->synthesized,
false);
377 g_main_loop_run(loop2);
382 103, kRelease, kKeyCodeShiftRight, GDK_KEY_Shift_R, GDK_SHIFT_MASK, 0);
383 g_autoptr(GMainLoop) loop3 = g_main_loop_new(
nullptr, 0);
385 responder, event3, 0,
nullptr,
386 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
389 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
390 EXPECT_EQ(handled,
TRUE);
392 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
396 EXPECT_EQ(call_records->len, 1u);
397 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
399 EXPECT_EQ(record->event->physical, kPhysicalShiftRight);
400 EXPECT_EQ(record->event->logical, kLogicalShiftRight);
401 EXPECT_STREQ(record->event->character,
nullptr);
402 EXPECT_EQ(record->event->synthesized,
false);
405 g_main_loop_run(loop3);
411 static_cast<GdkModifierType
>(0), 0);
412 g_autoptr(GMainLoop) loop4 = g_main_loop_new(
nullptr, 0);
414 responder, event4, 0,
nullptr,
415 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
418 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
419 EXPECT_EQ(handled,
TRUE);
421 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
425 EXPECT_EQ(call_records->len, 1u);
426 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
428 EXPECT_EQ(record->event->physical, kPhysicalKeyA);
429 EXPECT_EQ(record->event->logical, kLogicalKeyA);
430 EXPECT_STREQ(record->event->character,
nullptr);
431 EXPECT_EQ(record->event->synthesized,
false);
434 g_main_loop_run(loop4);
448 g_autoptr(FlKeyEmbedderResponder) responder =
452 g_ptr_array_new_with_free_func(g_object_unref);
465 static_cast<GdkModifierType
>(0), 0);
466 g_autoptr(GMainLoop) loop1 = g_main_loop_new(
nullptr, 0);
468 responder, event1, 0,
nullptr,
469 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
472 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
473 EXPECT_EQ(handled,
TRUE);
475 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
479 EXPECT_EQ(call_records->len, 1u);
480 FlKeyEmbedderCallRecord* record =
481 FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
483 EXPECT_EQ(record->event->physical, kPhysicalNumpad1);
484 EXPECT_EQ(record->event->logical, kLogicalNumpad1);
485 EXPECT_STREQ(record->event->character,
nullptr);
486 EXPECT_EQ(record->event->synthesized,
false);
489 g_main_loop_run(loop1);
495 static_cast<GdkModifierType
>(0), 0);
496 g_autoptr(GMainLoop) loop2 = g_main_loop_new(
nullptr, 0);
498 responder, event2, 0,
nullptr,
499 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
502 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
503 EXPECT_EQ(handled,
TRUE);
505 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
509 EXPECT_EQ(call_records->len, 1u);
510 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
512 EXPECT_EQ(record->event->physical, kPhysicalNumLock);
513 EXPECT_EQ(record->event->logical, kLogicalNumLock);
514 EXPECT_STREQ(record->event->character,
nullptr);
515 EXPECT_EQ(record->event->synthesized,
false);
518 g_main_loop_run(loop2);
523 104, kRelease, kKeyCodeNumpad1, GDK_KEY_KP_1, GDK_MOD2_MASK, 0);
524 g_autoptr(GMainLoop) loop3 = g_main_loop_new(
nullptr, 0);
526 responder, event3, 0,
nullptr,
527 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
530 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
531 EXPECT_EQ(handled,
TRUE);
533 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
537 EXPECT_EQ(call_records->len, 1u);
538 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
540 EXPECT_EQ(record->event->physical, kPhysicalNumpad1);
541 EXPECT_EQ(record->event->logical, kLogicalNumpad1);
542 EXPECT_STREQ(record->event->character,
nullptr);
543 EXPECT_EQ(record->event->synthesized,
false);
546 g_main_loop_run(loop3);
551 103, kRelease, kKeyCodeNumLock, GDK_KEY_Num_Lock, GDK_MOD2_MASK, 0);
552 g_autoptr(GMainLoop) loop4 = g_main_loop_new(
nullptr, 0);
554 responder, event4, 0,
nullptr,
555 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
558 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
559 EXPECT_EQ(handled,
TRUE);
561 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
565 EXPECT_EQ(call_records->len, 1u);
566 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
568 EXPECT_EQ(record->event->physical, kPhysicalNumLock);
569 EXPECT_EQ(record->event->logical, kLogicalNumLock);
570 EXPECT_STREQ(record->event->character,
nullptr);
571 EXPECT_EQ(record->event->synthesized,
false);
574 g_main_loop_run(loop4);
579 101, kPress, kKeyCodeNumpad1, GDK_KEY_KP_End, GDK_MOD2_MASK, 0);
580 g_autoptr(GMainLoop) loop5 = g_main_loop_new(
nullptr, 0);
582 responder, event5, 0,
nullptr,
583 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
586 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
587 EXPECT_EQ(handled,
TRUE);
589 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
593 EXPECT_EQ(call_records->len, 1u);
594 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
596 EXPECT_EQ(record->event->physical, kPhysicalNumpad1);
597 EXPECT_EQ(record->event->logical, kLogicalNumpad1);
598 EXPECT_STREQ(record->event->character,
nullptr);
599 EXPECT_EQ(record->event->synthesized,
false);
602 g_main_loop_run(loop5);
607 102, kPress, kKeyCodeNumLock, GDK_KEY_Num_Lock, GDK_MOD2_MASK, 0);
608 g_autoptr(GMainLoop) loop6 = g_main_loop_new(
nullptr, 0);
610 responder, event6, 0,
nullptr,
611 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
614 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
615 EXPECT_EQ(handled,
TRUE);
617 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
621 EXPECT_EQ(call_records->len, 1u);
622 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
624 EXPECT_EQ(record->event->physical, kPhysicalNumLock);
625 EXPECT_EQ(record->event->logical, kLogicalNumLock);
626 EXPECT_STREQ(record->event->character,
nullptr);
627 EXPECT_EQ(record->event->synthesized,
false);
630 g_main_loop_run(loop6);
635 104, kRelease, kKeyCodeNumpad1, GDK_KEY_KP_1, GDK_MOD2_MASK, 0);
636 g_autoptr(GMainLoop) loop7 = g_main_loop_new(
nullptr, 0);
638 responder, event7, 0,
nullptr,
639 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
642 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
643 EXPECT_EQ(handled,
TRUE);
645 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
649 EXPECT_EQ(call_records->len, 1u);
650 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
652 EXPECT_EQ(record->event->physical, kPhysicalNumpad1);
653 EXPECT_EQ(record->event->logical, kLogicalNumpad1);
654 EXPECT_STREQ(record->event->character,
nullptr);
655 EXPECT_EQ(record->event->synthesized,
false);
658 g_main_loop_run(loop7);
663 103, kRelease, kKeyCodeNumLock, GDK_KEY_Num_Lock, GDK_MOD2_MASK, 0);
664 g_autoptr(GMainLoop) loop8 = g_main_loop_new(
nullptr, 0);
666 responder, event8, 0,
nullptr,
667 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
670 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
671 EXPECT_EQ(handled,
TRUE);
673 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
677 EXPECT_EQ(call_records->len, 1u);
678 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
680 EXPECT_EQ(record->event->physical, kPhysicalNumLock);
681 EXPECT_EQ(record->event->logical, kLogicalNumLock);
682 EXPECT_STREQ(record->event->character,
nullptr);
683 EXPECT_EQ(record->event->synthesized,
false);
686 g_main_loop_run(loop8);
696 g_autoptr(FlKeyEmbedderResponder) responder =
700 g_ptr_array_new_with_free_func(g_object_unref);
710 GdkModifierType state =
static_cast<GdkModifierType
>(0);
714 101, kPress, kKeyCodeShiftLeft, GDK_KEY_Shift_L, state, 0);
715 g_autoptr(GMainLoop) loop1 = g_main_loop_new(
nullptr, 0);
717 responder, event1, 0,
nullptr,
718 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
721 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
722 EXPECT_EQ(handled,
TRUE);
724 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
728 EXPECT_EQ(call_records->len, 1u);
729 FlKeyEmbedderCallRecord* record =
730 FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
732 EXPECT_EQ(record->event->physical, kPhysicalShiftLeft);
733 EXPECT_EQ(record->event->logical, kLogicalShiftLeft);
734 EXPECT_STREQ(record->event->character,
nullptr);
735 EXPECT_EQ(record->event->synthesized,
false);
738 g_main_loop_run(loop1);
741 state = GDK_SHIFT_MASK;
746 g_autoptr(GMainLoop) loop2 = g_main_loop_new(
nullptr, 0);
748 responder, event2, 0,
nullptr,
749 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
752 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
753 EXPECT_EQ(handled,
TRUE);
755 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
759 EXPECT_EQ(call_records->len, 1u);
760 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
762 EXPECT_EQ(record->event->physical, kPhysicalDigit1);
763 EXPECT_EQ(record->event->logical, kLogicalExclamation);
764 EXPECT_STREQ(record->event->character,
"!");
765 EXPECT_EQ(record->event->synthesized,
false);
768 g_main_loop_run(loop2);
773 103, kRelease, kKeyCodeShiftLeft, GDK_KEY_Shift_L, state, 0);
774 g_autoptr(GMainLoop) loop3 = g_main_loop_new(
nullptr, 0);
776 responder, event3, 0,
nullptr,
777 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
780 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
781 EXPECT_EQ(handled,
TRUE);
783 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
787 EXPECT_EQ(call_records->len, 1u);
788 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
790 EXPECT_EQ(record->event->physical, kPhysicalShiftLeft);
791 EXPECT_EQ(record->event->logical, kLogicalShiftLeft);
792 EXPECT_STREQ(record->event->character,
nullptr);
793 EXPECT_EQ(record->event->synthesized,
false);
796 g_main_loop_run(loop3);
799 state =
static_cast<GdkModifierType
>(0);
804 g_autoptr(GMainLoop) loop4 = g_main_loop_new(
nullptr, 0);
806 responder, event4, 0,
nullptr,
807 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
810 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
811 EXPECT_EQ(handled,
TRUE);
813 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
817 EXPECT_EQ(call_records->len, 1u);
818 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
820 EXPECT_EQ(record->event->physical, kPhysicalDigit1);
821 EXPECT_EQ(record->event->logical, kLogicalExclamation);
822 EXPECT_STREQ(record->event->character,
nullptr);
823 EXPECT_EQ(record->event->synthesized,
false);
826 g_main_loop_run(loop4);
836 g_autoptr(FlKeyEmbedderResponder) responder =
840 g_ptr_array_new_with_free_func(g_object_unref);
853 static_cast<GdkModifierType
>(0), 0);
854 g_autoptr(GMainLoop) loop1 = g_main_loop_new(
nullptr, 0);
856 responder, event1, 0,
nullptr,
857 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
860 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
861 EXPECT_EQ(handled,
TRUE);
863 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
867 EXPECT_EQ(call_records->len, 1u);
868 FlKeyEmbedderCallRecord* record =
869 FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
871 EXPECT_EQ(record->event->physical, kPhysicalCapsLock);
872 EXPECT_EQ(record->event->logical, kLogicalCapsLock);
873 EXPECT_STREQ(record->event->character,
nullptr);
874 EXPECT_EQ(record->event->synthesized,
false);
877 g_main_loop_run(loop1);
883 g_autoptr(GMainLoop) loop2 = g_main_loop_new(
nullptr, 0);
885 responder, event2, 0,
nullptr,
886 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
889 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
890 EXPECT_EQ(handled,
TRUE);
892 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
896 EXPECT_EQ(call_records->len, 1u);
897 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
899 EXPECT_EQ(record->event->physical, kPhysicalKeyA);
900 EXPECT_EQ(record->event->logical, kLogicalKeyA);
901 EXPECT_STREQ(record->event->character,
"A");
902 EXPECT_EQ(record->event->synthesized,
false);
905 g_main_loop_run(loop2);
910 103, kRelease, kKeyCodeCapsLock, GDK_KEY_Caps_Lock, GDK_LOCK_MASK, 0);
911 g_autoptr(GMainLoop) loop3 = g_main_loop_new(
nullptr, 0);
913 responder, event3, 0,
nullptr,
914 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
917 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
918 EXPECT_EQ(handled,
TRUE);
920 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
924 EXPECT_EQ(call_records->len, 1u);
925 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
927 EXPECT_EQ(record->event->physical, kPhysicalCapsLock);
928 EXPECT_EQ(record->event->logical, kLogicalCapsLock);
929 EXPECT_STREQ(record->event->character,
nullptr);
930 EXPECT_EQ(record->event->synthesized,
false);
933 g_main_loop_run(loop3);
938 GDK_KEY_A, GDK_LOCK_MASK, 0);
939 g_autoptr(GMainLoop) loop4 = g_main_loop_new(
nullptr, 0);
941 responder, event4, 0,
nullptr,
942 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
945 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
946 EXPECT_EQ(handled,
TRUE);
948 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
952 EXPECT_EQ(call_records->len, 1u);
953 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
955 EXPECT_EQ(record->event->physical, kPhysicalKeyA);
956 EXPECT_EQ(record->event->logical, kLogicalKeyA);
957 EXPECT_STREQ(record->event->character,
nullptr);
958 EXPECT_EQ(record->event->synthesized,
false);
961 g_main_loop_run(loop4);
966 105, kPress, kKeyCodeCapsLock, GDK_KEY_Caps_Lock, GDK_LOCK_MASK, 0);
967 g_autoptr(GMainLoop) loop5 = g_main_loop_new(
nullptr, 0);
969 responder, event5, 0,
nullptr,
970 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
973 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
974 EXPECT_EQ(handled,
TRUE);
976 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
980 EXPECT_EQ(call_records->len, 1u);
981 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
983 EXPECT_EQ(record->event->physical, kPhysicalCapsLock);
984 EXPECT_EQ(record->event->logical, kLogicalCapsLock);
985 EXPECT_STREQ(record->event->character,
nullptr);
986 EXPECT_EQ(record->event->synthesized,
false);
989 g_main_loop_run(loop5);
995 g_autoptr(GMainLoop) loop6 = g_main_loop_new(
nullptr, 0);
997 responder, event6, 0,
nullptr,
998 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1001 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1002 EXPECT_EQ(handled,
TRUE);
1004 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1008 EXPECT_EQ(call_records->len, 1u);
1009 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1011 EXPECT_EQ(record->event->physical, kPhysicalKeyA);
1012 EXPECT_EQ(record->event->logical, kLogicalKeyA);
1013 EXPECT_STREQ(record->event->character,
"A");
1014 EXPECT_EQ(record->event->synthesized,
false);
1017 g_main_loop_run(loop6);
1022 107, kRelease, kKeyCodeCapsLock, GDK_KEY_Caps_Lock, GDK_LOCK_MASK, 0);
1023 g_autoptr(GMainLoop) loop7 = g_main_loop_new(
nullptr, 0);
1025 responder, event7, 0,
nullptr,
1026 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1029 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1030 EXPECT_EQ(handled,
TRUE);
1032 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1036 EXPECT_EQ(call_records->len, 1u);
1037 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1039 EXPECT_EQ(record->event->physical, kPhysicalCapsLock);
1040 EXPECT_EQ(record->event->logical, kLogicalCapsLock);
1041 EXPECT_STREQ(record->event->character,
nullptr);
1042 EXPECT_EQ(record->event->synthesized,
false);
1045 g_main_loop_run(loop7);
1051 static_cast<GdkModifierType
>(0), 0);
1052 g_autoptr(GMainLoop) loop8 = g_main_loop_new(
nullptr, 0);
1054 responder, event8, 0,
nullptr,
1055 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1058 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1059 EXPECT_EQ(handled,
TRUE);
1061 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1065 EXPECT_EQ(call_records->len, 1u);
1066 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1068 EXPECT_EQ(record->event->physical, kPhysicalKeyA);
1069 EXPECT_EQ(record->event->logical, kLogicalKeyA);
1070 EXPECT_STREQ(record->event->character,
nullptr);
1071 EXPECT_EQ(record->event->synthesized,
false);
1074 g_main_loop_run(loop8);
1084 g_autoptr(FlKeyEmbedderResponder) responder =
1088 g_ptr_array_new_with_free_func(g_object_unref);
1100 101, kPress,
kKeyCodeKeyA, GDK_KEY_a,
static_cast<GdkModifierType
>(0), 0);
1101 g_autoptr(GMainLoop) loop1 = g_main_loop_new(
nullptr, 0);
1103 responder, event1, 0,
nullptr,
1104 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1107 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1108 EXPECT_EQ(handled,
TRUE);
1110 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1114 EXPECT_EQ(call_records->len, 1u);
1115 FlKeyEmbedderCallRecord* record =
1116 FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1118 EXPECT_EQ(record->event->physical, kPhysicalKeyA);
1119 EXPECT_EQ(record->event->logical, kLogicalKeyA);
1120 EXPECT_STREQ(record->event->character,
"a");
1121 EXPECT_EQ(record->event->synthesized,
false);
1124 g_main_loop_run(loop1);
1129 102, kPress, kKeyCodeCapsLock, GDK_KEY_Caps_Lock, GDK_LOCK_MASK, 0);
1130 g_autoptr(GMainLoop) loop2 = g_main_loop_new(
nullptr, 0);
1132 responder, event2, 0,
nullptr,
1133 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1136 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1137 EXPECT_EQ(handled,
TRUE);
1139 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1143 EXPECT_EQ(call_records->len, 1u);
1144 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1146 EXPECT_EQ(record->event->physical, kPhysicalCapsLock);
1147 EXPECT_EQ(record->event->logical, kLogicalCapsLock);
1148 EXPECT_STREQ(record->event->character,
nullptr);
1149 EXPECT_EQ(record->event->synthesized,
false);
1152 g_main_loop_run(loop2);
1157 103, kRelease, kKeyCodeCapsLock, GDK_KEY_Caps_Lock, GDK_LOCK_MASK, 0);
1158 g_autoptr(GMainLoop) loop3 = g_main_loop_new(
nullptr, 0);
1160 responder, event3, 0,
nullptr,
1161 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1164 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1165 EXPECT_EQ(handled,
TRUE);
1167 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1171 EXPECT_EQ(call_records->len, 1u);
1172 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1174 EXPECT_EQ(record->event->physical, kPhysicalCapsLock);
1175 EXPECT_EQ(record->event->logical, kLogicalCapsLock);
1176 EXPECT_STREQ(record->event->character,
nullptr);
1177 EXPECT_EQ(record->event->synthesized,
false);
1180 g_main_loop_run(loop3);
1185 GDK_KEY_A, GDK_LOCK_MASK, 0);
1186 g_autoptr(GMainLoop) loop4 = g_main_loop_new(
nullptr, 0);
1188 responder, event4, 0,
nullptr,
1189 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1192 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1193 EXPECT_EQ(handled,
TRUE);
1195 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1199 EXPECT_EQ(call_records->len, 1u);
1200 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1202 EXPECT_EQ(record->event->physical, kPhysicalKeyA);
1203 EXPECT_EQ(record->event->logical, kLogicalKeyA);
1204 EXPECT_STREQ(record->event->character,
nullptr);
1205 EXPECT_EQ(record->event->synthesized,
false);
1208 g_main_loop_run(loop4);
1214 g_autoptr(GMainLoop) loop5 = g_main_loop_new(
nullptr, 0);
1216 responder, event5, 0,
nullptr,
1217 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1220 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1221 EXPECT_EQ(handled,
TRUE);
1223 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1227 EXPECT_EQ(call_records->len, 1u);
1228 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1230 EXPECT_EQ(record->event->physical, kPhysicalKeyA);
1231 EXPECT_EQ(record->event->logical, kLogicalKeyA);
1232 EXPECT_STREQ(record->event->character,
"A");
1233 EXPECT_EQ(record->event->synthesized,
false);
1236 g_main_loop_run(loop5);
1242 static_cast<GdkModifierType
>(0), 0);
1243 g_autoptr(GMainLoop) loop6 = g_main_loop_new(
nullptr, 0);
1245 responder, event6, 0,
nullptr,
1246 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1249 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1250 EXPECT_EQ(handled,
TRUE);
1252 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1256 EXPECT_EQ(call_records->len, 1u);
1257 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1259 EXPECT_EQ(record->event->physical, kPhysicalCapsLock);
1260 EXPECT_EQ(record->event->logical, kLogicalCapsLock);
1261 EXPECT_STREQ(record->event->character,
nullptr);
1262 EXPECT_EQ(record->event->synthesized,
false);
1265 g_main_loop_run(loop6);
1270 107, kRelease, kKeyCodeCapsLock, GDK_KEY_Caps_Lock, GDK_LOCK_MASK, 0);
1271 g_autoptr(GMainLoop) loop7 = g_main_loop_new(
nullptr, 0);
1273 responder, event7, 0,
nullptr,
1274 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1277 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1278 EXPECT_EQ(handled,
TRUE);
1280 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1284 EXPECT_EQ(call_records->len, 1u);
1285 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1287 EXPECT_EQ(record->event->physical, kPhysicalCapsLock);
1288 EXPECT_EQ(record->event->logical, kLogicalCapsLock);
1289 EXPECT_STREQ(record->event->character,
nullptr);
1290 EXPECT_EQ(record->event->synthesized,
false);
1293 g_main_loop_run(loop7);
1299 static_cast<GdkModifierType
>(0), 0);
1300 g_autoptr(GMainLoop) loop8 = g_main_loop_new(
nullptr, 0);
1302 responder, event8, 0,
nullptr,
1303 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1306 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1307 EXPECT_EQ(handled,
TRUE);
1309 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1313 EXPECT_EQ(call_records->len, 1u);
1314 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1316 EXPECT_EQ(record->event->physical, kPhysicalKeyA);
1317 EXPECT_EQ(record->event->logical, kLogicalKeyA);
1318 EXPECT_STREQ(record->event->character,
nullptr);
1319 EXPECT_EQ(record->event->synthesized,
false);
1322 g_main_loop_run(loop8);
1328 g_autoptr(FlKeyEmbedderResponder) responder =
1332 g_ptr_array_new_with_free_func(g_object_unref);
1344 101, kPress,
kKeyCodeKeyA, GDK_KEY_a,
static_cast<GdkModifierType
>(0), 0);
1345 g_autoptr(GMainLoop) loop1 = g_main_loop_new(
nullptr, 0);
1347 responder, event1, 0,
nullptr,
1348 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1351 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1352 EXPECT_EQ(handled,
TRUE);
1354 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1358 EXPECT_EQ(call_records->len, 1u);
1360 FlKeyEmbedderCallRecord* record =
1361 FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1363 g_main_loop_run(loop1);
1368 102, kPress,
kKeyCodeKeyA, GDK_KEY_a,
static_cast<GdkModifierType
>(0), 0);
1369 g_autoptr(GMainLoop) loop2 = g_main_loop_new(
nullptr, 0);
1371 responder, event2, 0,
nullptr,
1372 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1375 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1376 EXPECT_EQ(handled,
TRUE);
1378 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1382 EXPECT_EQ(call_records->len, 1u);
1384 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1386 EXPECT_EQ(record->event->physical, kPhysicalKeyA);
1387 EXPECT_EQ(record->event->logical, kLogicalKeyA);
1388 EXPECT_STREQ(record->event->character,
"a");
1389 EXPECT_EQ(record->event->synthesized,
false);
1390 EXPECT_NE(record->callback,
nullptr);
1393 g_main_loop_run(loop2);
1399 static_cast<GdkModifierType
>(0), 0);
1400 g_autoptr(GMainLoop) loop3 = g_main_loop_new(
nullptr, 0);
1402 responder, event3, 0,
nullptr,
1403 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1406 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1407 EXPECT_EQ(handled,
TRUE);
1409 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1413 EXPECT_EQ(call_records->len, 1u);
1414 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1416 g_main_loop_run(loop3);
1469 SynthesizeForDesyncPressingStateOnSelfEvents) {
1472 g_autoptr(FlKeyEmbedderResponder) responder =
1476 g_ptr_array_new_with_free_func(g_object_unref);
1489 GdkModifierType state = GDK_CONTROL_MASK;
1493 101, kRelease, kKeyCodeControlLeft, GDK_KEY_Control_L, state, 0);
1494 g_autoptr(GMainLoop) loop1 = g_main_loop_new(
nullptr, 0);
1496 responder, event1, 0,
nullptr,
1497 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1500 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1501 EXPECT_EQ(handled,
TRUE);
1503 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1507 EXPECT_EQ(call_records->len, 2u);
1508 FlKeyEmbedderCallRecord* record =
1509 FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1510 EXPECT_EQ(record->event->timestamp, 101000);
1512 EXPECT_EQ(record->event->physical, kPhysicalControlLeft);
1513 EXPECT_EQ(record->event->logical, kLogicalControlLeft);
1514 EXPECT_STREQ(record->event->character,
nullptr);
1515 EXPECT_EQ(record->event->synthesized,
true);
1517 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 1));
1518 EXPECT_EQ(record->event->timestamp, 101000);
1520 EXPECT_EQ(record->event->physical, kPhysicalControlLeft);
1521 EXPECT_EQ(record->event->logical, kLogicalControlLeft);
1522 EXPECT_STREQ(record->event->character,
nullptr);
1523 EXPECT_EQ(record->event->synthesized,
false);
1526 g_main_loop_run(loop1);
1532 state =
static_cast<GdkModifierType
>(0);
1534 102, kPress, kKeyCodeControlLeft, GDK_KEY_Control_L, state, 0);
1535 g_autoptr(GMainLoop) loop2 = g_main_loop_new(
nullptr, 0);
1537 responder, event2, 0,
nullptr,
1538 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1541 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1542 EXPECT_EQ(handled,
TRUE);
1544 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1547 EXPECT_EQ(call_records->len, 1u);
1548 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1550 g_main_loop_run(loop2);
1554 state =
static_cast<GdkModifierType
>(0);
1558 103, kPress, kKeyCodeControlLeft, GDK_KEY_Control_L, state, 0);
1559 g_autoptr(GMainLoop) loop3 = g_main_loop_new(
nullptr, 0);
1561 responder, event3, 0,
nullptr,
1562 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1565 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1566 EXPECT_EQ(handled,
TRUE);
1568 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1572 EXPECT_EQ(call_records->len, 2u);
1573 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1574 EXPECT_EQ(record->event->timestamp, 103000);
1576 EXPECT_EQ(record->event->physical, kPhysicalControlLeft);
1577 EXPECT_EQ(record->event->logical, kLogicalControlLeft);
1578 EXPECT_STREQ(record->event->character,
nullptr);
1579 EXPECT_EQ(record->event->synthesized,
true);
1581 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 1));
1582 EXPECT_EQ(record->event->timestamp, 103000);
1584 EXPECT_EQ(record->event->physical, kPhysicalControlLeft);
1585 EXPECT_EQ(record->event->logical, kLogicalControlLeft);
1586 EXPECT_STREQ(record->event->character,
nullptr);
1587 EXPECT_EQ(record->event->synthesized,
false);
1590 g_main_loop_run(loop3);
1594 state = GDK_CONTROL_MASK;
1596 104, kRelease, kKeyCodeControlLeft, GDK_KEY_Control_L, state, 0);
1597 g_autoptr(GMainLoop) loop4 = g_main_loop_new(
nullptr, 0);
1599 responder, event4, 0,
nullptr,
1600 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1603 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1604 EXPECT_EQ(handled,
TRUE);
1606 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1609 EXPECT_EQ(call_records->len, 1u);
1610 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1612 g_main_loop_run(loop4);
1618 state = GDK_CONTROL_MASK;
1622 105, kRelease, kKeyCodeControlRight, GDK_KEY_Control_R, state, 0);
1623 g_autoptr(GMainLoop) loop5 = g_main_loop_new(
nullptr, 0);
1625 responder, event5, 0,
nullptr,
1626 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1629 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1630 EXPECT_EQ(handled,
TRUE);
1632 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1640 EXPECT_EQ(call_records->len, 1u);
1641 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1642 EXPECT_EQ(record->event->timestamp, 105000);
1644 EXPECT_EQ(record->event->physical, kPhysicalControlLeft);
1645 EXPECT_EQ(record->event->logical, kLogicalControlLeft);
1646 EXPECT_STREQ(record->event->character,
nullptr);
1647 EXPECT_EQ(record->event->synthesized,
true);
1650 g_main_loop_run(loop5);
1656 SynthesizeForDesyncPressingStateOnNonSelfEvents) {
1659 g_autoptr(FlKeyEmbedderResponder) responder =
1663 g_ptr_array_new_with_free_func(g_object_unref);
1674 GdkModifierType state = GDK_CONTROL_MASK;
1679 g_autoptr(GMainLoop) loop1 = g_main_loop_new(
nullptr, 0);
1681 responder, event1, 0,
nullptr,
1682 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1685 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1686 EXPECT_EQ(handled,
TRUE);
1688 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1692 EXPECT_EQ(call_records->len, 2u);
1693 FlKeyEmbedderCallRecord* record =
1694 FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1695 EXPECT_EQ(record->event->timestamp, 101000);
1697 EXPECT_EQ(record->event->physical, kPhysicalControlLeft);
1698 EXPECT_EQ(record->event->logical, kLogicalControlLeft);
1699 EXPECT_STREQ(record->event->character,
nullptr);
1700 EXPECT_EQ(record->event->synthesized,
true);
1702 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 1));
1703 EXPECT_EQ(record->event->timestamp, 101000);
1705 EXPECT_EQ(record->event->physical, kPhysicalKeyA);
1706 EXPECT_EQ(record->event->logical, kLogicalKeyA);
1707 EXPECT_STREQ(record->event->character,
"a");
1708 EXPECT_EQ(record->event->synthesized,
false);
1711 g_main_loop_run(loop1);
1715 state =
static_cast<GdkModifierType
>(0);
1720 g_autoptr(GMainLoop) loop2 = g_main_loop_new(
nullptr, 0);
1722 responder, event2, 0,
nullptr,
1723 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1726 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1727 EXPECT_EQ(handled,
TRUE);
1729 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1733 EXPECT_EQ(call_records->len, 2u);
1734 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1735 EXPECT_EQ(record->event->timestamp, 102000);
1737 EXPECT_EQ(record->event->physical, kPhysicalControlLeft);
1738 EXPECT_EQ(record->event->logical, kLogicalControlLeft);
1739 EXPECT_STREQ(record->event->character,
nullptr);
1740 EXPECT_EQ(record->event->synthesized,
true);
1742 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 1));
1743 EXPECT_EQ(record->event->timestamp, 102000);
1745 EXPECT_EQ(record->event->physical, kPhysicalKeyA);
1746 EXPECT_EQ(record->event->logical, kLogicalKeyA);
1747 EXPECT_STREQ(record->event->character,
nullptr);
1748 EXPECT_EQ(record->event->synthesized,
false);
1751 g_main_loop_run(loop2);
1757 state =
static_cast<GdkModifierType
>(0);
1760 GDK_KEY_Control_L, state, 0);
1761 g_autoptr(GMainLoop) loop3 = g_main_loop_new(
nullptr, 0);
1763 responder, event3, 0,
nullptr,
1764 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1767 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1768 EXPECT_EQ(handled,
TRUE);
1770 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1774 EXPECT_EQ(call_records->len, 1u);
1775 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1776 EXPECT_EQ(record->event->timestamp, 101000);
1778 EXPECT_EQ(record->event->physical, kPhysicalCapsLock);
1779 EXPECT_EQ(record->event->logical, kLogicalControlLeft);
1780 EXPECT_STREQ(record->event->character,
nullptr);
1781 EXPECT_EQ(record->event->synthesized,
false);
1784 g_main_loop_run(loop3);
1788 state =
static_cast<GdkModifierType
>(0);
1793 g_autoptr(GMainLoop) loop4 = g_main_loop_new(
nullptr, 0);
1795 responder, event4, 0,
nullptr,
1796 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1799 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1800 EXPECT_EQ(handled,
TRUE);
1802 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1808 EXPECT_EQ(call_records->len, 2u);
1809 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1810 EXPECT_EQ(record->event->timestamp, 102000);
1812 EXPECT_EQ(record->event->physical, kPhysicalCapsLock);
1813 EXPECT_EQ(record->event->logical, kLogicalControlLeft);
1814 EXPECT_STREQ(record->event->character,
nullptr);
1815 EXPECT_EQ(record->event->synthesized,
true);
1817 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 1));
1818 EXPECT_EQ(record->event->timestamp, 102000);
1820 EXPECT_EQ(record->event->physical, kPhysicalKeyA);
1821 EXPECT_EQ(record->event->logical, kLogicalKeyA);
1822 EXPECT_STREQ(record->event->character,
"A");
1823 EXPECT_EQ(record->event->synthesized,
false);
1826 g_main_loop_run(loop4);
1832 SynthesizeForDesyncPressingStateOnRemappedEvents) {
1835 g_autoptr(FlKeyEmbedderResponder) responder =
1839 g_ptr_array_new_with_free_func(g_object_unref);
1850 GdkModifierType state =
static_cast<GdkModifierType
>(0);
1853 GDK_KEY_Control_L, state, 0);
1854 g_autoptr(GMainLoop) loop1 = g_main_loop_new(
nullptr, 0);
1856 responder, event1, 0,
nullptr,
1857 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1860 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1861 EXPECT_EQ(handled,
TRUE);
1863 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1867 EXPECT_EQ(call_records->len, 1u);
1868 FlKeyEmbedderCallRecord* record =
1869 FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1870 EXPECT_EQ(record->event->timestamp, 101000);
1872 EXPECT_EQ(record->event->physical, kPhysicalCapsLock);
1873 EXPECT_EQ(record->event->logical, kLogicalControlLeft);
1874 EXPECT_STREQ(record->event->character,
nullptr);
1875 EXPECT_EQ(record->event->synthesized,
false);
1878 g_main_loop_run(loop1);
1882 state =
static_cast<GdkModifierType
>(0);
1887 g_autoptr(GMainLoop) loop2 = g_main_loop_new(
nullptr, 0);
1889 responder, event2, 0,
nullptr,
1890 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1893 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1894 EXPECT_EQ(handled,
TRUE);
1896 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1902 EXPECT_EQ(call_records->len, 2u);
1903 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1904 EXPECT_EQ(record->event->timestamp, 102000);
1906 EXPECT_EQ(record->event->physical, kPhysicalCapsLock);
1907 EXPECT_EQ(record->event->logical, kLogicalControlLeft);
1908 EXPECT_STREQ(record->event->character,
nullptr);
1909 EXPECT_EQ(record->event->synthesized,
true);
1911 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 1));
1912 EXPECT_EQ(record->event->timestamp, 102000);
1914 EXPECT_EQ(record->event->physical, kPhysicalKeyA);
1915 EXPECT_EQ(record->event->logical, kLogicalKeyA);
1916 EXPECT_STREQ(record->event->character,
"A");
1917 EXPECT_EQ(record->event->synthesized,
false);
1920 g_main_loop_run(loop2);
1928 g_autoptr(FlKeyEmbedderResponder) responder =
1932 g_ptr_array_new_with_free_func(g_object_unref);
1943 GdkModifierType state = GDK_MOD2_MASK;
1948 g_autoptr(GMainLoop) loop1 = g_main_loop_new(
nullptr, 0);
1950 responder, event1, 0,
nullptr,
1951 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1954 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1955 EXPECT_EQ(handled,
TRUE);
1957 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
1961 EXPECT_EQ(call_records->len, 2u);
1962 FlKeyEmbedderCallRecord* record =
1963 FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
1964 EXPECT_EQ(record->event->timestamp, 101000);
1966 EXPECT_EQ(record->event->physical, kPhysicalNumLock);
1967 EXPECT_EQ(record->event->logical, kLogicalNumLock);
1968 EXPECT_STREQ(record->event->character,
nullptr);
1969 EXPECT_EQ(record->event->synthesized,
true);
1971 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 1));
1972 EXPECT_EQ(record->event->timestamp, 101000);
1974 EXPECT_EQ(record->event->physical, kPhysicalKeyA);
1975 EXPECT_EQ(record->event->logical, kLogicalKeyA);
1976 EXPECT_STREQ(record->event->character,
"a");
1977 EXPECT_EQ(record->event->synthesized,
false);
1980 g_main_loop_run(loop1);
1984 state =
static_cast<GdkModifierType
>(0);
1989 g_autoptr(GMainLoop) loop2 = g_main_loop_new(
nullptr, 0);
1991 responder, event2, 0,
nullptr,
1992 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
1995 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
1996 EXPECT_EQ(handled,
TRUE);
1998 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
2002 EXPECT_EQ(call_records->len, 4u);
2003 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
2004 EXPECT_EQ(record->event->timestamp, 102000);
2006 EXPECT_EQ(record->event->physical, kPhysicalNumLock);
2007 EXPECT_EQ(record->event->logical, kLogicalNumLock);
2008 EXPECT_STREQ(record->event->character,
nullptr);
2009 EXPECT_EQ(record->event->synthesized,
true);
2011 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 1));
2012 EXPECT_EQ(record->event->timestamp, 102000);
2014 EXPECT_EQ(record->event->physical, kPhysicalNumLock);
2015 EXPECT_EQ(record->event->logical, kLogicalNumLock);
2016 EXPECT_STREQ(record->event->character,
nullptr);
2017 EXPECT_EQ(record->event->synthesized,
true);
2019 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 2));
2020 EXPECT_EQ(record->event->timestamp, 102000);
2022 EXPECT_EQ(record->event->physical, kPhysicalNumLock);
2023 EXPECT_EQ(record->event->logical, kLogicalNumLock);
2024 EXPECT_STREQ(record->event->character,
nullptr);
2025 EXPECT_EQ(record->event->synthesized,
true);
2027 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 3));
2028 EXPECT_EQ(record->event->timestamp, 102000);
2030 EXPECT_EQ(record->event->physical, kPhysicalKeyA);
2031 EXPECT_EQ(record->event->logical, kLogicalKeyA);
2032 EXPECT_STREQ(record->event->character,
nullptr);
2033 EXPECT_EQ(record->event->synthesized,
false);
2036 g_main_loop_run(loop2);
2042 103, kRelease, kKeyCodeNumLock, GDK_KEY_Num_Lock, state, 0);
2043 g_autoptr(GMainLoop) loop3 = g_main_loop_new(
nullptr, 0);
2045 responder, event3, 0,
nullptr,
2046 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
2049 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
2050 EXPECT_EQ(handled,
TRUE);
2052 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
2056 EXPECT_EQ(call_records->len, 1u);
2057 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
2058 EXPECT_EQ(record->event->physical, 0ull);
2059 EXPECT_EQ(record->event->logical, 0ull);
2060 EXPECT_STREQ(record->event->character,
nullptr);
2061 EXPECT_EQ(record->event->synthesized,
false);
2064 g_main_loop_run(loop3);
2072 g_autoptr(FlKeyEmbedderResponder) responder =
2076 g_ptr_array_new_with_free_func(g_object_unref);
2087 GdkModifierType state = GDK_MOD2_MASK;
2091 GDK_KEY_Num_Lock, state, 0);
2092 g_autoptr(GMainLoop) loop1 = g_main_loop_new(
nullptr, 0);
2094 responder, event1, 0,
nullptr,
2095 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
2098 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
2099 EXPECT_EQ(handled,
TRUE);
2101 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
2105 EXPECT_EQ(call_records->len, 3u);
2106 FlKeyEmbedderCallRecord* record =
2107 FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
2108 EXPECT_EQ(record->event->timestamp, 101000);
2110 EXPECT_EQ(record->event->physical, kPhysicalNumLock);
2111 EXPECT_EQ(record->event->logical, kLogicalNumLock);
2112 EXPECT_STREQ(record->event->character,
nullptr);
2113 EXPECT_EQ(record->event->synthesized,
true);
2115 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 1));
2116 EXPECT_EQ(record->event->timestamp, 101000);
2118 EXPECT_EQ(record->event->physical, kPhysicalNumLock);
2119 EXPECT_EQ(record->event->logical, kLogicalNumLock);
2120 EXPECT_STREQ(record->event->character,
nullptr);
2121 EXPECT_EQ(record->event->synthesized,
true);
2123 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 2));
2124 EXPECT_EQ(record->event->timestamp, 101000);
2126 EXPECT_EQ(record->event->physical, kPhysicalNumLock);
2127 EXPECT_EQ(record->event->logical, kLogicalNumLock);
2128 EXPECT_STREQ(record->event->character,
nullptr);
2129 EXPECT_EQ(record->event->synthesized,
false);
2132 g_main_loop_run(loop1);
2136 state = GDK_MOD2_MASK;
2140 GDK_KEY_Num_Lock, state, 0);
2141 g_autoptr(GMainLoop) loop2 = g_main_loop_new(
nullptr, 0);
2143 responder, event2, 0,
nullptr,
2144 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
2147 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
2148 EXPECT_EQ(handled,
TRUE);
2150 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
2154 EXPECT_EQ(call_records->len, 4u);
2155 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
2156 EXPECT_EQ(record->event->timestamp, 102000);
2158 EXPECT_EQ(record->event->physical, kPhysicalNumLock);
2159 EXPECT_EQ(record->event->logical, kLogicalNumLock);
2160 EXPECT_STREQ(record->event->character,
nullptr);
2161 EXPECT_EQ(record->event->synthesized,
true);
2163 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 1));
2164 EXPECT_EQ(record->event->timestamp, 102000);
2166 EXPECT_EQ(record->event->physical, kPhysicalNumLock);
2167 EXPECT_EQ(record->event->logical, kLogicalNumLock);
2168 EXPECT_STREQ(record->event->character,
nullptr);
2169 EXPECT_EQ(record->event->synthesized,
true);
2171 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 2));
2172 EXPECT_EQ(record->event->timestamp, 102000);
2174 EXPECT_EQ(record->event->physical, kPhysicalNumLock);
2175 EXPECT_EQ(record->event->logical, kLogicalNumLock);
2176 EXPECT_STREQ(record->event->character,
nullptr);
2177 EXPECT_EQ(record->event->synthesized,
true);
2179 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 3));
2180 EXPECT_EQ(record->event->timestamp, 102000);
2182 EXPECT_EQ(record->event->physical, kPhysicalNumLock);
2183 EXPECT_EQ(record->event->logical, kLogicalNumLock);
2184 EXPECT_STREQ(record->event->character,
nullptr);
2185 EXPECT_EQ(record->event->synthesized,
false);
2188 g_main_loop_run(loop2);
2196 g_autoptr(FlKeyEmbedderResponder) responder =
2200 g_ptr_array_new_with_free_func(g_object_unref);
2211 GdkModifierType state =
2212 static_cast<GdkModifierType
>(GDK_MOD2_MASK | GDK_CONTROL_MASK);
2217 g_autoptr(GMainLoop) loop = g_main_loop_new(
nullptr, 0);
2219 responder, event, 0,
nullptr,
2220 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
2223 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
2224 EXPECT_EQ(handled,
TRUE);
2226 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
2229 g_main_loop_run(loop);
2231 EXPECT_EQ(call_records->len, 2u);
2232 FlKeyEmbedderCallRecord* record =
2233 FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
2234 EXPECT_EQ(record->event->timestamp, 101000);
2236 EXPECT_EQ(record->event->physical, kPhysicalNumLock);
2237 EXPECT_EQ(record->event->logical, kLogicalNumLock);
2238 EXPECT_STREQ(record->event->character,
nullptr);
2239 EXPECT_EQ(record->event->synthesized,
true);
2241 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 1));
2242 EXPECT_EQ(record->event->timestamp, 101000);
2244 EXPECT_EQ(record->event->physical, kPhysicalControlLeft);
2245 EXPECT_EQ(record->event->logical, kLogicalControlLeft);
2246 EXPECT_STREQ(record->event->character,
nullptr);
2247 EXPECT_EQ(record->event->synthesized,
true);
2263 g_autoptr(FlKeyEmbedderResponder) responder =
2267 g_ptr_array_new_with_free_func(g_object_unref);
2278 guint32 now_time = 1;
2280 auto send_key_event = [responder, &now_time](
bool is_press, guint keyval,
2282 GdkModifierType state) {
2286 g_autoptr(GMainLoop) loop = g_main_loop_new(
nullptr, 0);
2288 responder, event, 0,
nullptr,
2289 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
2292 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
2293 EXPECT_EQ(handled,
TRUE);
2295 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
2298 g_main_loop_run(loop);
2302 GDK_MODIFIER_RESERVED_25_MASK);
2303 EXPECT_EQ(call_records->len, 1u);
2304 FlKeyEmbedderCallRecord* record =
2305 FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
2307 EXPECT_EQ(record->event->physical, kPhysicalShiftLeft);
2308 EXPECT_EQ(record->event->logical, kLogicalShiftLeft);
2309 EXPECT_EQ(record->event->synthesized,
false);
2312 static_cast<GdkModifierType
>(GDK_SHIFT_MASK |
2313 GDK_MODIFIER_RESERVED_25_MASK));
2314 EXPECT_EQ(call_records->len, 2u);
2315 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 1));
2317 EXPECT_EQ(record->event->physical, kPhysicalAltRight);
2318 EXPECT_EQ(record->event->logical, kLogicalMetaRight);
2319 EXPECT_EQ(record->event->synthesized,
false);
2321 send_key_event(kRelease, GDK_KEY_ISO_Next_Group, kKeyCodeShiftLeft,
2322 static_cast<GdkModifierType
>(GDK_SHIFT_MASK | GDK_MOD1_MASK |
2323 GDK_MODIFIER_RESERVED_25_MASK));
2324 EXPECT_EQ(call_records->len, 5u);
2325 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 2));
2327 EXPECT_EQ(record->event->physical, kPhysicalAltLeft);
2328 EXPECT_EQ(record->event->logical, kLogicalAltLeft);
2329 EXPECT_EQ(record->event->synthesized,
true);
2331 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 3));
2333 EXPECT_EQ(record->event->physical, kPhysicalAltRight);
2334 EXPECT_EQ(record->event->logical, kLogicalMetaRight);
2335 EXPECT_EQ(record->event->synthesized,
true);
2337 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 4));
2339 EXPECT_EQ(record->event->physical, kPhysicalShiftLeft);
2340 EXPECT_EQ(record->event->logical, kLogicalShiftLeft);
2341 EXPECT_EQ(record->event->synthesized,
false);
2343 send_key_event(kPress, GDK_KEY_ISO_Next_Group, kKeyCodeShiftLeft,
2344 static_cast<GdkModifierType
>(GDK_MOD1_MASK |
2345 GDK_MODIFIER_RESERVED_25_MASK));
2346 EXPECT_EQ(call_records->len, 6u);
2347 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 5));
2349 EXPECT_EQ(record->event->physical, kPhysicalShiftLeft);
2350 EXPECT_EQ(record->event->logical, kLogicalGroupNext);
2351 EXPECT_EQ(record->event->synthesized,
false);
2353 send_key_event(kRelease, GDK_KEY_ISO_Level3_Shift, kKeyCodeAltRight,
2354 static_cast<GdkModifierType
>(GDK_MOD1_MASK |
2355 GDK_MODIFIER_RESERVED_13_MASK |
2356 GDK_MODIFIER_RESERVED_25_MASK));
2357 EXPECT_EQ(call_records->len, 7u);
2358 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 6));
2359 EXPECT_EQ(record->event->physical, 0u);
2360 EXPECT_EQ(record->event->logical, 0u);
2363 static_cast<GdkModifierType
>(GDK_MODIFIER_RESERVED_13_MASK |
2364 GDK_MODIFIER_RESERVED_25_MASK));
2365 EXPECT_EQ(call_records->len, 9u);
2366 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 7));
2368 EXPECT_EQ(record->event->physical, kPhysicalAltLeft);
2369 EXPECT_EQ(record->event->logical, kLogicalAltLeft);
2370 EXPECT_EQ(record->event->synthesized,
true);
2372 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 8));
2374 EXPECT_EQ(record->event->physical, kPhysicalShiftLeft);
2375 EXPECT_EQ(record->event->logical, kLogicalGroupNext);
2376 EXPECT_EQ(record->event->synthesized,
false);
2388 g_autoptr(FlKeyEmbedderResponder) responder =
2392 g_ptr_array_new_with_free_func(g_object_unref);
2403 guint32 now_time = 1;
2405 auto send_key_event = [responder, &now_time](
bool is_press, guint keyval,
2407 GdkModifierType state) {
2411 g_autoptr(GMainLoop) loop = g_main_loop_new(
nullptr, 0);
2413 responder, event, 0,
nullptr,
2414 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
2417 FL_KEY_EMBEDDER_RESPONDER(
object), result, &handled,
nullptr));
2418 EXPECT_EQ(handled,
TRUE);
2420 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
2423 g_main_loop_run(loop);
2428 GDK_MODIFIER_RESERVED_25_MASK);
2429 EXPECT_EQ(call_records->len, 1u);
2430 FlKeyEmbedderCallRecord* record =
2431 FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
2433 EXPECT_EQ(record->event->physical, kPhysicalShiftLeft);
2434 EXPECT_EQ(record->event->logical, kLogicalShiftLeft);
2435 EXPECT_EQ(record->event->synthesized,
false);
2438 static_cast<GdkModifierType
>(GDK_SHIFT_MASK |
2439 GDK_MODIFIER_RESERVED_25_MASK));
2440 EXPECT_EQ(call_records->len, 2u);
2441 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 1));
2443 EXPECT_EQ(record->event->physical, kPhysicalMetaLeft);
2444 EXPECT_EQ(record->event->logical, kLogicalMetaLeft);
2445 EXPECT_EQ(record->event->synthesized,
false);
2448 static_cast<GdkModifierType
>(GDK_MODIFIER_RESERVED_13_MASK |
2449 GDK_MODIFIER_RESERVED_25_MASK));
2451 GDK_MODIFIER_RESERVED_25_MASK);
2456 GDK_MODIFIER_RESERVED_25_MASK);
2457 EXPECT_EQ(call_records->len, 1u);
2458 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 0));
2460 EXPECT_EQ(record->event->physical, kPhysicalShiftRight);
2461 EXPECT_EQ(record->event->logical, kLogicalShiftRight);
2462 EXPECT_EQ(record->event->synthesized,
false);
2465 static_cast<GdkModifierType
>(GDK_SHIFT_MASK |
2466 GDK_MODIFIER_RESERVED_25_MASK));
2467 EXPECT_EQ(call_records->len, 2u);
2468 record = FL_KEY_EMBEDDER_CALL_RECORD(g_ptr_array_index(call_records, 1));
2470 EXPECT_EQ(record->event->physical, kPhysicalMetaLeft);
2471 EXPECT_EQ(record->event->logical, kLogicalMetaLeft);
2472 EXPECT_EQ(record->event->synthesized,
false);