# HG changeset patch # User zas_ # Date 1210093255 0 # Node ID 15766932414c1887cbb9ba0a8e2e8e50df5f9a14 # Parent 4cfce4ed35e0e04a779bfd0611a28738411b825e Allow the user to append or replace comments for a group of selected files. Two buttons were added to the Keywords panel. diff -r 4cfce4ed35e0 -r 15766932414c src/bar_info.c --- a/src/bar_info.c Tue May 06 12:31:23 2008 +0000 +++ b/src/bar_info.c Tue May 06 17:00:55 2008 +0000 @@ -492,45 +492,64 @@ } } -static void metadata_set_keywords(FileData *fd, GList *list, gint add) +static void metadata_set_keywords(FileData *fd, GList *keywords_to_use, gchar *comment_to_use, gint add) { gchar *comment = NULL; GList *keywords = NULL; GList *save_list = NULL; comment_read(fd, &keywords, &comment); - - if (add) + + if (comment_to_use) { - GList *work; - - work = list; - while (work) + if (add && comment && *comment) + { + gchar *tmp = comment; + + comment = g_strconcat(tmp, comment_to_use, NULL); + g_free(tmp); + } + else { - gchar *key; - GList *p; - - key = work->data; - work = work->next; + g_free(comment); + comment = g_strdup(comment_to_use); + } + } + + if (keywords_to_use) + { + if (add && keywords && g_list_length(keywords) > 0) + { + GList *work; - p = keywords; - while (p && key) + work = keywords_to_use; + while (work) { - gchar *needle = p->data; - p = p->next; + gchar *key; + GList *p; - if (strcmp(needle, key) == 0) key = NULL; - } + key = work->data; + work = work->next; - if (key) keywords = g_list_append(keywords, g_strdup(key)); + p = keywords; + while (p && key) + { + gchar *needle = p->data; + p = p->next; + + if (strcmp(needle, key) == 0) key = NULL; + } + + if (key) keywords = g_list_append(keywords, g_strdup(key)); + } + save_list = keywords; } - save_list = keywords; + else + { + save_list = keywords_to_use; + } } - else - { - save_list = list; - } - + comment_write(fd, save_list, comment); string_list_free(keywords); @@ -807,8 +826,10 @@ GtkWidget *comment_view; GtkWidget *button_save; - GtkWidget *button_set_add; - GtkWidget *button_set_replace; + GtkWidget *button_set_keywords_add; + GtkWidget *button_set_keywords_replace; + GtkWidget *button_set_comment_add; + GtkWidget *button_set_comment_replace; FileData *fd; @@ -1079,16 +1100,26 @@ bar_info_write(bd); } -static void bar_info_set_selection(BarInfoData *bd, gint add) +static void bar_info_set_selection(BarInfoData *bd, gint set_keywords, gint set_comment, gint add) { - GList *keywords; + GList *keywords = NULL; GList *list = NULL; GList *work; + gchar *comment = NULL; if (!bd->list_func) return; - keywords = keyword_list_pull(bd->keyword_view); - if (!keywords && add) return; + if (set_keywords) + { + keywords = keyword_list_pull(bd->keyword_view); + } + + if (set_comment) + { + comment = comment_pull(bd->comment_view); + } + + if (add && !keywords && !comment) return; list = bd->list_func(bd->list_data); work = list; @@ -1097,25 +1128,40 @@ FileData *fd = work->data; work = work->next; - metadata_set_keywords(fd, keywords, add); + metadata_set_keywords(fd, keywords, comment, add); } filelist_free(list); string_list_free(keywords); + g_free(comment); } -static void bar_info_set_add(GtkWidget *button, gpointer data) +static void bar_info_set_keywords_add(GtkWidget *button, gpointer data) +{ + BarInfoData *bd = data; + + bar_info_set_selection(bd, TRUE, FALSE, TRUE); +} + +static void bar_info_set_keywords_replace(GtkWidget *button, gpointer data) { BarInfoData *bd = data; - bar_info_set_selection(bd, TRUE); + bar_info_set_selection(bd, TRUE, FALSE, FALSE); } -static void bar_info_set_replace(GtkWidget *button, gpointer data) +static void bar_info_set_comment_add(GtkWidget *button, gpointer data) { BarInfoData *bd = data; - bar_info_set_selection(bd, FALSE); + bar_info_set_selection(bd, FALSE, TRUE, TRUE); +} + +static void bar_info_set_comment_replace(GtkWidget *button, gpointer data) +{ + BarInfoData *bd = data; + + bar_info_set_selection(bd, FALSE, TRUE, FALSE); } static void bar_info_changed(GtkTextBuffer *buffer, gpointer data) @@ -1314,12 +1360,19 @@ _("Edit favorite keywords list."), G_CALLBACK(bar_keyword_edit_cb), bd); pref_toolbar_spacer(tbar); - bd->button_set_add = pref_toolbar_button(tbar, GTK_STOCK_ADD, NULL, FALSE, + bd->button_set_keywords_add = pref_toolbar_button(tbar, GTK_STOCK_ADD, NULL, FALSE, _("Add keywords to selected files"), - G_CALLBACK(bar_info_set_add), bd); - bd->button_set_replace = pref_toolbar_button(tbar, GTK_STOCK_CONVERT, NULL, FALSE, - _("Add keywords to selected files, replacing the existing ones."), - G_CALLBACK(bar_info_set_replace), bd); + G_CALLBACK(bar_info_set_keywords_add), bd); + bd->button_set_keywords_replace = pref_toolbar_button(tbar, GTK_STOCK_CONVERT, NULL, FALSE, + _("Add keywords to selected files, replacing existing ones"), + G_CALLBACK(bar_info_set_keywords_replace), bd); + bd->button_set_comment_add = pref_toolbar_button(tbar, GTK_STOCK_DND_MULTIPLE, NULL, FALSE, + _("Add comment to selected files"), + G_CALLBACK(bar_info_set_comment_add), bd); + bd->button_set_comment_replace = pref_toolbar_button(tbar, GTK_STOCK_DND, NULL, FALSE, + _("Add comment to selected files, replacing existing one"), + G_CALLBACK(bar_info_set_comment_replace), bd); + pref_toolbar_spacer(tbar); bd->button_save = pref_toolbar_button(tbar, GTK_STOCK_SAVE, NULL, FALSE, _("Save comment now"), @@ -1358,6 +1411,9 @@ enable = (count > 0 && bd->list_func != NULL); - gtk_widget_set_sensitive(bd->button_set_add, enable); - gtk_widget_set_sensitive(bd->button_set_replace, enable); + gtk_widget_set_sensitive(bd->button_set_keywords_add, enable); + gtk_widget_set_sensitive(bd->button_set_keywords_replace, enable); + gtk_widget_set_sensitive(bd->button_set_comment_add, enable); + gtk_widget_set_sensitive(bd->button_set_comment_replace, enable); + }