summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk/gtkfilechooserwidget.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c
index ddadbab038..30db0351a8 100644
--- a/gtk/gtkfilechooserwidget.c
+++ b/gtk/gtkfilechooserwidget.c
@@ -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;
}