Updating branch refs/heads/nick/xfrun4-merge to 376ba2ed043776af3324c3b58282fa372fd17dfc (commit) from 11fde81fb83c520edb98959d19c8d2bcc85a3a44 (commit)
commit 376ba2ed043776af3324c3b58282fa372fd17dfc Author: Nick Schermer <n...@xfce.org> Date: Sat Jun 25 20:44:09 2011 +0200 Take model reference once the first window is destroyed. That was the whole point of everything. This way the model keeps all its data loaded (pixbufs etc) so it starts a lot quicker when a dialog is openeded. src/appfinder-private.h | 2 +- src/appfinder-window.c | 16 +++++++++------- src/main.c | 27 ++++++++++++++++++++------- 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/src/appfinder-private.h b/src/appfinder-private.h index 43b2c73..67e285d 100644 --- a/src/appfinder-private.h +++ b/src/appfinder-private.h @@ -31,7 +31,7 @@ G_STMT_START { \ #define IS_STRING(str) ((str) != NULL && *(str) != '\0') #ifdef DEBUG -#define APPFINDER_DEBUG(...) g_print ("xfce4-appfinder: "); g_print (__VA_ARGS__); g_print ("\n") +#define APPFINDER_DEBUG(...) g_print ("xfce4-appfinder-dbg: "); g_print (__VA_ARGS__); g_print ("\n") #else #define APPFINDER_DEBUG(...) G_STMT_START{ (void)0; }G_STMT_END #endif diff --git a/src/appfinder-window.c b/src/appfinder-window.c index 82c33db..7b8899f 100644 --- a/src/appfinder-window.c +++ b/src/appfinder-window.c @@ -171,13 +171,6 @@ xfce_appfinder_window_init (XfceAppfinderWindow *window) window->category_model = xfce_appfinder_category_model_new (); window->model = xfce_appfinder_model_get (); - /* load categories in the model */ - if (xfce_appfinder_model_get_categories (window->model) != NULL) - xfce_appfinder_window_category_set_categories (window); - g_signal_connect_swapped (G_OBJECT (window->model), "categories-changed", - G_CALLBACK (xfce_appfinder_window_category_set_categories), - window); - gtk_window_set_title (GTK_WINDOW (window), _("Application Finder")); integer = xfconf_channel_get_int (window->channel, "/LastWindowWidth", DEFAULT_WINDOW_WIDTH); gtk_window_set_default_size (GTK_WINDOW (window), integer, -1); @@ -251,6 +244,13 @@ xfce_appfinder_window_init (XfceAppfinderWindow *window) gtk_container_add (GTK_CONTAINER (scroll), sidepane); gtk_widget_show (sidepane); + /* load categories in the model */ + if (xfce_appfinder_model_get_categories (window->model) != NULL) + xfce_appfinder_window_category_set_categories (window); + g_signal_connect_swapped (G_OBJECT (window->model), "categories-changed", + G_CALLBACK (xfce_appfinder_window_category_set_categories), + window); + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (sidepane)); gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE); g_signal_connect (G_OBJECT (selection), "changed", @@ -631,6 +631,8 @@ xfce_appfinder_window_category_set_categories (XfceAppfinderWindow *window) GtkTreePath *path; gchar *name; + g_return_if_fail (GTK_IS_TREE_VIEW (window->sidepane)); + categories = xfce_appfinder_model_get_categories (window->model); if (categories != NULL) xfce_appfinder_category_model_set_categories (window->category_model, categories); diff --git a/src/main.c b/src/main.c index 50a65e4..e4897c1 100644 --- a/src/main.c +++ b/src/main.c @@ -41,6 +41,7 @@ #include <src/appfinder-window.h> #include <src/appfinder-private.h> +#include <src/appfinder-model.h> @@ -53,13 +54,14 @@ -static gboolean opt_expanded = FALSE; -static gboolean opt_version = FALSE; -static gboolean opt_replace = FALSE; -static gboolean opt_quit = FALSE; -static gboolean opt_disable_server = FALSE; -static GSList *windows = NULL; -static gboolean service_owner = FALSE; +static gboolean opt_expanded = FALSE; +static gboolean opt_version = FALSE; +static gboolean opt_replace = FALSE; +static gboolean opt_quit = FALSE; +static gboolean opt_disable_server = FALSE; +static GSList *windows = NULL; +static gboolean service_owner = FALSE; +static XfceAppfinderModel *model_cache = NULL; @@ -85,6 +87,13 @@ appfinder_window_destroyed (GtkWidget *window) if (windows == NULL) return; + /* take a reference on the model */ + if (model_cache == NULL) + { + APPFINDER_DEBUG ("main took reference on the main model"); + model_cache = xfce_appfinder_model_get (); + } + /* remove from internal list */ windows = g_slist_remove (windows, window); @@ -457,6 +466,10 @@ main (gint argc, gchar **argv) xfconf_shutdown (); + /* release the model cache */ + if (model_cache != NULL) + g_object_unref (G_OBJECT (model_cache)); + if (G_LIKELY (dbus_connection != NULL)) { appfinder_dbus_unregister (dbus_connection); _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits