From: Colin Clark Date: Fri, 17 Nov 2017 16:46:18 +0000 (+0000) Subject: Disconnect all mark keyword connections X-Git-Tag: v1.4~21 X-Git-Url: http://geeqie.org/cgi-bin/gitweb.cgi?p=geeqie.git;a=commitdiff_plain;h=a2504a3a401793d4828557834d1e6aeebc6aea5c Disconnect all mark keyword connections Additional keyword menu item to disconnect all marks keywords connections --- diff --git a/src/bar_keywords.c b/src/bar_keywords.c index b59a0895..b62b988a 100644 --- a/src/bar_keywords.c +++ b/src/bar_keywords.c @@ -1016,6 +1016,35 @@ static void bar_pane_keywords_connect_mark_cb(GtkWidget *menu_widget, gpointer d meta_data_connect_mark_with_keyword(keyword_tree, &kw_iter, mark); } +static void bar_pane_keywords_disconnect_marks_ok_cb(GenericDialog *gd, gpointer data) +{ + keyword_tree_disconnect_marks(); +} + +static void dummy_cancel_cb(GenericDialog *gd, gpointer data) +{ + /* no op, only so cancel button appears */ +} + +static void bar_pane_keywords_disconnect_marks_cb(GtkWidget *menu_widget, gpointer data) +{ + PaneKeywordsData *pkd = data; + + GenericDialog *gd; + GString *message = g_string_new(""); + + message = g_string_append(message, _("This will disconnect all Marks Keywords connections")); + + gd = generic_dialog_new(_("Marks Keywords"), + "marks_keywords", menu_widget, TRUE, dummy_cancel_cb, pkd); + generic_dialog_add_message(gd, GTK_STOCK_DIALOG_WARNING, + "Disconnect all Marks Keywords connections?", message->str, TRUE); + generic_dialog_add_button(gd, GTK_STOCK_OK, NULL, bar_pane_keywords_disconnect_marks_ok_cb, TRUE); + + gtk_widget_show(gd->dialog); + + g_string_free(message, TRUE); +} static void bar_pane_keywords_delete_cb(GtkWidget *menu_widget, gpointer data) { @@ -1322,6 +1351,12 @@ static void bar_pane_keywords_menu_popup(GtkWidget *widget, PaneKeywordsData *pk g_free(text); } + if (keyword) + { + text = g_strdup_printf(_("Disconnect all Mark Keyword connections")); + menu_item_add_stock(menu, text, GTK_STOCK_DELETE, G_CALLBACK(bar_pane_keywords_disconnect_marks_cb), pkd); + g_free(text); + } menu_item_add_divider(menu); g_free(mark); g_free(name); diff --git a/src/metadata.c b/src/metadata.c index 74dbcd36..dfd20574 100644 --- a/src/metadata.c +++ b/src/metadata.c @@ -1812,6 +1812,35 @@ void keyword_tree_write_config(GString *outstr, gint indent) WRITE_NL(); WRITE_STRING(""); } + void keyword_tree_node_disconnect_marks(GtkTreeModel *keyword_tree, GtkTreeIter *iter_ptr) +{ + GtkTreeIter iter = *iter_ptr; + + while (TRUE) + { + GtkTreeIter children; + + meta_data_connect_mark_with_keyword((keyword_tree), &iter, -1); + + if (gtk_tree_model_iter_children((keyword_tree), &children, &iter)) + { + keyword_tree_node_disconnect_marks((keyword_tree), &children); + } + + if (!gtk_tree_model_iter_next((keyword_tree), &iter)) return; + } +} + +void keyword_tree_disconnect_marks() +{ + GtkTreeIter iter; + + if (keyword_tree && gtk_tree_model_get_iter_first(GTK_TREE_MODEL(keyword_tree), &iter)) + { + keyword_tree_node_disconnect_marks(GTK_TREE_MODEL(keyword_tree), &iter); + } +} + GtkTreeIter *keyword_add_from_config(GtkTreeStore *keyword_tree, GtkTreeIter *parent, const gchar **attribute_names, const gchar **attribute_values) { gchar *name = NULL; diff --git a/src/metadata.h b/src/metadata.h index ec565793..0c0dd4be 100644 --- a/src/metadata.h +++ b/src/metadata.h @@ -111,5 +111,6 @@ void keyword_tree_new(void); void keyword_tree_write_config(GString *outstr, gint indent); GtkTreeIter *keyword_add_from_config(GtkTreeStore *keyword_tree, GtkTreeIter *parent, const gchar **attribute_names, const gchar **attribute_values); +void keyword_tree_disconnect_marks(); #endif /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */