Make key commands work on non-US keyboard layouts

`Ctrl-=` and `Ctrl-+` commands did not work on non-US like keyboard
layouts because `=` and `+` are produced differently in other layouts
e.g. `Shift` is required/not required respectively. The opposite of US
like layouts.

This patch fixes the issue by not checking if `Shift` is pressed/not
pressed when it's irrelevant to the command. Instead it uses the
`keyval` from GDK directly which has been transformed depending on
keyboard layout and pressed modifiers.

Fix #371
This commit is contained in:
Mikkel Oscar Lyderik 2016-07-31 20:14:13 +02:00
parent 7a7021f0dd
commit 305f5cb938
1 changed files with 9 additions and 7 deletions

View File

@ -916,9 +916,6 @@ gboolean key_press_cb(VteTerminal *vte, GdkEventKey *event, keybind_info *info)
} }
if (modifiers == (GDK_CONTROL_MASK|GDK_SHIFT_MASK)) { if (modifiers == (GDK_CONTROL_MASK|GDK_SHIFT_MASK)) {
switch (gdk_keyval_to_lower(event->keyval)) { switch (gdk_keyval_to_lower(event->keyval)) {
case GDK_KEY_plus:
increase_font_scale(vte);
return TRUE;
case GDK_KEY_t: case GDK_KEY_t:
launch_in_directory(vte); launch_in_directory(vte);
return TRUE; return TRUE;
@ -946,15 +943,20 @@ gboolean key_press_cb(VteTerminal *vte, GdkEventKey *event, keybind_info *info)
if (modify_key_feed(event, info, modify_table)) if (modify_key_feed(event, info, modify_table))
return TRUE; return TRUE;
} }
} else if ((modifiers == (GDK_CONTROL_MASK|GDK_MOD1_MASK)) || }
if ((modifiers == (GDK_CONTROL_MASK|GDK_MOD1_MASK)) ||
(modifiers == (GDK_CONTROL_MASK|GDK_MOD1_MASK|GDK_SHIFT_MASK))) { (modifiers == (GDK_CONTROL_MASK|GDK_MOD1_MASK|GDK_SHIFT_MASK))) {
if (modify_key_feed(event, info, modify_meta_table)) if (modify_key_feed(event, info, modify_meta_table))
return TRUE; return TRUE;
} else if (modifiers == GDK_CONTROL_MASK) { }
switch (gdk_keyval_to_lower(event->keyval)) { if (modifiers & GDK_CONTROL_MASK) {
switch (event->keyval) {
case GDK_KEY_Tab: case GDK_KEY_Tab:
overlay_show(&info->panel, overlay_mode::completion, vte); overlay_show(&info->panel, overlay_mode::completion, vte);
return TRUE; return TRUE;
case GDK_KEY_plus:
increase_font_scale(vte);
return TRUE;
case GDK_KEY_minus: case GDK_KEY_minus:
decrease_font_scale(vte); decrease_font_scale(vte);
return TRUE; return TRUE;