file chooser: Make bindings work in save entry
authorMatthias Clasen <mclasen@redhat.com>
Fri, 17 Jul 2015 03:36:51 +0000 (23:36 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 17 Jul 2015 03:38:47 +0000 (23:38 -0400)
With the name entry being in the header bar now, we no longer
get bindings working by just letting the key event bubble up,
we have to explicitly apply them on key events that the save
entry is not handling.

gtk/gtkfilechooserwidget.c

index ddadbab0387259f4bfb04e9a7560b6b0ab2d1c32..30db0351a85d0ad1ea31e450c43fc08272530335 100644 (file)
@@ -2556,6 +2556,17 @@ location_entry_create (GtkFileChooserWidget *impl)
     }
 }
 
+static gboolean
+external_entry_key_press (GtkWidget            *entry,
+                          GdkEventKey          *event,
+                          GtkFileChooserWidget *impl)
+{
+  /* Since the entry is not a descendent of the file chooser widget
+   * in this case, we need to manually make our bindings apply.
+   */
+  return gtk_bindings_activate_event (G_OBJECT (impl), event);
+}
+
 /* Creates the widgets specific to Save mode */
 static void
 save_widgets_create (GtkFileChooserWidget *impl)
@@ -2576,6 +2587,9 @@ save_widgets_create (GtkFileChooserWidget *impl)
       location_entry_disconnect (impl);
       priv->location_entry = priv->external_entry;
       location_entry_setup (impl);
+
+      g_signal_connect_after (priv->external_entry, "key-press-event",
+                              G_CALLBACK (external_entry_key_press), impl);
       return;
     }
 
@@ -2621,6 +2635,8 @@ save_widgets_destroy (GtkFileChooserWidget *impl)
 
   if (priv->external_entry && priv->external_entry == priv->location_entry)
     {
+      g_signal_handlers_disconnect_by_func (priv->external_entry, external_entry_key_press, impl);
+
       location_entry_disconnect (impl);
       priv->location_entry = NULL;
     }