diff options
author | Federico Mena Quintero <federico@gnome.org> | 2013-02-13 11:01:50 -0600 |
---|---|---|
committer | Federico Mena Quintero <federico@gnome.org> | 2013-02-13 18:01:39 -0600 |
commit | cf921c353b074a5ba17a1b823e7ac673c1226735 (patch) | |
tree | 96e07e3cac30bb4bec8dee9319aff015719ef6e9 /gtk/gtkfilechooserbutton.c | |
parent | e65cf0b70d64ac600078f51932469ab8672c67d7 (diff) | |
download | gtk+-cf921c353b074a5ba17a1b823e7ac673c1226735.tar.gz |
filechooserbutton: Restore to an empty previous selection properly
If no file was originally selected in the GtkFileChooserButton, then its
internal dialog is brought up and cancelled, then we need to restore the
selection back to none. GtkFileChooser, though, doesn't like to
select a NULL file, so call _unselect_all() in that condition.
Signed-off-by: Federico Mena Quintero <federico@gnome.org>
Diffstat (limited to 'gtk/gtkfilechooserbutton.c')
-rw-r--r-- | gtk/gtkfilechooserbutton.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/gtk/gtkfilechooserbutton.c b/gtk/gtkfilechooserbutton.c index ba2a445e6a..4604cdd154 100644 --- a/gtk/gtkfilechooserbutton.c +++ b/gtk/gtkfilechooserbutton.c @@ -2555,6 +2555,17 @@ fs_bookmarks_changed_cb (GtkFileSystem *fs, update_combo_box (user_data); } +static void +restore_inactive_selection (GtkFileChooserButton *button) +{ + GtkFileChooserButtonPrivate *priv = button->priv; + + if (priv->selection_while_inactive) + gtk_file_chooser_select_file (GTK_FILE_CHOOSER (priv->dialog), priv->selection_while_inactive, NULL); + else + gtk_file_chooser_unselect_all (GTK_FILE_CHOOSER (priv->dialog)); +} + /* Dialog */ static void open_dialog (GtkFileChooserButton *button) @@ -2589,7 +2600,7 @@ open_dialog (GtkFileChooserButton *button) g_signal_handler_block (priv->dialog, priv->dialog_selection_changed_id); - gtk_file_chooser_select_file (GTK_FILE_CHOOSER (priv->dialog), priv->selection_while_inactive, NULL); + restore_inactive_selection (button); priv->active = TRUE; } @@ -2772,12 +2783,10 @@ dialog_response_cb (GtkDialog *dialog, update_label_and_image (button); update_combo_box (button); } - else if (priv->selection_while_inactive) + else { - gtk_file_chooser_select_file (GTK_FILE_CHOOSER (dialog), priv->selection_while_inactive, NULL); + restore_inactive_selection (button); } - else - gtk_file_chooser_unselect_all (GTK_FILE_CHOOSER (dialog)); if (priv->active) { |