@@ -374,78 +374,86 @@ test_latch_mod_cancel(struct xkb_context *context)
374374 assert (keymap );
375375
376376 assert (test_key_seq (keymap ,
377- KEY_Q , BOTH , XKB_KEY_q ,
378- NEXT , KEY_1 , BOTH , XKB_KEY_1 ,
377+ KEY_Q , BOTH , XKB_KEY_q ,
378+ NEXT , KEY_1 , BOTH , XKB_KEY_1 ,
379379
380380 // Basic latch/unlatch
381381
382- NEXT , KEY_LEFTSHIFT , BOTH , XKB_KEY_Shift_L , // Latch Shift
383- NEXT , KEY_Q , BOTH , XKB_KEY_Q , // Unlatch Shift
384- NEXT , KEY_Q , BOTH , XKB_KEY_q ,
382+ NEXT , KEY_LEFTSHIFT , BOTH , XKB_KEY_Shift_L , // Latch Shift
383+ NEXT , KEY_Q , BOTH , XKB_KEY_Q , // Unlatch Shift
384+ NEXT , KEY_Q , BOTH , XKB_KEY_q ,
385385
386- NEXT , KEY_LEFTSHIFT , BOTH , XKB_KEY_Shift_L , // Latch Shift
387- NEXT , KEY_1 , BOTH , XKB_KEY_exclam , // Unlatch Shift
388- NEXT , KEY_1 , BOTH , XKB_KEY_1 ,
386+ NEXT , KEY_LEFTSHIFT , BOTH , XKB_KEY_Shift_L , // Latch Shift
387+ NEXT , KEY_1 , BOTH , XKB_KEY_exclam , // Unlatch Shift
388+ NEXT , KEY_1 , BOTH , XKB_KEY_1 ,
389389
390390 // Lock/unlock cancels latch
391391
392- NEXT , KEY_LEFTSHIFT , BOTH , XKB_KEY_Shift_L , // Latch Shift
393- NEXT , KEY_LEFTSHIFT , BOTH , XKB_KEY_Caps_Lock , // Lock Caps, unlatch Shift
394- NEXT , KEY_Q , BOTH , XKB_KEY_Q ,
395- NEXT , KEY_1 , BOTH , XKB_KEY_1 ,
396- NEXT , KEY_LEFTSHIFT , BOTH , XKB_KEY_Shift_L , // Latch Shift
397- NEXT , KEY_1 , BOTH , XKB_KEY_exclam , // Unlatch Shift
398- NEXT , KEY_1 , BOTH , XKB_KEY_1 ,
399- NEXT , KEY_LEFTSHIFT , BOTH , XKB_KEY_Shift_L , // Latch Shift
400- NEXT , KEY_Q , BOTH , XKB_KEY_q , // Unlatch Shift
401- NEXT , KEY_Q , BOTH , XKB_KEY_Q ,
402- NEXT , KEY_LEFTSHIFT , BOTH , XKB_KEY_Shift_L , // Latch Shift
403- NEXT , KEY_LEFTSHIFT , BOTH , XKB_KEY_Caps_Lock , // Unlock Caps, unlatch Shift
404- NEXT , KEY_Q , BOTH , XKB_KEY_q ,
392+ NEXT , KEY_LEFTSHIFT , BOTH , XKB_KEY_Shift_L , // Latch Shift
393+ NEXT , KEY_LEFTSHIFT , BOTH , XKB_KEY_Caps_Lock , // Lock Caps, unlatch Shift
394+ NEXT , KEY_Q , BOTH , XKB_KEY_Q ,
395+ NEXT , KEY_1 , BOTH , XKB_KEY_1 ,
396+ NEXT , KEY_LEFTSHIFT , BOTH , XKB_KEY_Shift_L , // Latch Shift
397+ NEXT , KEY_1 , BOTH , XKB_KEY_exclam , // Unlatch Shift
398+ NEXT , KEY_1 , BOTH , XKB_KEY_1 ,
399+ NEXT , KEY_LEFTSHIFT , BOTH , XKB_KEY_Shift_L , // Latch Shift
400+ NEXT , KEY_Q , BOTH , XKB_KEY_q , // Unlatch Shift
401+ NEXT , KEY_Q , BOTH , XKB_KEY_Q ,
402+ NEXT , KEY_LEFTSHIFT , BOTH , XKB_KEY_Shift_L , // Latch Shift
403+ NEXT , KEY_LEFTSHIFT , BOTH , XKB_KEY_Caps_Lock , // Unlock Caps, unlatch Shift
404+ NEXT , KEY_Q , BOTH , XKB_KEY_q ,
405405
406406 // Double latch/unlatch
407407
408- NEXT , KEY_LEFTCTRL , BOTH , XKB_KEY_Control_L , // Latch Control
409- NEXT , KEY_LEFTALT , BOTH , XKB_KEY_Alt_L , // Latch Alt
410- NEXT , KEY_1 , BOTH , XKB_KEY_plus , // Unlatch Control, Unlatch Alt
411-
412- NEXT , KEY_RIGHTSHIFT , BOTH , XKB_KEY_Shift_R , // Latch Lock
413- NEXT , KEY_LEFTCTRL , BOTH , XKB_KEY_Control_L , // Latch Control
414- NEXT , KEY_LEFTALT , BOTH , XKB_KEY_Alt_L , // Latch Alt
415- NEXT , KEY_1 , BOTH , XKB_KEY_plus , // Unlatch Control, Unlatch Lock, Unlatch Alt
416- NEXT , KEY_Q , BOTH , XKB_KEY_q ,
417-
418- NEXT , KEY_LEFTALT , BOTH , XKB_KEY_Alt_L , // Latch Alt
419- NEXT , KEY_RIGHTSHIFT , BOTH , XKB_KEY_Shift_R , // Latch Lock, unlatch Alt
420- NEXT , KEY_LEFTCTRL , BOTH , XKB_KEY_Control_L , // Latch Control
421- NEXT , KEY_1 , BOTH , XKB_KEY_1 , // Unlatch Control, Unlatch Lock
422- NEXT , KEY_Q , BOTH , XKB_KEY_q ,
423-
424- NEXT , KEY_LEFTALT , BOTH , XKB_KEY_Alt_L , // Latch Alt
425- NEXT , KEY_LEFTCTRL , BOTH , XKB_KEY_Control_L , // Latch Control
426- NEXT , KEY_RIGHTSHIFT , BOTH , XKB_KEY_Shift_R , // Latch Lock, Unlatch Control, Unlatch Alt
427- NEXT , KEY_1 , BOTH , XKB_KEY_1 , // Unlatch Lock
428- NEXT , KEY_Q , BOTH , XKB_KEY_q ,
429-
430- NEXT , KEY_LEFTALT , BOTH , XKB_KEY_Alt_L , // Latch Alt
431- NEXT , KEY_LEFTCTRL , BOTH , XKB_KEY_Control_L , // Latch Control
432- NEXT , KEY_RIGHTSHIFT , BOTH , XKB_KEY_Shift_R , // Latch Lock, Unlatch Control, Unlatch Alt
433- NEXT , KEY_Q , BOTH , XKB_KEY_Q , // Unlatch Lock
434- NEXT , KEY_Q , BOTH , XKB_KEY_q ,
408+ NEXT , KEY_LEFTCTRL , BOTH , XKB_KEY_Control_L , // Latch Control
409+ NEXT , KEY_LEFTALT , BOTH , XKB_KEY_Alt_L , // Latch Alt
410+ NEXT , KEY_1 , BOTH , XKB_KEY_plus , // Unlatch Control, Unlatch Alt
411+
412+ NEXT , KEY_RIGHTSHIFT , BOTH , XKB_KEY_Shift_R , // Latch Lock
413+ NEXT , KEY_LEFTCTRL , BOTH , XKB_KEY_Control_L , // Latch Control
414+ NEXT , KEY_LEFTALT , BOTH , XKB_KEY_Alt_L , // Latch Alt
415+ NEXT , KEY_1 , BOTH , XKB_KEY_plus , // Unlatch Control, Unlatch Lock, Unlatch Alt
416+ NEXT , KEY_Q , BOTH , XKB_KEY_q ,
417+
418+ NEXT , KEY_LEFTALT , BOTH , XKB_KEY_Alt_L , // Latch Alt
419+ NEXT , KEY_RIGHTSHIFT , BOTH , XKB_KEY_Shift_R , // Latch Lock, unlatch Alt
420+ NEXT , KEY_LEFTCTRL , BOTH , XKB_KEY_Control_L , // Latch Control
421+ NEXT , KEY_1 , BOTH , XKB_KEY_1 , // Unlatch Control, Unlatch Lock
422+ NEXT , KEY_Q , BOTH , XKB_KEY_q ,
423+
424+ NEXT , KEY_LEFTALT , BOTH , XKB_KEY_Alt_L , // Latch Alt
425+ NEXT , KEY_LEFTCTRL , BOTH , XKB_KEY_Control_L , // Latch Control
426+ NEXT , KEY_RIGHTSHIFT , BOTH , XKB_KEY_Shift_R , // Latch Lock, Unlatch Control, Unlatch Alt
427+ NEXT , KEY_1 , BOTH , XKB_KEY_1 , // Unlatch Lock
428+ NEXT , KEY_Q , BOTH , XKB_KEY_q ,
429+
430+ NEXT , KEY_LEFTALT , BOTH , XKB_KEY_Alt_L , // Latch Alt
431+ NEXT , KEY_LEFTCTRL , BOTH , XKB_KEY_Control_L , // Latch Control
432+ NEXT , KEY_RIGHTSHIFT , BOTH , XKB_KEY_Shift_R , // Latch Lock, Unlatch Control, Unlatch Alt
433+ NEXT , KEY_Q , BOTH , XKB_KEY_Q , // Unlatch Lock
434+ NEXT , KEY_Q , BOTH , XKB_KEY_q ,
435435
436436 // Simultaneous latch
437437
438- NEXT , KEY_LEFTCTRL , DOWN , XKB_KEY_Control_L , // Set Control
439- NEXT , KEY_LEFTALT , DOWN , XKB_KEY_Alt_L , // Latch Alt
440- NEXT , KEY_LEFTCTRL , UP , XKB_KEY_Control_L , // Latch Control
441- NEXT , KEY_LEFTALT , UP , XKB_KEY_Alt_L , // Latch Alt
442- NEXT , KEY_1 , BOTH , XKB_KEY_plus , // Unlatch Control, Unlatch Alt
443-
444- NEXT , KEY_LEFTCTRL , DOWN , XKB_KEY_Control_L , // Set Control
445- NEXT , KEY_LEFTALT , DOWN , XKB_KEY_Alt_L , // Latch Alt
446- NEXT , KEY_LEFTALT , UP , XKB_KEY_Alt_L , // Latch Alt
447- NEXT , KEY_LEFTCTRL , UP , XKB_KEY_Control_L , // Latch Control
448- NEXT , KEY_1 , BOTH , XKB_KEY_plus , // Unlatch Control, Unlatch Alt
438+ NEXT , KEY_LEFTCTRL , DOWN , XKB_KEY_Control_L , // Set Control
439+ NEXT , KEY_LEFTALT , DOWN , XKB_KEY_Alt_L , // Latch Alt
440+ NEXT , KEY_LEFTCTRL , UP , XKB_KEY_Control_L , // Latch Control
441+ NEXT , KEY_LEFTALT , UP , XKB_KEY_Alt_L , // Latch Alt
442+ NEXT , KEY_1 , BOTH , XKB_KEY_plus , // Unlatch Control, Unlatch Alt
443+
444+ NEXT , KEY_LEFTCTRL , DOWN , XKB_KEY_Control_L , // Set Control
445+ NEXT , KEY_LEFTALT , DOWN , XKB_KEY_Alt_L , // Latch Alt
446+ NEXT , KEY_LEFTALT , UP , XKB_KEY_Alt_L , // Latch Alt
447+ NEXT , KEY_LEFTCTRL , UP , XKB_KEY_Control_L , // Latch Control
448+ NEXT , KEY_1 , BOTH , XKB_KEY_plus , // Unlatch Control, Unlatch Alt
449+
450+ // Preserved latches are not broken by new latches
451+
452+ NEXT , KEY_RIGHTSHIFT , BOTH , XKB_KEY_Shift_R , // Latch Lock
453+ NEXT , KEY_RIGHTCTRL , BOTH , XKB_KEY_ISO_Level3_Latch , // Latch LevelThree
454+ NEXT , KEY_A , BOTH , XKB_KEY_ISO_Level5_Latch , // Latch LevelFive, unnlatch LevelThree
455+ NEXT , KEY_Q , BOTH , XKB_KEY_Q , // Unlatch Lock, unlatch LevelFive
456+ NEXT , KEY_Q , BOTH , XKB_KEY_q ,
449457
450458 FINISH ));
451459
0 commit comments