From: Colin Clark Date: Wed, 31 May 2017 08:01:35 +0000 (+0100) Subject: Fix #357: Save mark-and-keyword connections X-Git-Tag: v1.4~168 X-Git-Url: http://geeqie.org/cgi-bin/gitweb.cgi?p=geeqie.git;a=commitdiff_plain;h=4b6aa2ade43072a4daab30b81b4900972fec7083 Fix #357: Save mark-and-keyword connections https://github.com/BestImageViewer/geeqie/issues/357 Patch by unqwist and dragon-sh --- diff --git a/src/filedata.c b/src/filedata.c index 08e13668..ccabe3f4 100644 --- a/src/filedata.c +++ b/src/filedata.c @@ -1709,7 +1709,7 @@ gboolean file_data_register_mark_func(gint n, FileDataGetMarkFunc get_mark_func, file_data_mark_func_data[n] = data; file_data_destroy_mark_func[n] = notify; - if (get_mark_func) + if (get_mark_func && file_data_pool) { /* this effectively changes all known files */ g_hash_table_foreach(file_data_pool, file_data_notify_mark_func, NULL); diff --git a/src/metadata.c b/src/metadata.c index 26d83500..ba4e6c68 100644 --- a/src/metadata.c +++ b/src/metadata.c @@ -1116,6 +1116,14 @@ gchar *keyword_get_name(GtkTreeModel *keyword_tree, GtkTreeIter *iter) return name; } +gchar *keyword_get_mark(GtkTreeModel *keyword_tree, GtkTreeIter *iter) +{ + gchar *mark_str; + + gtk_tree_model_get(keyword_tree, iter, KEYWORD_COLUMN_MARK, &mark_str, -1); + return mark_str; +} + gchar *keyword_get_casefold(GtkTreeModel *keyword_tree, GtkTreeIter *iter) { gchar *casefold; @@ -1745,12 +1753,19 @@ static void keyword_tree_node_write_config(GtkTreeModel *keyword_tree, GtkTreeIt { GtkTreeIter children; gchar *name; + gchar *mark_str; WRITE_NL(); WRITE_STRING(""); @@ -1785,6 +1800,7 @@ GtkTreeIter *keyword_add_from_config(GtkTreeStore *keyword_tree, GtkTreeIter *pa { gchar *name = NULL; gboolean is_kw = TRUE; + gchar *mark_str = NULL; while (*attribute_names) { @@ -1793,6 +1809,7 @@ GtkTreeIter *keyword_add_from_config(GtkTreeStore *keyword_tree, GtkTreeIter *pa 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); } @@ -1805,6 +1822,13 @@ GtkTreeIter *keyword_add_from_config(GtkTreeStore *keyword_tree, GtkTreeIter *pa gtk_tree_store_append(keyword_tree, &iter, parent); } keyword_set(keyword_tree, &iter, name, is_kw); + + if (mark_str) + { + meta_data_connect_mark_with_keyword(GTK_TREE_MODEL(keyword_tree), + &iter, (gint)atoi(mark_str) - 1); + } + g_free(name); return gtk_tree_iter_copy(&iter); } diff --git a/src/metadata.h b/src/metadata.h index 5c9b851e..be332c97 100644 --- a/src/metadata.h +++ b/src/metadata.h @@ -72,6 +72,7 @@ void meta_data_connect_mark_with_keyword(GtkTreeModel *keyword_tree, GtkTreeIter gchar *keyword_get_name(GtkTreeModel *keyword_tree, GtkTreeIter *iter); +gchar *keyword_get_mark(GtkTreeModel *keyword_tree, GtkTreeIter *iter); gchar *keyword_get_casefold(GtkTreeModel *keyword_tree, GtkTreeIter *iter); gboolean keyword_get_is_keyword(GtkTreeModel *keyword_tree, GtkTreeIter *iter);