0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

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 #6092)
This commit is contained in:
Bram Moolenaar 2020-05-16 18:57:53 +02:00
parent 129d6bf6b3
commit aa5fc4ec51
2 changed files with 10 additions and 4 deletions

View File

@ -1023,7 +1023,7 @@ focus_out_event(GtkWidget *widget UNUSED,
* http://developer.gnome.org/doc/API/2.0/gdk/gdk-Event-Structures.html#GdkEventKey * http://developer.gnome.org/doc/API/2.0/gdk/gdk-Event-Structures.html#GdkEventKey
*/ */
static int 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; int len;
guint32 uc; guint32 uc;
@ -1031,8 +1031,8 @@ keyval_to_string(unsigned int keyval, unsigned int state, char_u *string)
uc = gdk_keyval_to_unicode(keyval); uc = gdk_keyval_to_unicode(keyval);
if (uc != 0) if (uc != 0)
{ {
// Check for CTRL-foo // Check for CTRL-char
if ((state & GDK_CONTROL_MASK) && uc >= 0x20 && uc < 0x80) if ((*state & GDK_CONTROL_MASK) && uc >= 0x20 && uc < 0x80)
{ {
// These mappings look arbitrary at the first glance, but in fact // These mappings look arbitrary at the first glance, but in fact
// resemble quite exactly the behaviour of the GTK+ 1.2 GUI on my // resemble quite exactly the behaviour of the GTK+ 1.2 GUI on my
@ -1051,6 +1051,10 @@ keyval_to_string(unsigned int keyval, unsigned int state, char_u *string)
else else
string[0] = uc; string[0] = uc;
len = 1; len = 1;
if (string[0] != uc)
// The modifier was used, remove it.
*state = *state & ~GDK_CONTROL_MASK;
} }
else else
{ {
@ -1169,7 +1173,7 @@ key_press_event(GtkWidget *widget UNUSED,
else else
#endif #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. // Careful: convert_input() doesn't handle the NUL character.
// No need to convert pure ASCII anyway, thus the len > 1 check. // No need to convert pure ASCII anyway, thus the len > 1 check.

View File

@ -746,6 +746,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
770,
/**/ /**/
769, 769,
/**/ /**/