summaryrefslogtreecommitdiff
path: root/src/appfinder-category-model.c
diff options
context:
space:
mode:
authorNick Schermer <nick@xfce.org>2011-12-27 21:18:39 +0100
committerNick Schermer <nick@xfce.org>2011-12-27 21:18:39 +0100
commit80158f7d30693d2196b5ea312a4c2b7478e6fcaf (patch)
treec42df58f6ed288e63d0d945f09bfee0c2110e127 /src/appfinder-category-model.c
parent23f905b73a157c6d83a4ce905c0376da86cac76c (diff)
downloadxfce4-appfinder-80158f7d30693d2196b5ea312a4c2b7478e6fcaf.tar.gz
Improve reloading of items and directories.
Diffstat (limited to 'src/appfinder-category-model.c')
-rw-r--r--src/appfinder-category-model.c39
1 files changed, 34 insertions, 5 deletions
diff --git a/src/appfinder-category-model.c b/src/appfinder-category-model.c
index 07613b9..bd30e9a 100644
--- a/src/appfinder-category-model.c
+++ b/src/appfinder-category-model.c
@@ -32,6 +32,10 @@
+typedef struct _CategoryItem CategoryItem;
+
+
+
static void xfce_appfinder_category_model_tree_model_init (GtkTreeModelIface *iface);
static void xfce_appfinder_category_model_get_property (GObject *object,
guint prop_id,
@@ -71,6 +75,7 @@ static gboolean xfce_appfinder_category_model_iter_nth_child (G
static gboolean xfce_appfinder_category_model_iter_parent (GtkTreeModel *tree_model,
GtkTreeIter *iter,
GtkTreeIter *child);
+static void xfce_appfinder_category_category_free (CategoryItem *item);
@@ -91,6 +96,12 @@ struct _XfceAppfinderCategoryModel
XfceAppfinderIconSize icon_size;
};
+struct _CategoryItem
+{
+ GarconMenuDirectory *directory;
+ GdkPixbuf *pixbuf;
+};
+
enum
{
PROP_0,
@@ -218,7 +229,7 @@ xfce_appfinder_category_model_finalize (GObject *object)
/* clear the first three items */
for (li = model->categories, n = 0; li != NULL && n < 3; li = li->next, n++)
- xfce_appfinder_model_category_free (li->data);
+ xfce_appfinder_category_category_free (li->data);
g_slist_free (model->categories);
g_object_unref (G_OBJECT (model->all_applications));
@@ -446,6 +457,20 @@ xfce_appfinder_category_model_iter_parent (GtkTreeModel *tree_model,
+
+static void
+xfce_appfinder_category_category_free (CategoryItem *item)
+{
+ if (item->directory != NULL)
+ g_object_unref (G_OBJECT (item->directory));
+ if (item->pixbuf != NULL)
+ g_object_unref (G_OBJECT (item->pixbuf));
+ g_slice_free (CategoryItem, item);
+}
+
+
+
+
XfceAppfinderCategoryModel *
xfce_appfinder_category_model_new (void)
{
@@ -482,13 +507,20 @@ xfce_appfinder_category_model_set_categories (XfceAppfinderCategoryModel *model,
/* clean the first three categories and drop the list */
for (i = 0, li = model->categories; i < 3 && li != NULL; i++, li = li->next)
- xfce_appfinder_model_category_free (li->data);
+ xfce_appfinder_category_category_free (li->data);
g_slist_free (model->categories);
model->categories = NULL;
}
appfinder_assert (model->categories == NULL);
+ for (li = categories; li != NULL; li = li->next)
+ {
+ item = g_slice_new0 (CategoryItem);
+ item->directory = g_object_ref (li->data);
+ model->categories = g_slist_prepend (model->categories, item);
+ }
+
/* separator and the main categories */
item = g_slice_new0 (CategoryItem);
model->categories = g_slist_prepend (model->categories, item);
@@ -501,9 +533,6 @@ xfce_appfinder_category_model_set_categories (XfceAppfinderCategoryModel *model,
item->directory = g_object_ref (G_OBJECT (model->all_applications));
model->categories = g_slist_prepend (model->categories, item);
- /* move the categories online */
- model->categories = g_slist_concat (model->categories, g_slist_copy (categories));
-
path = gtk_tree_path_new_first ();
for (li = model->categories; li != NULL; li = lnext)
{