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

Nick Schermer noreply at xfce.org
Sat Jul 9 16:18:13 CEST 2011


Updating branch refs/heads/master
         to bdd8bb08edcbd599eeb822f9b68e781b4ebc5af3 (commit)
       from a5120b384f765e2069596e6dbca2bf0dee147b8c (commit)

commit bdd8bb08edcbd599eeb822f9b68e781b4ebc5af3
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