diff options
author | Federico Mena Quintero <federico@ximian.com> | 2005-10-07 19:54:32 +0000 |
---|---|---|
committer | Federico Mena Quintero <federico@src.gnome.org> | 2005-10-07 19:54:32 +0000 |
commit | cca93029274bc39591f1d844ada3564c73c232da (patch) | |
tree | 58cedd63ca142670c4518994457b081394d91088 /gtk/gtkfilechooserbutton.c | |
parent | cab26ded6f1bc150f83178c68f058608534901d9 (diff) | |
download | gtk+-cca93029274bc39591f1d844ada3564c73c232da.tar.gz |
Fixes bug #317999:
2005-10-07 Federico Mena Quintero <federico@ximian.com>
Fixes bug #317999:
* tests/autotestfilechooser.c (test_reload_sequence): Ensure that
the the result of gtk_file_chooser_get_folder() is NULL or
non-NULL at the right times. Log the tests.
(test_button_folder_states): New test for the initial states of
the current folder in GtkFileChooserButton.
(main): Test that the number of warnings/errors/critical errors is
zero.
* gtk/gtkfilechooser.c (gtk_file_chooser_get_current_folder):
Clarify the documentation on when this can return NULL.
(gtk_file_chooser_get_current_folder_uri): Likewise.
* gtk/gtkfilechooserbutton.c (struct
_GtkFileChooserButtonPrivate): Added a folder_has_been_set flag;
we use it to keep track of whether a folder has been set.
(gtk_file_chooser_button_map): Implement. If no folder has been
loaded before, we at least try to load $cwd here.
(gtk_file_chooser_button_constructor): If the construct-time
dialog already has a folder set, turn on our folder_has_been_set
flag.
(dialog_current_folder_changed_cb): Turn on our
folder_has_been_set flag.
Diffstat (limited to 'gtk/gtkfilechooserbutton.c')
-rw-r--r-- | gtk/gtkfilechooserbutton.c | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/gtk/gtkfilechooserbutton.c b/gtk/gtkfilechooserbutton.c index e9117f9328..94458b9a62 100644 --- a/gtk/gtkfilechooserbutton.c +++ b/gtk/gtkfilechooserbutton.c @@ -155,6 +155,9 @@ struct _GtkFileChooserButtonPrivate /* Used for hiding/showing the dialog when the button is hidden */ guint8 active : 1; + + /* Used to track whether we need to set a default current folder on ::map() */ + guint8 folder_has_been_set : 1; }; @@ -211,6 +214,7 @@ static void gtk_file_chooser_button_show_all (GtkWidget *wi static void gtk_file_chooser_button_hide_all (GtkWidget *widget); static void gtk_file_chooser_button_show (GtkWidget *widget); static void gtk_file_chooser_button_hide (GtkWidget *widget); +static void gtk_file_chooser_button_map (GtkWidget *widget); static gboolean gtk_file_chooser_button_mnemonic_activate (GtkWidget *widget, gboolean group_cycling); static void gtk_file_chooser_button_style_set (GtkWidget *widget, @@ -322,6 +326,7 @@ gtk_file_chooser_button_class_init (GtkFileChooserButtonClass * class) widget_class->hide_all = gtk_file_chooser_button_hide_all; widget_class->show = gtk_file_chooser_button_show; widget_class->hide = gtk_file_chooser_button_hide; + widget_class->map = gtk_file_chooser_button_map; widget_class->style_set = gtk_file_chooser_button_style_set; widget_class->screen_changed = gtk_file_chooser_button_screen_changed; widget_class->mnemonic_activate = gtk_file_chooser_button_mnemonic_activate; @@ -593,6 +598,7 @@ gtk_file_chooser_button_constructor (GType type, GObject *object; GtkFileChooserButtonPrivate *priv; GSList *list; + char *current_folder; object = (*G_OBJECT_CLASS (gtk_file_chooser_button_parent_class)->constructor) (type, n_params, @@ -627,6 +633,13 @@ gtk_file_chooser_button_constructor (GType type, -1); } + current_folder = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER (priv->dialog)); + if (current_folder != NULL) + { + priv->folder_has_been_set = TRUE; + g_free (current_folder); + } + g_free (priv->backend); priv->backend = NULL; @@ -1013,6 +1026,28 @@ gtk_file_chooser_button_hide (GtkWidget *widget) (*GTK_WIDGET_CLASS (gtk_file_chooser_button_parent_class)->hide) (widget); } +static void +gtk_file_chooser_button_map (GtkWidget *widget) +{ + GtkFileChooserButtonPrivate *priv; + + priv = GTK_FILE_CHOOSER_BUTTON_GET_PRIVATE (widget); + + if (!priv->folder_has_been_set) + { + char *current_working_dir; + + current_working_dir = g_get_current_dir (); + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (widget), current_working_dir); + g_free (current_working_dir); + + priv->folder_has_been_set = TRUE; + } + + if (GTK_WIDGET_CLASS (gtk_file_chooser_button_parent_class)->map) + (*GTK_WIDGET_CLASS (gtk_file_chooser_button_parent_class)->map) (widget); +} + static gboolean gtk_file_chooser_button_mnemonic_activate (GtkWidget *widget, gboolean group_cycling) @@ -2060,7 +2095,15 @@ static void dialog_current_folder_changed_cb (GtkFileChooser *dialog, gpointer user_data) { - g_signal_emit_by_name (user_data, "current-folder-changed"); + GtkFileChooserButton *button; + GtkFileChooserButtonPrivate *priv; + + button = GTK_FILE_CHOOSER_BUTTON (user_data); + priv = GTK_FILE_CHOOSER_BUTTON_GET_PRIVATE (button); + + priv->folder_has_been_set = TRUE; + + g_signal_emit_by_name (button, "current-folder-changed"); } static void |