]>
Commit | Line | Data |
---|---|---|
c6e4d226 MB |
1 | From 180dcc578e13c6096e277fb853e7162db640f207 Mon Sep 17 00:00:00 2001 |
2 | From: Alexandre Rostovtsev <tetromino@gentoo.org> | |
3 | Date: Tue, 15 Nov 2011 03:06:40 -0500 | |
4 | Subject: [PATCH] Map both gdk's Meta and Alt to vte's Meta for >=gtk+-3.2.2 | |
5 | compatibility | |
6 | ||
7 | Also, since VTE_META_MASK is now a mask with multiple bits set, code that | |
8 | compares gdk key modifiers to VTE_META_MASK by numerical equality is no | |
9 | longer guaranteed to work. Therefore, for such comparisons a new function, | |
10 | vte_keymap_fixup_modifiers, is introduced; it ensures that if any bits | |
11 | matching matching VTE_META_MASK are set, then all are set. | |
12 | ||
13 | https://bugzilla.gnome.org/show_bug.cgi?id=663779 | |
14 | --- | |
15 | src/keymap.c | 15 +++++++++++++-- | |
16 | src/keymap.h | 2 +- | |
17 | 2 files changed, 14 insertions(+), 3 deletions(-) | |
18 | ||
19 | diff --git a/src/keymap.c b/src/keymap.c | |
20 | index 9a21669..95b4c5b 100644 | |
21 | --- a/src/keymap.c | |
22 | +++ b/src/keymap.c | |
23 | @@ -990,6 +990,17 @@ static const struct _vte_keymap_group { | |
24 | {GDK_KEY (F35), _vte_keymap_GDK_F35}, | |
25 | }; | |
26 | ||
27 | +/* Restrict modifiers to the specified mask and ensure that VTE_META_MASK, | |
28 | + * despite being a compound mask, is treated as indivisible. */ | |
29 | +GdkModifierType | |
30 | +_vte_keymap_fixup_modifiers(GdkModifierType modifiers, | |
31 | + GdkModifierType mask) | |
32 | +{ | |
33 | + if (modifiers & VTE_META_MASK) | |
34 | + modifiers |= VTE_META_MASK; | |
35 | + return modifiers & mask; | |
36 | +} | |
37 | + | |
38 | /* Map the specified keyval/modifier setup, dependent on the mode, to either | |
39 | * a literal string or a capability name. */ | |
40 | void | |
41 | @@ -1104,7 +1115,7 @@ _vte_keymap_map(guint keyval, | |
42 | } else { | |
43 | fkey_mode = fkey_default; | |
44 | } | |
45 | - modifiers &= (GDK_SHIFT_MASK | GDK_CONTROL_MASK | VTE_META_MASK | VTE_NUMLOCK_MASK); | |
46 | + modifiers = _vte_keymap_fixup_modifiers(modifiers, GDK_SHIFT_MASK | GDK_CONTROL_MASK | VTE_META_MASK | VTE_NUMLOCK_MASK); | |
47 | ||
48 | /* Search for the conditions. */ | |
49 | for (i = 0; entries[i].normal_length || entries[i].special[0]; i++) | |
50 | @@ -1375,7 +1386,7 @@ _vte_keymap_key_add_key_modifiers(guint keyval, | |
51 | return; | |
52 | } | |
53 | ||
54 | - switch (modifiers & significant_modifiers) { | |
55 | + switch (_vte_keymap_fixup_modifiers(modifiers, significant_modifiers)) { | |
56 | case 0: | |
57 | modifier = 0; | |
58 | break; | |
59 | diff --git a/src/keymap.h b/src/keymap.h | |
60 | index 243e22e..21d9b8e 100644 | |
61 | --- a/src/keymap.h | |
62 | +++ b/src/keymap.h | |
63 | @@ -27,7 +27,7 @@ | |
64 | ||
65 | G_BEGIN_DECLS | |
66 | ||
67 | -#define VTE_META_MASK GDK_META_MASK | |
68 | +#define VTE_META_MASK (GDK_META_MASK | GDK_MOD1_MASK) | |
69 | #define VTE_NUMLOCK_MASK GDK_MOD2_MASK | |
70 | ||
71 | /* Map the specified keyval/modifier setup, dependent on the mode, to either | |
72 | -- | |
73 | 1.7.8.rc3 | |
74 |