Package: libgtk2.0-0 Version: 2.24.25-3+deb8u1 Severity: normal Tags: upstream patch
Dear Maintainer, In some cases, GTK will not release the keyboard grab after interacting with menus, leading to the keyboard being unusable in any other app/widget (not even WM/desktop shortcuts). The grab can be force-released only by a mouse interaction, rendering keyboard-only navigation impossible. This is especially problematic for people relying on accessibility features, but it affects eveyone falling in the issue as normal input doesn't work anymore. This issue is for example visible in mate-panel's main menu. Upstream GTK report: https://bugzilla.gnome.org/show_bug.cgi?id=554057 It was against GTK3 in its early days, but affects GTK2 just the same. Patch backporting the changs to GTK2 is available in comment #18: https://bugzilla.gnome.org/show_bug.cgi?id=554057#c18 This report includes a simple test application that reproduces the issue. Report on mate-panel: https://github.com/mate-desktop/mate-panel/issues/505 Please consider including this patch in order to fix keyboard grab lockup at least when navigating mate-panel with the keyboard. Regards, Colomban -- System Information: Debian Release: 8.6 APT prefers stable-updates APT policy: (500, 'stable-updates'), (500, 'stable') Architecture: amd64 (x86_64) Kernel: Linux 3.16.0-4-amd64 (SMP w/2 CPU cores) Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) Versions of packages libgtk2.0-0 depends on: ii libatk1.0-0 2.14.0-1 ii libc6 2.19-18+deb8u6 ii libcairo2 1.14.0-2.1+deb8u1 ii libcups2 1.7.5-11+deb8u1 ii libfontconfig1 2.11.0-6.3+deb8u1 ii libfreetype6 2.5.2-3+deb8u1 ii libgdk-pixbuf2.0-0 2.31.1-2+deb8u5 ii libglib2.0-0 2.42.1-1+b1 ii libgtk2.0-common 2.24.25-3+deb8u1 ii libpango-1.0-0 1.36.8-3 ii libpangocairo-1.0-0 1.36.8-3 ii libpangoft2-1.0-0 1.36.8-3 ii libx11-6 2:1.6.2-3 ii libxcomposite1 1:0.4.4-1 ii libxcursor1 1:1.1.14-1+b1 ii libxdamage1 1:1.1.4-2+b1 ii libxext6 2:1.3.3-1 ii libxfixes3 1:5.0.1-2+b2 ii libxi6 2:1.7.4-1+b2 ii libxinerama1 2:1.1.3-1+b1 ii libxrandr2 2:1.4.2-1+b1 ii libxrender1 1:0.9.8-1+b1 ii multiarch-support 2.19-18+deb8u6 ii shared-mime-info 1.3-1 Versions of packages libgtk2.0-0 recommends: ii hicolor-icon-theme 0.13-1 ii libgtk2.0-bin 2.24.25-3+deb8u1 Versions of packages libgtk2.0-0 suggests: ii gvfs 1.22.2-1 ii librsvg2-common 2.40.5-1+deb8u2 -- no debconf information
>From 34caf388443c7b77b33bdb2c8bbc59faf9affa82 Mon Sep 17 00:00:00 2001 From: Colomban Wendling <cwendl...@hypra.fr> Date: Wed, 7 Dec 2016 15:49:03 +0100 Subject: [PATCH] GtkMenuShell: always 'activate' menu shells Failing to do so can leave us with a stuck grab in some cases. https://bugzilla.gnome.org/show_bug.cgi?id=554057 Cherry-picks f5eee56b56e2f371a0dc659f2d402b0cfc1c42c2, 9833fbd77a63ee5dd8f6b5519831db2a4b29ebb9 and 4eac7f24177d947852574f11ef483b1c43fd17e5 from GTK3. --- gtk/gtkmenubar.c | 1 - gtk/gtkmenuitem.c | 2 -- gtk/gtkmenushell.c | 8 +++++--- gtk/gtkmenushell.h | 1 - 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/gtk/gtkmenubar.c b/gtk/gtkmenubar.c index 05de45c..e3b9554 100644 --- a/gtk/gtkmenubar.c +++ b/gtk/gtkmenubar.c @@ -618,7 +618,6 @@ window_key_press_handler (GtkWidget *widget, GtkMenuShell *menu_shell = GTK_MENU_SHELL (menubars->data); _gtk_menu_shell_set_keyboard_mode (menu_shell, TRUE); - _gtk_menu_shell_activate (menu_shell); gtk_menu_shell_select_first (menu_shell, FALSE); g_list_free (menubars); diff --git a/gtk/gtkmenuitem.c b/gtk/gtkmenuitem.c index 8f23b75..b706c7d 100644 --- a/gtk/gtkmenuitem.c +++ b/gtk/gtkmenuitem.c @@ -1433,8 +1433,6 @@ gtk_real_menu_item_activate_item (GtkMenuItem *menu_item) { GtkMenuShell *menu_shell = GTK_MENU_SHELL (widget->parent); - _gtk_menu_shell_activate (menu_shell); - gtk_menu_shell_select_item (GTK_MENU_SHELL (widget->parent), widget); _gtk_menu_item_popup_submenu (widget, FALSE); diff --git a/gtk/gtkmenushell.c b/gtk/gtkmenushell.c index a7ad7b5..48de6a8 100644 --- a/gtk/gtkmenushell.c +++ b/gtk/gtkmenushell.c @@ -563,8 +563,8 @@ gtk_menu_shell_realize (GtkWidget *widget) gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL); } -void -_gtk_menu_shell_activate (GtkMenuShell *menu_shell) +static void +gtk_menu_shell_activate (GtkMenuShell *menu_shell) { if (!menu_shell->active) { @@ -609,7 +609,7 @@ gtk_menu_shell_button_press (GtkWidget *widget, if (!menu_shell->active || !menu_shell->button) { - _gtk_menu_shell_activate (menu_shell); + gtk_menu_shell_activate (menu_shell); menu_shell->button = event->button; @@ -1204,6 +1204,8 @@ gtk_menu_shell_real_select_item (GtkMenuShell *menu_shell, return; } + gtk_menu_shell_activate (menu_shell); + menu_shell->active_menu_item = menu_item; if (pack_dir == GTK_PACK_DIRECTION_TTB || pack_dir == GTK_PACK_DIRECTION_BTT) _gtk_menu_item_set_placement (GTK_MENU_ITEM (menu_shell->active_menu_item), diff --git a/gtk/gtkmenushell.h b/gtk/gtkmenushell.h index 7672a2b..2d90c33 100644 --- a/gtk/gtkmenushell.h +++ b/gtk/gtkmenushell.h @@ -116,7 +116,6 @@ void gtk_menu_shell_select_first (GtkMenuShell *menu_shell, gboolean search_sensitive); void _gtk_menu_shell_select_last (GtkMenuShell *menu_shell, gboolean search_sensitive); -void _gtk_menu_shell_activate (GtkMenuShell *menu_shell); gint _gtk_menu_shell_get_popup_delay (GtkMenuShell *menu_shell); void gtk_menu_shell_cancel (GtkMenuShell *menu_shell); -- 2.1.4