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);