Fix #357: Save mark-and-keyword connections
[geeqie.git] / src / metadata.c
index 26d8350..ba4e6c6 100644 (file)
@@ -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("<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 @@ 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);
                }