summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--window_main.c37
1 files changed, 24 insertions, 13 deletions
diff --git a/window_main.c b/window_main.c
index d327177..11d1987 100644
--- a/window_main.c
+++ b/window_main.c
@@ -804,30 +804,41 @@ inline static void update_wall_tags(GArray *wallarray, guint64 tagid, gboolean a
}
/**
- * Update tags for wallpapers.
+ * Recursive call for update_tags.
*/
-static void update_tags(GArray *wallarray, GtkTreeModel *model) {
- GtkTreeIter iter;
+static void update_tags_recursive(GArray *wallarray, GtkTreeModel *model, GtkTreeIter *_iter) {
+ GtkTreeIter iter = *_iter, child;
gboolean active;
struct tag_t *tag;
- /* No tags available. */
- if(!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter)) {
- return;
- }
-
do {
/* Don't update inconsistent tags. */
- if(tag_model_get_inconsistent(GTK_TREE_MODEL(model), &iter))
- continue;
+ if(!tag_model_get_inconsistent(GTK_TREE_MODEL(model), &iter)) {
+ active = tag_model_get_checked(GTK_TREE_MODEL(model), &iter);
+ tag_model_get_tag_record(GTK_TREE_MODEL(model), &iter, &tag);
- active = tag_model_get_checked(GTK_TREE_MODEL(model), &iter);
- tag_model_get_tag_record(GTK_TREE_MODEL(model), &iter, &tag);
+ update_wall_tags(wallarray, tag->id, active);
+ }
+
+ if(gtk_tree_model_iter_children(GTK_TREE_MODEL(model), &child, &iter)) {
+ update_tags_recursive(wallarray, model, &child);
+ }
- update_wall_tags(wallarray, tag->id, active);
} while(gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter));
}
+/**
+ * Update tags for wallpapers.
+ */
+static void update_tags(GArray *wallarray, GtkTreeModel *model) {
+ GtkTreeIter iter;
+
+ if(gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter)) {
+ update_tags_recursive(wallarray, model, &iter);
+ }
+
+}
+
void on_tags_activate(GtkMenuItem *menuitem, gpointer user_data) {
struct tagdialog_data_t *data;
GArray *array;