Mercurial > hg > forks > geeqie
changeset 2492:586556259c35
Fix #357: Save mark-and-keyword connections
https://github.com/BestImageViewer/geeqie/issues/357
Patch by unqwist and dragon-sh
author | Colin Clark <colin.clark@cclark.uk> |
---|---|
date | Wed, 31 May 2017 09:01:35 +0100 |
parents | 5523c5ce8551 |
children | 678ae40bac9e |
files | src/filedata.c src/metadata.c src/metadata.h |
diffstat | 3 files changed, 26 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/filedata.c Tue May 30 15:51:00 2017 +0100 +++ b/src/filedata.c Wed May 31 09:01:35 2017 +0100 @@ -1709,7 +1709,7 @@ 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);
--- a/src/metadata.c Tue May 30 15:51:00 2017 +0100 +++ b/src/metadata.c Wed May 31 09:01:35 2017 +0100 @@ -1116,6 +1116,14 @@ 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 @@ { GtkTreeIter children; gchar *name; + gchar *mark_str; WRITE_NL(); WRITE_STRING("<keyword "); name = keyword_get_name(keyword_tree, &iter); write_char_option(outstr, indent, "name", name); g_free(name); write_bool_option(outstr, indent, "kw", keyword_get_is_keyword(keyword_tree, &iter)); + mark_str = keyword_get_mark(keyword_tree, &iter); + if (mark_str && mark_str[0]) + { + write_char_option(outstr, indent, "mark", mark_str); + } + if (gtk_tree_model_iter_children(keyword_tree, &children, &iter)) { WRITE_STRING(">"); @@ -1785,6 +1800,7 @@ { gchar *name = NULL; gboolean is_kw = TRUE; + gchar *mark_str = NULL; while (*attribute_names) { @@ -1793,6 +1809,7 @@ 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 @@ 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); }
--- a/src/metadata.h Tue May 30 15:51:00 2017 +0100 +++ b/src/metadata.h Wed May 31 09:01:35 2017 +0100 @@ -72,6 +72,7 @@ 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);