X-Git-Url: http://geeqie.org/cgi-bin/gitweb.cgi?p=geeqie.git;a=blobdiff_plain;f=src%2Fbar_keywords.c;h=febed425236449547ace70739db955355ab3617f;hp=ffe486a8b0e704ffb2ca1a85fe0a782f8aaa1539;hb=36d2e8e15cf7e6e230664cea85a6ddf492f766fe;hpb=4293c4534ca8c0c8d21ce65fe892ebead8d93d86 diff --git a/src/bar_keywords.c b/src/bar_keywords.c index ffe486a8..febed425 100644 --- a/src/bar_keywords.c +++ b/src/bar_keywords.c @@ -247,9 +247,39 @@ void bar_pane_keywords_set_fd(GtkWidget *pane, FileData *fd) bar_pane_keywords_update(pkd); } +void bar_keyword_tree_get_expanded_cb(GtkTreeView *keyword_treeview, GtkTreePath *path, gpointer data) +{ + GList **expanded = data; + GtkTreeModel *model; + GtkTreeIter iter; + gchar *path_string; + + model = gtk_tree_view_get_model(GTK_TREE_VIEW(keyword_treeview)); + gtk_tree_model_get_iter(model, &iter, path); + + path_string = gtk_tree_model_get_string_from_iter(model, &iter); + + *expanded = g_list_append(*expanded, g_strdup(path_string)); + g_free(path_string); +} + +static void bar_pane_keywords_entry_write_config(gchar *entry, GString *outstr, gint indent) +{ + struct { + gchar *path; + } expand; + + expand.path = entry; + + WRITE_NL(); WRITE_STRING(""); +} + static void bar_pane_keywords_write_config(GtkWidget *pane, GString *outstr, gint indent) { PaneKeywordsData *pkd; + GList *path_expanded = NULL; pkd = g_object_get_data(G_OBJECT(pane), "pane_data"); if (!pkd) return; @@ -262,7 +292,24 @@ static void bar_pane_keywords_write_config(GtkWidget *pane, GString *outstr, gin WRITE_BOOL(pkd->pane, expanded); WRITE_CHAR(*pkd, key); WRITE_INT(*pkd, height); - WRITE_STRING("/>"); + WRITE_STRING(">"); + indent++; + + gtk_tree_view_map_expanded_rows(GTK_TREE_VIEW(pkd->keyword_treeview), + (bar_keyword_tree_get_expanded_cb), &path_expanded); + + g_list_first(path_expanded); + while (path_expanded) + { + bar_pane_keywords_entry_write_config(path_expanded->data, outstr, indent); + g_free(path_expanded->data); + path_expanded = path_expanded->next; + } + g_list_free(path_expanded); + + indent--; + WRITE_NL(); + WRITE_STRING(""); } gint bar_pane_keywords_event(GtkWidget *bar, GdkEvent *event) @@ -1494,4 +1541,27 @@ void bar_pane_keywords_update_from_config(GtkWidget *pane, const gchar **attribu } +void bar_pane_keywords_entry_add_from_config(GtkWidget *pane, const gchar **attribute_names, const gchar **attribute_values) +{ + PaneKeywordsData *pkd; + gchar *path = NULL; + GtkTreePath *tree_path; + + pkd = g_object_get_data(G_OBJECT(pane), "pane_data"); + if (!pkd) return; + + while (*attribute_names) + { + const gchar *option = *attribute_names++; + const gchar *value = *attribute_values++; + + if (READ_CHAR_FULL("path", path)) + { + tree_path = gtk_tree_path_new_from_string(path); + gtk_tree_view_expand_to_path(GTK_TREE_VIEW(pkd->keyword_treeview), tree_path); + continue; + } + log_printf("unknown attribute %s = %s\n", option, value); + } +} /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */