From e33e23a6d9403f634003e6fc611ba7d02b5cf950 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Mon, 13 Jun 2016 23:44:31 +0200 Subject: [PATCH] treeview: Ensure the treeview has the implicit grab before grabbing focus The cellrenderer signals might be taking the grab somewhere else, at which point it's dubious we should attempt to take the keyboard focus into the treeview. This concretely breaks popovers triggered from cellrenderer signals on button press, because the treeview will attempt to grab focus inconditionally then. https://bugzilla.gnome.org/show_bug.cgi?id=767468 --- gtk/gtktreeview.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index e51aae45ae..935ee6685b 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -3050,9 +3050,13 @@ static void grab_focus_and_unset_draw_keyfocus (GtkTreeView *tree_view) { GtkWidget *widget = GTK_WIDGET (tree_view); + GtkWidget *grab_widget = gtk_grab_get_current (); - if (gtk_widget_get_can_focus (widget) && !gtk_widget_has_focus (widget)) + if (gtk_widget_get_can_focus (widget) && + !gtk_widget_has_focus (widget) && + (!grab_widget || grab_widget == widget)) gtk_widget_grab_focus (widget); + tree_view->priv->draw_keyfocus = 0; }