Mercurial > geeqie
comparison src/bar_keywords.c @ 1806:022456247824
Add the feature to add single keywords to selection
This patch adds a context menu entry to keywords to ad the current
keyword to all selected images.
author | mow |
---|---|
date | Sat, 27 Feb 2010 20:35:26 +0000 |
parents | 956aab097ea7 |
children | c416d099a3dc |
comparison
equal
deleted
inserted
replaced
1805:fccac8fde6c0 | 1806:022456247824 |
---|---|
1083 PaneKeywordsData *pkd = data; | 1083 PaneKeywordsData *pkd = data; |
1084 pkd->hide_unchecked = !pkd->hide_unchecked; | 1084 pkd->hide_unchecked = !pkd->hide_unchecked; |
1085 bar_keyword_tree_sync(pkd); | 1085 bar_keyword_tree_sync(pkd); |
1086 } | 1086 } |
1087 | 1087 |
1088 /** | |
1089 * \brief Callback for adding selected keyword to all selected images. | |
1090 */ | |
1091 static void bar_pane_keywords_add_to_selected_cb(GtkWidget *menu_widget, gpointer data) | |
1092 { | |
1093 PaneKeywordsData *pkd = data; | |
1094 GtkTreeIter iter; /* This is the iter which initial holds the current keyword */ | |
1095 GtkTreeIter child_iter; | |
1096 GtkTreeModel *model; | |
1097 GtkTreeModel *keyword_tree; | |
1098 GList *list, *work; | |
1099 GList *keywords = NULL; | |
1100 | |
1101 GtkTextBuffer *keyword_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(pkd->keyword_view)); | |
1102 | |
1103 /* Aquire selected keyword */ | |
1104 if (pkd->click_tpath) | |
1105 { | |
1106 gboolean is_keyword = TRUE; | |
1107 | |
1108 model = gtk_tree_view_get_model(GTK_TREE_VIEW(pkd->keyword_treeview)); | |
1109 if (!gtk_tree_model_get_iter(model, &iter, pkd->click_tpath)) return; | |
1110 gtk_tree_model_get(model, &iter, FILTER_KEYWORD_COLUMN_IS_KEYWORD, &is_keyword, -1); | |
1111 if (!is_keyword) return; | |
1112 } | |
1113 else | |
1114 return; | |
1115 | |
1116 keyword_tree = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(model)); | |
1117 gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model), &child_iter, &iter); | |
1118 | |
1119 list = keyword_list_pull(pkd->keyword_view); /* Get the left keyword view */ | |
1120 | |
1121 /* Now set the current image */ | |
1122 keyword_tree_set(keyword_tree, &child_iter, &list); | |
1123 | |
1124 keyword_list_push(pkd->keyword_view, list); /* Set the left keyword view */ | |
1125 string_list_free(list); | |
1126 | |
1127 bar_pane_keywords_changed(keyword_buffer, pkd); /* Get list of all keywords in the hierarchy */ | |
1128 | |
1129 gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model), &child_iter, &iter); | |
1130 keywords = keyword_tree_get(keyword_tree, &child_iter); | |
1131 | |
1132 list = layout_selection_list(pkd->pane.lw); | |
1133 work = list; | |
1134 while (work) | |
1135 { | |
1136 FileData *fd = work->data; | |
1137 work = work->next; | |
1138 metadata_append_list(fd, KEYWORD_KEY, keywords); | |
1139 } | |
1140 filelist_free(list); | |
1141 string_list_free(keywords); | |
1142 } | |
1143 | |
1088 static void bar_pane_keywords_menu_popup(GtkWidget *widget, PaneKeywordsData *pkd, gint x, gint y) | 1144 static void bar_pane_keywords_menu_popup(GtkWidget *widget, PaneKeywordsData *pkd, gint x, gint y) |
1089 { | 1145 { |
1090 GtkWidget *menu; | 1146 GtkWidget *menu; |
1091 GtkWidget *item; | 1147 GtkWidget *item; |
1092 GtkWidget *submenu; | 1148 GtkWidget *submenu; |
1098 | 1154 |
1099 menu = popup_menu_short_lived(); | 1155 menu = popup_menu_short_lived(); |
1100 | 1156 |
1101 menu_item_add_stock(menu, _("Add keyword"), GTK_STOCK_EDIT, G_CALLBACK(bar_pane_keywords_add_dialog_cb), pkd); | 1157 menu_item_add_stock(menu, _("Add keyword"), GTK_STOCK_EDIT, G_CALLBACK(bar_pane_keywords_add_dialog_cb), pkd); |
1102 | 1158 |
1159 menu_item_add_divider(menu); | |
1160 | |
1161 menu_item_add(menu, _("Add keyword to all selected images"), G_CALLBACK(bar_pane_keywords_add_to_selected_cb), pkd); | |
1162 | |
1103 menu_item_add_divider(menu); | 1163 menu_item_add_divider(menu); |
1104 | 1164 |
1105 if (pkd->click_tpath) | 1165 if (pkd->click_tpath) |
1106 { | 1166 { |
1107 /* for the entry */ | 1167 /* for the entry */ |