static void bar_pane_keywords_connect_mark_cb(GtkWidget *menu_widget, gpointer data) { PaneKeywordsData *pkd = data; GtkTreeModel *model; GtkTreeIter iter; GtkTreeModel *keyword_tree; GtkTreeIter kw_iter; gint mark = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(menu_widget), "mark")) - 1; model = gtk_tree_view_get_model(GTK_TREE_VIEW(pkd->keyword_treeview)); keyword_tree = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(model)); if (!pkd->click_tpath) return; if (!gtk_tree_model_get_iter(model, &iter, pkd->click_tpath)) return; gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model), &kw_iter, &iter); file_data_unregister_notify_func(bar_pane_keywords_notify_cb, pkd); meta_data_connect_mark_with_keyword(keyword_tree, &kw_iter, mark); file_data_register_notify_func(bar_pane_keywords_notify_cb, pkd, NOTIFY_PRIORITY_LOW); // bar_pane_keywords_update(pkd); }
void keyword_delete(GtkTreeStore *keyword_tree, GtkTreeIter *iter_ptr) { GList *list; GtkTreeIter child; while (gtk_tree_model_iter_children(GTK_TREE_MODEL(keyword_tree), &child, iter_ptr)) { keyword_delete(keyword_tree, &child); } meta_data_connect_mark_with_keyword(GTK_TREE_MODEL(keyword_tree), iter_ptr, -1); gtk_tree_model_get(GTK_TREE_MODEL(keyword_tree), iter_ptr, KEYWORD_COLUMN_HIDE_IN, &list, -1); g_list_free(list); gtk_tree_store_remove(keyword_tree, iter_ptr); }
void keyword_tree_node_disconnect_marks(GtkTreeModel *keyword_tree, GtkTreeIter *iter_ptr) { GtkTreeIter iter = *iter_ptr; while (TRUE) { GtkTreeIter children; meta_data_connect_mark_with_keyword((keyword_tree), &iter, -1); if (gtk_tree_model_iter_children((keyword_tree), &children, &iter)) { keyword_tree_node_disconnect_marks((keyword_tree), &children); } if (!gtk_tree_model_iter_next((keyword_tree), &iter)) return; } }
GtkTreeIter *keyword_add_from_config(GtkTreeStore *keyword_tree, GtkTreeIter *parent, const gchar **attribute_names, const gchar **attribute_values) { gchar *name = NULL; gboolean is_kw = TRUE; gchar *mark_str = NULL; while (*attribute_names) { const gchar *option = *attribute_names++; const gchar *value = *attribute_values++; if (READ_CHAR_FULL("name", name)) continue; if (READ_BOOL_FULL("kw", is_kw)) continue; if (READ_CHAR_FULL("mark", mark_str)) continue; log_printf("unknown attribute %s = %s\n", option, value); } if (name && name[0]) { GtkTreeIter iter; /* re-use existing keyword if any */ if (!keyword_exists(GTK_TREE_MODEL(keyword_tree), parent, NULL, name, FALSE, &iter)) { gtk_tree_store_append(keyword_tree, &iter, parent); } keyword_set(keyword_tree, &iter, name, is_kw); if (mark_str) { gint i = (gint)atoi(mark_str); if (i == 0) i = 10; meta_data_connect_mark_with_keyword(GTK_TREE_MODEL(keyword_tree), &iter, i - 1); } g_free(name); return gtk_tree_iter_copy(&iter); } g_free(name); return NULL; }