[Xfce4-commits] <xfce4-appfinder:nick/xfrun4-merge> Take model reference once the first window is destroyed.

Nick Schermer noreply at xfce.org
Sat Jun 25 20:46:02 CEST 2011


Updating branch refs/heads/nick/xfrun4-merge
         to 376ba2ed043776af3324c3b58282fa372fd17dfc (commit)
       from 11fde81fb83c520edb98959d19c8d2bcc85a3a44 (commit)

commit 376ba2ed043776af3324c3b58282fa372fd17dfc
Author: Nick Schermer <nick at 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);



More information about the Xfce4-commits mailing list