From 794230e7086e1b829e5806fbf70159ac6c541ecd Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 6 Sep 2014 20:56:03 -0400 Subject: [PATCH] GtkCellRendererAccel: Try harder to capture bound keys Add a grab on the editable widget, so that we can capture also shortcuts which are bound in the application itself. https://bugzilla.gnome.org/736203 --- gtk/gtkcellrendereraccel.c | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/gtk/gtkcellrendereraccel.c b/gtk/gtkcellrendereraccel.c index eb660f5664..60f52c8b81 100644 --- a/gtk/gtkcellrendereraccel.c +++ b/gtk/gtkcellrendereraccel.c @@ -519,7 +519,7 @@ gtk_cell_renderer_accel_start_editing (GtkCellRenderer *cell, gtk_container_add (GTK_CONTAINER (eventbox), label); gtk_widget_show_all (eventbox); - gtk_widget_grab_focus (eventbox); + gtk_grab_add (eventbox); return GTK_CELL_EDITABLE (eventbox); } @@ -659,6 +659,7 @@ gtk_cell_editable_event_box_key_press_event (GtkWidget *widget, edited = TRUE; out: + gtk_grab_remove (box); gtk_cell_renderer_accel_ungrab (GTK_CELL_RENDERER_ACCEL (box->cell)); gtk_cell_editable_editing_done (GTK_CELL_EDITABLE (widget)); gtk_cell_editable_remove_widget (GTK_CELL_EDITABLE (widget)); @@ -677,24 +678,12 @@ gtk_cell_editable_event_box_unrealize (GtkWidget *widget) { GtkCellEditableEventBox *box = (GtkCellEditableEventBox*)widget; + gtk_grab_remove (box); gtk_cell_renderer_accel_ungrab (GTK_CELL_RENDERER_ACCEL (box->cell)); GTK_WIDGET_CLASS (gtk_cell_editable_event_box_parent_class)->unrealize (widget); } -static gboolean -gtk_cell_editable_event_box_focus_out (GtkWidget *widget, - GdkEventFocus *event) -{ - GtkCellEditableEventBox *box = (GtkCellEditableEventBox*)widget; - - gtk_cell_renderer_accel_ungrab (GTK_CELL_RENDERER_ACCEL (box->cell)); - gtk_cell_editable_editing_done (GTK_CELL_EDITABLE (widget)); - gtk_cell_editable_remove_widget (GTK_CELL_EDITABLE (widget)); - - return FALSE; -} - static void gtk_cell_editable_event_box_set_property (GObject *object, guint prop_id, @@ -767,7 +756,6 @@ gtk_cell_editable_event_box_class_init (GtkCellEditableEventBoxClass *class) widget_class->key_press_event = gtk_cell_editable_event_box_key_press_event; widget_class->unrealize = gtk_cell_editable_event_box_unrealize; - widget_class->focus_out_event = gtk_cell_editable_event_box_focus_out; g_object_class_override_property (object_class, PROP_EDITING_CANCELED,