# HG changeset patch # User Bram Moolenaar # Date 1589648407 -7200 # Node ID 682513df5af1c71205a993c1554da8ef496220f7 # Parent df50f7b7830d15094a1f9e2a6506df5818b54a6f patch 8.2.0770: cannot map CTRL-B when using the GUI Commit: https://github.com/vim/vim/commit/aa5fc4ec51b00e91f174ac83c8ff68becf5f42bb Author: Bram Moolenaar 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) diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c --- 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. diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -747,6 +747,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 770, +/**/ 769, /**/ 768,