]>
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 | |
c9db6ca2 JB |
23 | @@ -708,6 +708,21 @@ |
24 | {GDK_KEY_F35, _vte_keymap_GDK_F35}, | |
c6e4d226 MB |
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, | |
c9db6ca2 JB |
31 | + GdkModifierType mask); |
32 | + | |
33 | +GdkModifierType | |
34 | +_vte_keymap_fixup_modifiers(GdkModifierType modifiers, | |
c6e4d226 MB |
35 | + GdkModifierType mask) |
36 | +{ | |
37 | + if (modifiers & VTE_META_MASK) | |
38 | + modifiers |= VTE_META_MASK; | |
39 | + return modifiers & mask; | |
40 | +} | |
41 | + | |
c9db6ca2 JB |
42 | /* Map the specified keyval/modifier setup, dependent on the mode, to |
43 | * a literal string. */ | |
c6e4d226 | 44 | void |
c9db6ca2 JB |
45 | @@ -751,7 +766,7 @@ |
46 | /* Build mode masks. */ | |
47 | cursor_mode = app_cursor_keys ? cursor_app : cursor_default; | |
48 | keypad_mode = app_keypad_keys ? keypad_app : keypad_default; | |
c6e4d226 MB |
49 | - modifiers &= (GDK_SHIFT_MASK | GDK_CONTROL_MASK | VTE_META_MASK | VTE_NUMLOCK_MASK); |
50 | + modifiers = _vte_keymap_fixup_modifiers(modifiers, GDK_SHIFT_MASK | GDK_CONTROL_MASK | VTE_META_MASK | VTE_NUMLOCK_MASK); | |
51 | ||
52 | /* Search for the conditions. */ | |
c9db6ca2 JB |
53 | for (i = 0; entries[i].normal_length; i++) |
54 | @@ -952,7 +967,7 @@ | |
c6e4d226 MB |
55 | return; |
56 | } | |
57 | ||
58 | - switch (modifiers & significant_modifiers) { | |
59 | + switch (_vte_keymap_fixup_modifiers(modifiers, significant_modifiers)) { | |
60 | case 0: | |
61 | modifier = 0; | |
62 | break; | |
63 | diff --git a/src/keymap.h b/src/keymap.h | |
64 | index 243e22e..21d9b8e 100644 | |
65 | --- a/src/keymap.h | |
66 | +++ b/src/keymap.h | |
67 | @@ -27,7 +27,7 @@ | |
68 | ||
69 | G_BEGIN_DECLS | |
70 | ||
71 | -#define VTE_META_MASK GDK_META_MASK | |
72 | +#define VTE_META_MASK (GDK_META_MASK | GDK_MOD1_MASK) | |
73 | #define VTE_NUMLOCK_MASK GDK_MOD2_MASK | |
74 | ||
75 | /* Map the specified keyval/modifier setup, dependent on the mode, to either | |
76 | -- | |
77 | 1.7.8.rc3 | |
78 |