Skip to content

Commit

Permalink
Merge pull request #19 from MaxGyver83/feature/support-XK_ISO_Level3_…
Browse files Browse the repository at this point in the history
…Shift-and-XK_ISO_Level5_Shift
  • Loading branch information
alexdima committed Aug 7, 2020
2 parents 86d839e + 854d94c commit ef153d2
Show file tree
Hide file tree
Showing 7 changed files with 4,334 additions and 722 deletions.
2 changes: 1 addition & 1 deletion azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,4 @@ jobs:
- template: build-template.yml
parameters:
name: Windows
vmImage: 'vs2017-win2016'
vmImage: 'vs2017-win2016'
7 changes: 5 additions & 2 deletions deps/chromium/keyboard_codes.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,10 @@ enum KeyModifierMask {
kControlKeyModifierMask = 1 << 1,
kMetaKeyModifierMask = 1 << 2,
kShiftKeyModifierMask = 1 << 3,
kNumLockKeyModifierMask = 1 << 4
kNumLockKeyModifierMask = 1 << 4,
kLevel3KeyModifierMask = 1 << 5,
kLevel5KeyModifierMask = 1 << 6
};

#endif // UI_EVENTS_KEYCODES_KEYBOARD_CODES_H_
#endif // UI_EVENTS_KEYCODES_KEYBOARD_CODES_H_

38 changes: 34 additions & 4 deletions src/keyboard_x.cc
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ class KeyModifierMaskToXModifierMask {
meta_modifier = 0;
num_lock_modifier = 0;
mode_switch_modifier = 0;
level3_modifier = 0; // AltGr is often mapped to the level3 modifier
level5_modifier = 0; // AltGr is mapped to the level5 modifier in the Neo layout family

if (!display) {
return;
Expand All @@ -50,8 +52,6 @@ class KeyModifierMaskToXModifierMask {
continue;
}

// TODO: Also check for XK_ISO_Level3_Shift 0xFE03

if (keysym == XK_Alt_L || keysym == XK_Alt_R) {
alt_modifier = 1 << mod_index;
}
Expand All @@ -64,6 +64,12 @@ class KeyModifierMaskToXModifierMask {
if (keysym == XK_Num_Lock) {
num_lock_modifier = 1 << mod_index;
}
if (keysym == XK_ISO_Level3_Shift) {
level3_modifier = 1 << mod_index;
}
if (keysym == XK_ISO_Level5_Shift) {
level5_modifier = 1 << mod_index;
}
}
}

Expand Down Expand Up @@ -94,6 +100,14 @@ class KeyModifierMaskToXModifierMask {
x_modifier |= num_lock_modifier;
}

if (keyMod & kLevel3KeyModifierMask) {
x_modifier |= level3_modifier;
}

if (keyMod & kLevel5KeyModifierMask) {
x_modifier |= level5_modifier;
}

return x_modifier;
}

Expand All @@ -106,6 +120,8 @@ class KeyModifierMaskToXModifierMask {
int meta_modifier;
int num_lock_modifier;
int mode_switch_modifier;
int level3_modifier;
int level5_modifier;

DISALLOW_COPY_AND_ASSIGN(KeyModifierMaskToXModifierMask);
};
Expand Down Expand Up @@ -181,17 +197,31 @@ napi_value _GetKeyMap(napi_env env, napi_callback_info info) {
}

{
key_event->state = mask_provider->XModFromKeyMod(kControlKeyModifierMask | kAltKeyModifierMask);
key_event->state = mask_provider->XModFromKeyMod(kLevel3KeyModifierMask);
std::string withAltGr = GetStrFromXEvent(&event);
NAPI_CALL(env, napi_set_named_property_string_utf8(env, entry, "withAltGr", withAltGr.c_str()));
}

{
key_event->state = mask_provider->XModFromKeyMod(kShiftKeyModifierMask | kControlKeyModifierMask | kAltKeyModifierMask);
key_event->state = mask_provider->XModFromKeyMod(kShiftKeyModifierMask | kLevel3KeyModifierMask);
std::string withShiftAltGr = GetStrFromXEvent(&event);
NAPI_CALL(env, napi_set_named_property_string_utf8(env, entry, "withShiftAltGr", withShiftAltGr.c_str()));
}

{
// level 5 is important for the Neo layout family
key_event->state = mask_provider->XModFromKeyMod(kLevel5KeyModifierMask);
std::string withLevel5 = GetStrFromXEvent(&event);
NAPI_CALL(env, napi_set_named_property_string_utf8(env, entry, "withLevel5", withLevel5.c_str()));
}

{
// level3 + level5 is Level 6 in terms of the Neo layout family. (Shift + level5 has no special meaning.)
key_event->state = mask_provider->XModFromKeyMod(kLevel3KeyModifierMask | kLevel5KeyModifierMask);
std::string withLevel3Level5 = GetStrFromXEvent(&event);
NAPI_CALL(env, napi_set_named_property_string_utf8(env, entry, "withLevel3Level5", withLevel3Level5.c_str()));
}

NAPI_CALL(env, napi_set_named_property(env, result, code, entry));
}

Expand Down

0 comments on commit ef153d2

Please sign in to comment.