|
45 | 45 | #define Mod8Mask (1 << 10)
|
46 | 46 | #define Mod9Mask (1 << 11)
|
47 | 47 | #define Mod10Mask (1 << 12)
|
| 48 | +#define HighestRealMask Mod10Mask |
48 | 49 | #define NoModifier 0
|
49 | 50 |
|
50 | 51 | static void
|
@@ -172,42 +173,74 @@ test_real_mods(void)
|
172 | 173 | assert(keycode != XKB_KEYCODE_INVALID);
|
173 | 174 | key = XkbKey(keymap, keycode);
|
174 | 175 | 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); |
176 | 178 |
|
177 | 179 | keycode = xkb_keymap_key_by_name(keymap, "AD02");
|
178 | 180 | assert(keycode != XKB_KEYCODE_INVALID);
|
179 | 181 | key = XkbKey(keymap, keycode);
|
180 | 182 | 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); |
182 | 185 |
|
| 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. */ |
183 | 188 | 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)); |
211 | 244 |
|
212 | 245 | xkb_keymap_unref(keymap);
|
213 | 246 | xkb_context_unref(context);
|
|
0 commit comments