Mercurial > vim
diff src/gui_gtk_x11.c @ 20431:682513df5af1 v8.2.0770
patch 8.2.0770: cannot map CTRL-B when using the GUI
Commit: https://github.com/vim/vim/commit/aa5fc4ec51b00e91f174ac83c8ff68becf5f42bb
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat May 16 18:57:53 2020 +0200
patch 8.2.0770: cannot map CTRL-B when using the GUI
Problem: Cannot map CTRL-B when using the GUI.
Solution: Reset the CTRL modifier when used. (closes https://github.com/vim/vim/issues/6092)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 16 May 2020 19:00:07 +0200 |
parents | 8590a462ad46 |
children | 3609e842f822 |
line wrap: on
line diff
--- a/src/gui_gtk_x11.c +++ b/src/gui_gtk_x11.c @@ -1023,7 +1023,7 @@ focus_out_event(GtkWidget *widget UNUSED * http://developer.gnome.org/doc/API/2.0/gdk/gdk-Event-Structures.html#GdkEventKey */ static int -keyval_to_string(unsigned int keyval, unsigned int state, char_u *string) +keyval_to_string(unsigned int keyval, unsigned int *state, char_u *string) { int len; guint32 uc; @@ -1031,8 +1031,8 @@ keyval_to_string(unsigned int keyval, un uc = gdk_keyval_to_unicode(keyval); if (uc != 0) { - // Check for CTRL-foo - if ((state & GDK_CONTROL_MASK) && uc >= 0x20 && uc < 0x80) + // Check for CTRL-char + if ((*state & GDK_CONTROL_MASK) && uc >= 0x20 && uc < 0x80) { // These mappings look arbitrary at the first glance, but in fact // resemble quite exactly the behaviour of the GTK+ 1.2 GUI on my @@ -1051,6 +1051,10 @@ keyval_to_string(unsigned int keyval, un else string[0] = uc; len = 1; + + if (string[0] != uc) + // The modifier was used, remove it. + *state = *state & ~GDK_CONTROL_MASK; } else { @@ -1169,7 +1173,7 @@ key_press_event(GtkWidget *widget UNUSED else #endif { - len = keyval_to_string(key_sym, state, string2); + len = keyval_to_string(key_sym, &state, string2); // Careful: convert_input() doesn't handle the NUL character. // No need to convert pure ASCII anyway, thus the len > 1 check.