summaryrefslogtreecommitdiff
path: root/gtk/gtkfilechooserentry.c
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@novell.com>2009-01-23 00:54:22 +0000
committerFederico Mena Quintero <federico@src.gnome.org>2009-01-23 00:54:22 +0000
commit7ba4268d6b4904dc43316e072a9aa3b5212c33d9 (patch)
tree460baa50dc41dbb5a78c65c5c1c0e369476b97de /gtk/gtkfilechooserentry.c
parentfe636e4be20a0140f2b1b52ad66acaeb9537ac14 (diff)
downloadgtk+-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.c47
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);