@@ -31,6 +31,8 @@ class KeyModifierMaskToXModifierMask {
31
31
meta_modifier = 0 ;
32
32
num_lock_modifier = 0 ;
33
33
mode_switch_modifier = 0 ;
34
+ level3_modifier = 0 ; // AltGr is often mapped to the level3 modifier
35
+ level5_modifier = 0 ; // AltGr is mapped to the level5 modifier in the Neo layout family
34
36
35
37
if (!display) {
36
38
return ;
@@ -50,8 +52,6 @@ class KeyModifierMaskToXModifierMask {
50
52
continue ;
51
53
}
52
54
53
- // TODO: Also check for XK_ISO_Level3_Shift 0xFE03
54
-
55
55
if (keysym == XK_Alt_L || keysym == XK_Alt_R) {
56
56
alt_modifier = 1 << mod_index;
57
57
}
@@ -64,6 +64,12 @@ class KeyModifierMaskToXModifierMask {
64
64
if (keysym == XK_Num_Lock) {
65
65
num_lock_modifier = 1 << mod_index;
66
66
}
67
+ if (keysym == XK_ISO_Level3_Shift) {
68
+ level3_modifier = 1 << mod_index;
69
+ }
70
+ if (keysym == XK_ISO_Level5_Shift) {
71
+ level5_modifier = 1 << mod_index;
72
+ }
67
73
}
68
74
}
69
75
@@ -94,6 +100,14 @@ class KeyModifierMaskToXModifierMask {
94
100
x_modifier |= num_lock_modifier;
95
101
}
96
102
103
+ if (keyMod & kLevel3KeyModifierMask ) {
104
+ x_modifier |= level3_modifier;
105
+ }
106
+
107
+ if (keyMod & kLevel5KeyModifierMask ) {
108
+ x_modifier |= level5_modifier;
109
+ }
110
+
97
111
return x_modifier;
98
112
}
99
113
@@ -106,6 +120,8 @@ class KeyModifierMaskToXModifierMask {
106
120
int meta_modifier;
107
121
int num_lock_modifier;
108
122
int mode_switch_modifier;
123
+ int level3_modifier;
124
+ int level5_modifier;
109
125
110
126
DISALLOW_COPY_AND_ASSIGN (KeyModifierMaskToXModifierMask);
111
127
};
@@ -181,17 +197,31 @@ napi_value _GetKeyMap(napi_env env, napi_callback_info info) {
181
197
}
182
198
183
199
{
184
- key_event->state = mask_provider->XModFromKeyMod (kControlKeyModifierMask | kAltKeyModifierMask );
200
+ key_event->state = mask_provider->XModFromKeyMod (kLevel3KeyModifierMask );
185
201
std::string withAltGr = GetStrFromXEvent (&event);
186
202
NAPI_CALL (env, napi_set_named_property_string_utf8 (env, entry, " withAltGr" , withAltGr.c_str ()));
187
203
}
188
204
189
205
{
190
- key_event->state = mask_provider->XModFromKeyMod (kShiftKeyModifierMask | kControlKeyModifierMask | kAltKeyModifierMask );
206
+ key_event->state = mask_provider->XModFromKeyMod (kShiftKeyModifierMask | kLevel3KeyModifierMask );
191
207
std::string withShiftAltGr = GetStrFromXEvent (&event);
192
208
NAPI_CALL (env, napi_set_named_property_string_utf8 (env, entry, " withShiftAltGr" , withShiftAltGr.c_str ()));
193
209
}
194
210
211
+ {
212
+ // level 5 is important for the Neo layout family
213
+ key_event->state = mask_provider->XModFromKeyMod (kLevel5KeyModifierMask );
214
+ std::string withLevel5 = GetStrFromXEvent (&event);
215
+ NAPI_CALL (env, napi_set_named_property_string_utf8 (env, entry, " withLevel5" , withLevel5.c_str ()));
216
+ }
217
+
218
+ {
219
+ // level3 + level5 is Level 6 in terms of the Neo layout family. (Shift + level5 has no special meaning.)
220
+ key_event->state = mask_provider->XModFromKeyMod (kLevel3KeyModifierMask | kLevel5KeyModifierMask );
221
+ std::string withLevel3Level5 = GetStrFromXEvent (&event);
222
+ NAPI_CALL (env, napi_set_named_property_string_utf8 (env, entry, " withLevel3Level5" , withLevel3Level5.c_str ()));
223
+ }
224
+
195
225
NAPI_CALL (env, napi_set_named_property (env, result, code, entry));
196
226
}
197
227
0 commit comments