diff options
author | Federico Mena Quintero <federico@novell.com> | 2009-01-23 00:54:22 +0000 |
---|---|---|
committer | Federico Mena Quintero <federico@src.gnome.org> | 2009-01-23 00:54:22 +0000 |
commit | 7ba4268d6b4904dc43316e072a9aa3b5212c33d9 (patch) | |
tree | 460baa50dc41dbb5a78c65c5c1c0e369476b97de /gtk/gtkfilechooserentry.c | |
parent | fe636e4be20a0140f2b1b52ad66acaeb9537ac14 (diff) | |
download | gtk+-7ba4268d6b4904dc43316e072a9aa3b5212c33d9.tar.gz |
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 <federico@novell.com>
svn path=/trunk/; revision=22181
Diffstat (limited to 'gtk/gtkfilechooserentry.c')
-rw-r--r-- | gtk/gtkfilechooserentry.c | 47 |
1 files changed, 29 insertions, 18 deletions
diff --git a/gtk/gtkfilechooserentry.c b/gtk/gtkfilechooserentry.c index de6adea7f7..e1c884a62b 100644 --- a/gtk/gtkfilechooserentry.c +++ b/gtk/gtkfilechooserentry.c @@ -269,12 +269,29 @@ 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) { GtkFileChooserEntry *chooser_entry = GTK_FILE_CHOOSER_ENTRY (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); |