From 7ba4268d6b4904dc43316e072a9aa3b5212c33d9 Mon Sep 17 00:00:00 2001 From: Federico Mena Quintero Date: Fri, 23 Jan 2009 00:54:22 +0000 Subject: Factor out function to discard the loading process and the current folder file (discard_loading_and_current_folder_file): Factor out function to cancel the cancellable and discard the current_folder_file, i.e. to reset the invariant to the "nothing valid is loaded" case. (gtk_file_chooser_entry_dispose): Use discard_loading_and_current_folder_file(). (reload_current_folder): Likewise. (refresh_current_folder_and_file_part): Likewise, and ensure that the error cases result in the invariant being held. Signed-off-by: Federico Mena Quintero svn path=/trunk/; revision=22181 --- gtk/gtkfilechooserentry.c | 47 +++++++++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 18 deletions(-) (limited to 'gtk/gtkfilechooserentry.c') diff --git a/gtk/gtkfilechooserentry.c b/gtk/gtkfilechooserentry.c index de6adea7f7..e1c884a62b 100644 --- a/gtk/gtkfilechooserentry.c +++ b/gtk/gtkfilechooserentry.c @@ -268,6 +268,22 @@ discard_current_folder (GtkFileChooserEntry *chooser_entry) } } +static void +discard_loading_and_current_folder_file (GtkFileChooserEntry *chooser_entry) +{ + if (chooser_entry->load_folder_cancellable) + { + g_cancellable_cancel (chooser_entry->load_folder_cancellable); + chooser_entry->load_folder_cancellable = NULL; + } + + if (chooser_entry->current_folder_file) + { + g_object_unref (chooser_entry->current_folder_file); + chooser_entry->current_folder_file = NULL; + } +} + static void gtk_file_chooser_entry_dispose (GObject *object) { @@ -275,6 +291,7 @@ gtk_file_chooser_entry_dispose (GObject *object) remove_completion_feedback (chooser_entry); discard_current_folder (chooser_entry); + discard_loading_and_current_folder_file (chooser_entry); if (chooser_entry->start_autocompletion_idle_id != 0) { @@ -288,12 +305,6 @@ gtk_file_chooser_entry_dispose (GObject *object) chooser_entry->completion_store = NULL; } - if (chooser_entry->load_folder_cancellable) - { - g_cancellable_cancel (chooser_entry->load_folder_cancellable); - chooser_entry->load_folder_cancellable = NULL; - } - if (chooser_entry->file_system) { g_object_unref (chooser_entry->file_system); @@ -1458,17 +1469,9 @@ reload_current_folder (GtkFileChooserEntry *chooser_entry, { reload = TRUE; - /* We changed our current directory. We need to clear out the old - * directory information. - */ - if (chooser_entry->load_folder_cancellable) - { - g_cancellable_cancel (chooser_entry->load_folder_cancellable); - chooser_entry->load_folder_cancellable = NULL; - } - discard_current_folder (chooser_entry); - g_object_unref (chooser_entry->current_folder_file); + discard_loading_and_current_folder_file (chooser_entry); + chooser_entry->current_folder_file = (folder_file) ? g_object_ref (folder_file) : NULL; } } @@ -1562,8 +1565,16 @@ refresh_current_folder_and_file_part (GtkFileChooserEntry *chooser_entry, chooser_entry->file_part = file_part; chooser_entry->file_part_pos = file_part_pos; - /* FMQ: this needs to return an error if the folder is not local */ - reload_current_folder (chooser_entry, folder_file, file_part_pos == -1); + if (result == REFRESH_OK) + { + /* FMQ: this needs to return an error if the folder is not local */ + reload_current_folder (chooser_entry, folder_file, file_part_pos == -1); + } + else + { + discard_current_folder (chooser_entry); + discard_loading_and_current_folder_file (chooser_entry); + } if (folder_file) g_object_unref (folder_file); -- cgit v1.2.1