summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@gnome.org>2013-02-13 11:01:50 -0600
committerFederico Mena Quintero <federico@gnome.org>2013-02-13 18:01:39 -0600
commitcf921c353b074a5ba17a1b823e7ac673c1226735 (patch)
tree96e07e3cac30bb4bec8dee9319aff015719ef6e9
parente65cf0b70d64ac600078f51932469ab8672c67d7 (diff)
downloadgtk+-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>
-rw-r--r--gtk/gtkfilechooserbutton.c19
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)
{