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.