box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
label = gtk_label_new_with_mnemonic (_("_Name"));
- entry = _gtk_file_chooser_entry_new (FALSE);
+ entry = _gtk_file_chooser_entry_new (FALSE, FALSE);
gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry);
gtk_container_add (GTK_CONTAINER (box), label);
gtk_container_add (GTK_CONTAINER (box), entry);
#include "gtksizerequest.h"
#include "gtkwindow.h"
#include "gtkintl.h"
+#include "gtkmarshalers.h"
typedef struct _GtkFileChooserEntryClass GtkFileChooserEntryClass;
guint current_folder_loaded : 1;
guint complete_on_load : 1;
guint eat_tabs : 1;
+ guint eat_escape : 1;
guint local_only : 1;
};
N_COLUMNS
};
+enum
+{
+ HIDE_ENTRY,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
static void gtk_file_chooser_entry_finalize (GObject *object);
static void gtk_file_chooser_entry_dispose (GObject *object);
static void gtk_file_chooser_entry_grab_focus (GtkWidget *widget);
widget_class->grab_focus = gtk_file_chooser_entry_grab_focus;
widget_class->focus_out_event = gtk_file_chooser_entry_focus_out_event;
+
+ signals[HIDE_ENTRY] =
+ g_signal_new (I_("hide-entry"),
+ G_OBJECT_CLASS_TYPE (gobject_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ 0,
+ NULL, NULL,
+ _gtk_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
}
static void
chooser_entry = GTK_FILE_CHOOSER_ENTRY (widget);
editable = GTK_EDITABLE (widget);
+ if (event->keyval == GDK_KEY_Escape &&
+ chooser_entry->eat_escape)
+ {
+ g_signal_emit (widget, signals[HIDE_ENTRY], 0);
+ return TRUE;
+ }
+
if (!chooser_entry->eat_tabs)
return FALSE;
/**
* _gtk_file_chooser_entry_new:
* @eat_tabs: If %FALSE, allow focus navigation with the tab key.
+ * @eat_escape: If %TRUE, capture Escape key presses and emit ::hide-entry
*
* Creates a new #GtkFileChooserEntry object. #GtkFileChooserEntry
* is an internal implementation widget for the GTK+ file chooser
* Returns: the newly created #GtkFileChooserEntry
**/
GtkWidget *
-_gtk_file_chooser_entry_new (gboolean eat_tabs)
+_gtk_file_chooser_entry_new (gboolean eat_tabs,
+ gboolean eat_escape)
{
GtkFileChooserEntry *chooser_entry;
chooser_entry = g_object_new (GTK_TYPE_FILE_CHOOSER_ENTRY, NULL);
chooser_entry->eat_tabs = (eat_tabs != FALSE);
+ chooser_entry->eat_escape = (eat_escape != FALSE);
return GTK_WIDGET (chooser_entry);
}
typedef struct _GtkFileChooserEntry GtkFileChooserEntry;
GType _gtk_file_chooser_entry_get_type (void) G_GNUC_CONST;
-GtkWidget * _gtk_file_chooser_entry_new (gboolean eat_tab);
+GtkWidget * _gtk_file_chooser_entry_new (gboolean eat_tab,
+ gboolean eat_escape);
void _gtk_file_chooser_entry_set_action (GtkFileChooserEntry *chooser_entry,
GtkFileChooserAction action);
GtkFileChooserAction _gtk_file_chooser_entry_get_action (GtkFileChooserEntry *chooser_entry);
reset_location_timeout (impl);
}
+static void
+location_entry_close_clicked (GtkFileChooserWidget *impl)
+{
+ location_mode_set (impl, LOCATION_MODE_PATH_BAR);
+}
+
static void
location_entry_setup (GtkFileChooserWidget *impl)
{
g_signal_connect (priv->location_entry, "changed",
G_CALLBACK (location_entry_changed_cb), impl);
+ g_signal_connect_swapped (priv->location_entry, "hide-entry",
+ G_CALLBACK (location_entry_close_clicked), impl);
_gtk_file_chooser_entry_set_local_only (GTK_FILE_CHOOSER_ENTRY (priv->location_entry), priv->local_only);
_gtk_file_chooser_entry_set_action (GTK_FILE_CHOOSER_ENTRY (priv->location_entry), priv->action);
if (!priv->location_entry)
{
- priv->location_entry = _gtk_file_chooser_entry_new (TRUE);
+ priv->location_entry = _gtk_file_chooser_entry_new (TRUE, TRUE);
location_entry_setup (impl);
}
}