Skip to content

Commit b5e3084

Browse files
committed
Review fixes
1 parent 1b0464e commit b5e3084

File tree

2 files changed

+104
-58
lines changed

2 files changed

+104
-58
lines changed

test/data/keymaps/real-modifiers.xkb

+42-29
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ xkb_keycodes "test" {
2525
};
2626

2727
xkb_types "complete" {
28+
// Define a buch of virtual modifier to test mappings to Mod5-Mod10 real
29+
// modifiers. WonderMod will be mapped to Mod5+Mod6.
2830
virtual_modifiers MyMod5,MyMod6,MyMod6,MyMod7,MyMod8,MyMod9,MyMod10,WonderMod;
2931

3032
type "ONE_LEVEL" {
@@ -37,7 +39,7 @@ xkb_types "complete" {
3739
level_name[1]= "Base";
3840
level_name[2]= "Shift";
3941
};
40-
type "SO_MANY_LEVELS" {
42+
type "SOOO_MANY_LEVELS" {
4143
modifiers = Shift+MyMod5+MyMod6+MyMod6+MyMod7+MyMod8+MyMod9+MyMod10+WonderMod;
4244
map[Shift] = 2;
4345
map[MyMod5] = 3;
@@ -71,42 +73,43 @@ xkb_compatibility "complete" {
7173
action = SetMods(modifiers=modMapMods,clearLocks);
7274
};
7375

74-
interpret q {
76+
// Define some letter keysyms as custom modifiers
77+
interpret Q {
7578
useModMapMods = level1;
7679
virtualModifier = MyMod5;
7780
action = SetMods(modifiers=MyMod5);
7881
};
79-
interpret w {
82+
interpret W {
8083
useModMapMods = level1;
8184
virtualModifier = MyMod6;
8285
action = SetMods(modifiers=MyMod6);
8386
};
84-
interpret e {
87+
interpret E {
8588
useModMapMods = level1;
8689
virtualModifier = MyMod7;
8790
action = SetMods(modifiers=MyMod7);
8891
};
89-
interpret r {
92+
interpret R {
9093
useModMapMods = level1;
9194
virtualModifier = MyMod8;
9295
action = SetMods(modifiers=MyMod8);
9396
};
94-
interpret t {
97+
interpret T {
9598
useModMapMods = level1;
9699
virtualModifier = MyMod9;
97100
action = SetMods(modifiers=MyMod9);
98101
};
99-
interpret y {
102+
interpret Y {
100103
useModMapMods = level1;
101104
virtualModifier = MyMod10;
102105
action = SetMods(modifiers=MyMod10);
103106
};
104-
interpret u {
107+
interpret U {
105108
useModMapMods = level1;
106109
virtualModifier = WonderMod;
107110
action = SetMods(modifiers=WonderMod);
108111
};
109-
interpret i {
112+
interpret I {
110113
useModMapMods = level1;
111114
virtualModifier = WonderMod;
112115
action = SetMods(modifiers=WonderMod);
@@ -115,36 +118,46 @@ xkb_compatibility "complete" {
115118
xkb_symbols {
116119
name[group1]="Test";
117120

118-
key <LFSH> { [Shift_L] };
119-
modmap Shift { <LFSH> };
121+
// Map the modifiers. The letter keysyms only serve to map
122+
// the modifier actions (see interpret entries above).
120123

121-
key <AD01> { [q] };
122-
modMap Mod5 { <AD01> };
124+
key <LFSH> { [Shift_L] };
125+
modifier_map Shift { <LFSH> };
123126

124-
key <AD02> { [w] };
125-
modMap Mod6 { <AD02> };
127+
// virtual modifier: MyMod5
128+
key <AD01> { [Q] };
129+
modifier_map Mod5 { <AD01> };
126130

127-
key <AD03> { [e] };
128-
modMap Mod7 { <AD03> };
131+
// virtual modifier: MyMod6
132+
key <AD02> { [W] };
133+
modifier_map Mod6 { <AD02> }; // real modifier not supported by X11
129134

130-
key <AD04> { [r] };
131-
modMap Mod8 { <AD04> };
135+
// virtual modifier: MyMod7
136+
key <AD03> { [E] };
137+
modifier_map Mod7 { <AD03> }; // real modifier not supported by X11
132138

133-
key <AD05> { [t] };
134-
modMap Mod9 { <AD05> };
139+
// virtual modifier: MyMod8
140+
key <AD04> { [R] };
141+
modifier_map Mod8 { <AD04> }; // real modifier not supported by X11
135142

136-
key <AD06> { [y] };
137-
modMap Mod10 { <AD06> };
143+
// virtual modifier: MyMod9
144+
key <AD05> { [T] };
145+
modifier_map Mod9 { <AD05> }; // real modifier not supported by X11
138146

139-
key <AD07> { [u] };
140-
modMap Mod5 { <AD07> };
147+
// virtual modifier: MyMod10
148+
key <AD06> { [Y] };
149+
modifier_map Mod10 { <AD06> }; // real modifier not supported by X11
141150

142-
key <AD08> { [i] };
143-
modMap Mod6 { <AD08> };
151+
// virtual modifier: WonderMod (Mod5+Mod6)
152+
key <AD07> { [U] };
153+
modifier_map Mod5 { <AD07> };
154+
key <AD08> { [I] };
155+
modifier_map Mod6 { <AD08> }; // real modifier not supported by X11
144156

157+
// Key to test that all the levels work
145158
key <AD09> {
146-
type[Group1]="SO_MANY_LEVELS",
147-
symbols[Group1]=[a,b,c,d,e,f,g,h,i,j]
159+
type[Group1]="SOOO_MANY_LEVELS",
160+
symbols[Group1]=[1,2,3,4,5,6,7,8,9,A]
148161
};
149162

150163
};

test/modifiers.c

+62-29
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
#define Mod8Mask (1 << 10)
4646
#define Mod9Mask (1 << 11)
4747
#define Mod10Mask (1 << 12)
48+
#define HighestRealMask Mod10Mask
4849
#define NoModifier 0
4950

5051
static void
@@ -172,42 +173,74 @@ test_real_mods(void)
172173
assert(keycode != XKB_KEYCODE_INVALID);
173174
key = XkbKey(keymap, keycode);
174175
assert(key->modmap == Mod5Mask);
175-
assert(key->vmodmap == Mod10Mask << 1);
176+
/* Test that MyMod5 is the first defined virtual modifier */
177+
assert(key->vmodmap == HighestRealMask << 1);
176178

177179
keycode = xkb_keymap_key_by_name(keymap, "AD02");
178180
assert(keycode != XKB_KEYCODE_INVALID);
179181
key = XkbKey(keymap, keycode);
180182
assert(key->modmap == Mod6Mask);
181-
assert(key->vmodmap == Mod10Mask << 2);
183+
/* Test that MyMod5 is the second defined virtual modifier */
184+
assert(key->vmodmap == HighestRealMask << 2);
182185

186+
/* Test that we get the expected keysym for each level of KEY_O (<AD09>).
187+
* Most levels require support of the real modifiers Mod6-Mod10. */
183188
assert(test_key_seq(keymap,
184-
KEY_O, BOTH, XKB_KEY_a, NEXT,
185-
KEY_Q, DOWN, XKB_KEY_q, NEXT,
186-
KEY_O, BOTH, XKB_KEY_c, NEXT,
187-
KEY_Q, UP, XKB_KEY_q, NEXT,
188-
KEY_W, DOWN, XKB_KEY_w, NEXT,
189-
KEY_O, BOTH, XKB_KEY_d, NEXT,
190-
KEY_W, UP, XKB_KEY_w, NEXT,
191-
KEY_E, DOWN, XKB_KEY_e, NEXT,
192-
KEY_O, BOTH, XKB_KEY_f, NEXT,
193-
KEY_E, UP, XKB_KEY_e, NEXT,
194-
KEY_R, DOWN, XKB_KEY_r, NEXT,
195-
KEY_O, BOTH, XKB_KEY_g, NEXT,
196-
KEY_R, UP, XKB_KEY_r, NEXT,
197-
KEY_T, DOWN, XKB_KEY_t, NEXT,
198-
KEY_O, BOTH, XKB_KEY_h, NEXT,
199-
KEY_T, UP, XKB_KEY_t, NEXT,
200-
KEY_Y, DOWN, XKB_KEY_y, NEXT,
201-
KEY_O, BOTH, XKB_KEY_i, NEXT,
202-
KEY_Y, UP, XKB_KEY_y, NEXT,
203-
KEY_U, DOWN, XKB_KEY_u, NEXT,
204-
KEY_O, BOTH, XKB_KEY_j, NEXT,
205-
KEY_U, UP, XKB_KEY_u, NEXT,
206-
KEY_Q, DOWN, XKB_KEY_q, NEXT,
207-
KEY_W, DOWN, XKB_KEY_w, NEXT,
208-
KEY_O, BOTH, XKB_KEY_j, NEXT,
209-
KEY_W, UP, XKB_KEY_w, NEXT,
210-
KEY_Q, UP, XKB_KEY_q, FINISH));
189+
/* Level 1 */
190+
KEY_O, BOTH, XKB_KEY_1, NEXT,
191+
/* Level 2 */
192+
KEY_LEFTSHIFT, DOWN, XKB_KEY_Shift_L, NEXT,
193+
KEY_O, BOTH, XKB_KEY_2, NEXT,
194+
KEY_LEFTSHIFT, UP, XKB_KEY_Shift_L, NEXT,
195+
/* Level 3 (MyMod5 = Mod5) */
196+
KEY_Q, DOWN, XKB_KEY_Q, NEXT,
197+
KEY_O, BOTH, XKB_KEY_3, NEXT,
198+
KEY_Q, UP, XKB_KEY_Q, NEXT,
199+
/* Level 4 (MyMod6 = Mod6) */
200+
KEY_W, DOWN, XKB_KEY_W, NEXT,
201+
KEY_O, BOTH, XKB_KEY_4, NEXT,
202+
/* Level 5 (MyMod6 + Shift = Mod6 + Shift) */
203+
KEY_LEFTSHIFT, DOWN, XKB_KEY_Shift_L, NEXT,
204+
KEY_O, BOTH, XKB_KEY_5, NEXT,
205+
KEY_LEFTSHIFT, UP, XKB_KEY_Shift_L, NEXT,
206+
KEY_W, UP, XKB_KEY_W, NEXT,
207+
/* Level 6 (MyMod7 = Mod7) */
208+
KEY_E, DOWN, XKB_KEY_E, NEXT,
209+
KEY_O, BOTH, XKB_KEY_6, NEXT,
210+
KEY_E, UP, XKB_KEY_E, NEXT,
211+
/* Level 7 (MyMod8 = Mod8) */
212+
KEY_R, DOWN, XKB_KEY_R, NEXT,
213+
KEY_O, BOTH, XKB_KEY_7, NEXT,
214+
KEY_R, UP, XKB_KEY_R, NEXT,
215+
/* Level 8 (MyMod9 = Mod9) */
216+
KEY_T, DOWN, XKB_KEY_T, NEXT,
217+
KEY_O, BOTH, XKB_KEY_8, NEXT,
218+
KEY_T, UP, XKB_KEY_T, NEXT,
219+
/* Level 9 (MyMod10 = Mod10) */
220+
KEY_Y, DOWN, XKB_KEY_Y, NEXT,
221+
KEY_O, BOTH, XKB_KEY_9, NEXT,
222+
KEY_Y, UP, XKB_KEY_Y, NEXT,
223+
/* Level 10 using KEY_U (WonderMod = Mod5 + Mod6) */
224+
KEY_U, DOWN, XKB_KEY_U, NEXT,
225+
KEY_O, BOTH, XKB_KEY_A, NEXT,
226+
KEY_U, UP, XKB_KEY_U, NEXT,
227+
/* Level 10 using KEY_I (WonderMod = Mod5 + Mod6) */
228+
KEY_I, DOWN, XKB_KEY_I, NEXT,
229+
KEY_O, BOTH, XKB_KEY_A, NEXT,
230+
KEY_I, UP, XKB_KEY_I, NEXT,
231+
/* Level 10 using KEY_Q + KEY_W
232+
* MyMod5 + MyMod6 = Mod5 + Mod6 = WonderMod */
233+
KEY_Q, DOWN, XKB_KEY_Q, NEXT,
234+
KEY_W, DOWN, XKB_KEY_W, NEXT,
235+
KEY_O, BOTH, XKB_KEY_A, NEXT,
236+
KEY_W, UP, XKB_KEY_W, NEXT,
237+
KEY_Q, UP, XKB_KEY_Q, NEXT,
238+
/* Invalid level, fallback to base level */
239+
KEY_W, DOWN, XKB_KEY_W, NEXT,
240+
KEY_E, DOWN, XKB_KEY_E, NEXT,
241+
KEY_O, BOTH, XKB_KEY_1, NEXT,
242+
KEY_E, UP, XKB_KEY_E, NEXT,
243+
KEY_W, UP, XKB_KEY_W, FINISH));
211244

212245
xkb_keymap_unref(keymap);
213246
xkb_context_unref(context);

0 commit comments

Comments
 (0)