From 6cd6a0a24e46ef05837a0d18eba18e6dcbb71e03 Mon Sep 17 00:00:00 2001 From: Federico Mena Quintero Date: Wed, 28 Sep 2005 01:07:08 +0000 Subject: [PATCH] Don't reload the current folder unnecessarily on ::map(). 2005-09-27 Federico Mena Quintero Don't reload the current folder unnecessarily on ::map(). * gtk/gtkfilechooserprivate.h (ReloadState): New enum to represent the reloading state. (struct _GtkFileChooserDefault): Added a "reload_state" field. * gtk/gtkfilechooserdefault.c (gtk_file_chooser_default_init): Initialize impl->reload_state. (gtk_file_chooser_default_map): Check the impl->reload_state; load a default folder if no folder has been set, or reload the current one only if we had been unmapped first. (gtk_file_chooser_default_update_current_folder): Set the reload_state to RELOAD_HAS_FOLDER. (gtk_file_chooser_default_unmap): Implement, and set the reload_state to RELOAD_WAS_UNMAPPED. (shortcuts_model_create): Don't call shortcuts_add_bookmarks() here; they'll get (re)loaded on ::map() anyway. * gtk/gtkfilechooserwidget.c (gtk_file_chooser_widget_constructor): Don't set a default folder here. * tests/autotestfilechooser.c (test_action_widgets): Don't take in a dialog; build it ourselves. (test_reload): New test to ensure that we don't load the default folder more than once, and that we reload it when unmapping/remapping. (get_impl_from_dialog): New utility function. (test_widgets_for_current_action): Use get_impl_from_dialog(). --- gtk/gtkfilechooserprivate.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/gtk/gtkfilechooserprivate.h b/gtk/gtkfilechooserprivate.h index 0efc915ef1..e9d45aae84 100644 --- a/gtk/gtkfilechooserprivate.h +++ b/gtk/gtkfilechooserprivate.h @@ -135,6 +135,12 @@ typedef enum { LOAD_FINISHED /* Model is fully loaded and inserted into the tree */ } LoadState; +typedef enum { + RELOAD_EMPTY, /* No folder has been set */ + RELOAD_HAS_FOLDER, /* We have a folder, although it may not be completely loaded yet; no need to reload */ + RELOAD_WAS_UNMAPPED /* We had a folder but got unmapped; reload is needed */ +} ReloadState; + struct _GtkFileChooserDefault { GtkVBox parent_instance; @@ -182,6 +188,7 @@ struct _GtkFileChooserDefault GtkTreeModelSort *sort_model; LoadState load_state; + ReloadState reload_state; guint load_timeout_id; GSList *pending_select_paths;