diff options
author | Nick Schermer <nick@xfce.org> | 2011-12-27 21:18:39 +0100 |
---|---|---|
committer | Nick Schermer <nick@xfce.org> | 2011-12-27 21:18:39 +0100 |
commit | 80158f7d30693d2196b5ea312a4c2b7478e6fcaf (patch) | |
tree | c42df58f6ed288e63d0d945f09bfee0c2110e127 /src/appfinder-category-model.c | |
parent | 23f905b73a157c6d83a4ce905c0376da86cac76c (diff) | |
download | xfce4-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.c | 39 |
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) { |