talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit 811daf73de8faae068f1881551ddb92dedad8c8f
parent c88174a91be3f6b0f8fe8f2cc39576170e4962de
Author: Oliver Lowe <o@olowe.co>
Date:   Sat, 16 Aug 2025 10:08:36 +1000

Remove more tags, colour labels, newsgroup stuff

Diffstat:
Msrc/edittags.c | 34----------------------------------
Msrc/filtering.c | 17-----------------
Msrc/headerview.c | 15---------------
Msrc/mainwindow.c | 17-----------------
Msrc/prefs_matcher.c | 109++-----------------------------------------------------------------------------
Msrc/procmsg.c | 131+++----------------------------------------------------------------------------
Msrc/quote_fmt_parse.y | 68++++++++++++++++++++++++++++++--------------------------------------
Msrc/summaryview.c | 377+------------------------------------------------------------------------------
8 files changed, 38 insertions(+), 730 deletions(-)

diff --git a/src/edittags.c b/src/edittags.c @@ -250,10 +250,6 @@ static void tags_popup_delete (GtkAction *action, gpointer data) return; gtk_list_store_remove(GTK_LIST_STORE(model), &sel); - if (mainwindow_get_mainwindow() != NULL) - summaryview = mainwindow_get_mainwindow()->summaryview; - if (summaryview) - summary_set_tag(summaryview, -id, NULL); tags_remove_tag(id); tags_write_tags(); TAGS_WINDOW_UNLOCK(); @@ -276,15 +272,6 @@ static void tags_popup_delete_all (GtkAction *action, gpointer data) model = gtk_tree_view_get_model(GTK_TREE_VIEW(tagswindow.taglist)); gtk_list_store_clear(GTK_LIST_STORE(model)); - if (mainwindow_get_mainwindow() != NULL) - summaryview = mainwindow_get_mainwindow()->summaryview; - cur = tags = tags_get_list(); - for (; cur; cur = cur->next) { - gint id = GPOINTER_TO_INT(cur->data); - if (summaryview) - summary_set_tag(summaryview, -id, NULL); - tags_remove_tag(id); - } g_slist_free(tags); tags_write_tags(); @@ -444,10 +431,6 @@ static void tags_window_add_tag(void) if (id == -1) { id = tags_add_tag(new_tag); tags_write_tags(); - if (mainwindow_get_mainwindow()) - summary_set_tag( - mainwindow_get_mainwindow()->summaryview, - id, NULL); tags_window_list_view_insert_tag(tagswindow.taglist, NULL, id); } fis.tag_id = id; @@ -462,10 +445,6 @@ static void tags_window_add_tag(void) GtkTreeModel *model = gtk_tree_view_get_model( GTK_TREE_VIEW(tagswindow.taglist)); - if (mainwindow_get_mainwindow()) - summary_set_tag( - mainwindow_get_mainwindow()->summaryview, - id, NULL); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tagswindow.taglist)); gtk_tree_selection_select_iter(selection, &fis.iter); path = gtk_tree_model_get_path(model, &fis.iter); @@ -691,8 +670,6 @@ static void tags_selected_toggled(GtkCellRendererToggle *widget, -1); TAGS_WINDOW_LOCK(); - if (summaryview) - summary_set_tag(summaryview, set ? tag_id : -tag_id, NULL); TAGS_WINDOW_UNLOCK(); } @@ -727,23 +704,12 @@ static void tags_selected_edited(GtkCellRendererText *widget, tag_id = GPOINTER_TO_INT(tmp); TAGS_WINDOW_LOCK(); - if (selected) { - if (summaryview) - summary_set_tag(summaryview, -tag_id, NULL); - } tags_update_tag(tag_id, new_text); gtk_list_store_set(GTK_LIST_STORE(model), &iter, TAG_NAME, new_text, -1); - if (selected) { - if (summaryview) - summary_set_tag(summaryview, tag_id, NULL); - } else { - if (summaryview) - summary_set_tag(summaryview, 0, NULL); - } TAGS_WINDOW_UNLOCK(); } diff --git a/src/filtering.c b/src/filtering.c @@ -325,23 +325,6 @@ static gboolean filteringaction_apply(FilteringAction * action, MsgInfo * info) info->to_filter_folder = dest_folder; return TRUE; - case MATCHACTION_SET_TAG: - case MATCHACTION_UNSET_TAG: - val = tags_get_id_for_str(action->destination); - if (val == -1) { - debug_print("*** tag '%s' not found\n", - action->destination ?action->destination :"(null)"); - return FALSE; - } - FLUSH_COPY_IF_NEEDED(info); - procmsg_msginfo_update_tags(info, (action->type == MATCHACTION_SET_TAG), val); - return TRUE; - - case MATCHACTION_CLEAR_TAGS: - FLUSH_COPY_IF_NEEDED(info); - procmsg_msginfo_clear_tags(info); - return TRUE; - case MATCHACTION_DELETE: FLUSH_COPY_IF_NEEDED(info); info->filter_op = IS_DELE; diff --git a/src/headerview.c b/src/headerview.c @@ -185,8 +185,6 @@ void headerview_init(HeaderView *headerview) void headerview_show(HeaderView *headerview, MsgInfo *msginfo) { - gchar *tags = procmsg_msginfo_get_tags_str(msginfo); - headerview_clear(headerview); gtk_label_set_text(GTK_LABEL(headerview->from_body_label), @@ -197,22 +195,9 @@ void headerview_show(HeaderView *headerview, MsgInfo *msginfo) gtk_widget_show(headerview->to_header_label); gtk_widget_show(headerview->to_body_label); } - if (msginfo->newsgroups) { - gtk_label_set_text(GTK_LABEL(headerview->ng_body_label), - msginfo->newsgroups); - gtk_widget_show(headerview->ng_header_label); - gtk_widget_show(headerview->ng_body_label); - } gtk_label_set_text(GTK_LABEL(headerview->subject_body_label), msginfo->subject ? msginfo->subject : _("(No Subject)")); - if (tags) { - gtk_label_set_text(GTK_LABEL(headerview->tags_body_label), - tags); - gtk_widget_show(headerview->tags_header_label); - gtk_widget_show(headerview->tags_body_label); - g_free(tags); - } if (!headerview_show_avatar(headerview, msginfo)) return; diff --git a/src/mainwindow.c b/src/mainwindow.c @@ -665,10 +665,6 @@ static GtkActionEntry mainwin_entries[] = {"Message/Marks/Lock", NULL, N_("Lock"), NULL, NULL, G_CALLBACK(lock_msgs_cb) }, {"Message/Marks/Unlock", NULL, N_("Unlock"), NULL, NULL, G_CALLBACK(unlock_msgs_cb) }, - {"Message/ColorLabel", NULL, N_("Color la_bel"), NULL, NULL, NULL }, - {"Message/Tags", NULL, N_("Ta_gs"), NULL, NULL, NULL }, - /*{"Message/---", NULL, "---", NULL, NULL, NULL },*/ - {"Message/Reedit", NULL, N_("Re-_edit"), NULL, NULL, G_CALLBACK(reedit_cb) }, /*{"Message/---", NULL, "---", NULL, NULL, NULL },*/ @@ -791,8 +787,6 @@ static GtkRadioActionEntry mainwin_sort_radio_entries[] = { /* sort_summary_cb * {"View/Sort/From", NULL, N_("By _From"), NULL, NULL, SORT_BY_FROM }, /* radio SORT_BY_FROM */ {"View/Sort/To", NULL, N_("By _To"), NULL, NULL, SORT_BY_TO }, /* radio SORT_BY_TO */ {"View/Sort/Subject", NULL, N_("By s_ubject"), NULL, NULL, SORT_BY_SUBJECT }, /* radio SORT_BY_SUBJECT */ - {"View/Sort/Color", NULL, N_("By _color label"), NULL, NULL, SORT_BY_LABEL }, /* radio SORT_BY_LABEL */ - {"View/Sort/Tag", NULL, N_("By tag"), NULL, NULL, SORT_BY_TAGS }, /* radio SORT_BY_TAGS */ {"View/Sort/Mark", NULL, N_("By _mark"), NULL, NULL, SORT_BY_MARK }, /* radio SORT_BY_MARK */ {"View/Sort/Status", NULL, N_("By _status"), NULL, NULL, SORT_BY_STATUS }, /* radio SORT_BY_STATUS */ {"View/Sort/Attachment", NULL, N_("By a_ttachment"), NULL, NULL, SORT_BY_MIME }, /* radio SORT_BY_MIME */ @@ -1137,8 +1131,6 @@ MainWindow *main_window_create() MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/View/Sort", "From", "View/Sort/From", GTK_UI_MANAGER_MENUITEM) MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/View/Sort", "To", "View/Sort/To", GTK_UI_MANAGER_MENUITEM) MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/View/Sort", "Subject", "View/Sort/Subject", GTK_UI_MANAGER_MENUITEM) - MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/View/Sort", "Color", "View/Sort/Color", GTK_UI_MANAGER_MENUITEM) - MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/View/Sort", "Tag", "View/Sort/Tag", GTK_UI_MANAGER_MENUITEM) MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/View/Sort", "Mark", "View/Sort/Mark", GTK_UI_MANAGER_MENUITEM) MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/View/Sort", "Status", "View/Sort/Status", GTK_UI_MANAGER_MENUITEM) MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/View/Sort", "Attachment", "View/Sort/Attachment", GTK_UI_MANAGER_MENUITEM) @@ -1336,8 +1328,6 @@ MainWindow *main_window_create() MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message/Marks", "Separator5", "Message/Marks/---", GTK_UI_MANAGER_SEPARATOR) MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message/Marks", "Lock", "Message/Marks/Lock", GTK_UI_MANAGER_MENUITEM) MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message/Marks", "Unlock", "Message/Marks/Unlock", GTK_UI_MANAGER_MENUITEM) - MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message", "ColorLabel", "Message/ColorLabel", GTK_UI_MANAGER_MENUITEM) - MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message", "Tags", "Message/Tags", GTK_UI_MANAGER_MENUITEM) MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message", "Separator5", "Message/---", GTK_UI_MANAGER_SEPARATOR) MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message", "Reedit", "Message/Reedit", GTK_UI_MANAGER_MENUITEM) @@ -1408,7 +1398,6 @@ MainWindow *main_window_create() MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Configuration", "Filtering", "Configuration/Filtering", GTK_UI_MANAGER_MENUITEM) MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Configuration", "Templates", "Configuration/Templates", GTK_UI_MANAGER_MENUITEM) MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Configuration", "Actions", "Configuration/Actions", GTK_UI_MANAGER_MENUITEM) - MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Configuration", "Tags", "Configuration/Tags", GTK_UI_MANAGER_MENUITEM) MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Configuration", "Separator2", "Configuration/---", GTK_UI_MANAGER_SEPARATOR) @@ -2631,8 +2620,6 @@ void main_window_set_menu_sensitive(MainWindow *mainwin) SET_SENSITIVE("Menu/Message/Marks/UnignoreThread", M_TARGET_EXIST); SET_SENSITIVE("Menu/Message/Marks/Lock", M_TARGET_EXIST); SET_SENSITIVE("Menu/Message/Marks/Unlock", M_TARGET_EXIST); - SET_SENSITIVE("Menu/Message/ColorLabel", M_TARGET_EXIST); - SET_SENSITIVE("Menu/Message/Tags", M_TARGET_EXIST); SET_SENSITIVE("Menu/Message/Reedit", M_HAVE_ACCOUNT, M_ALLOW_REEDIT); SET_SENSITIVE("Menu/Message/CheckSignature", M_SINGLE_TARGET_EXIST); @@ -2699,8 +2686,6 @@ void main_window_set_menu_sensitive(MainWindow *mainwin) menu_path = "Menu/View/Sort/To"; break; case SORT_BY_SUBJECT: menu_path = "Menu/View/Sort/Subject"; break; - case SORT_BY_LABEL: - menu_path = "Menu/View/Sort/Color"; break; case SORT_BY_MARK: menu_path = "Menu/View/Sort/Mark"; break; case SORT_BY_STATUS: @@ -2711,8 +2696,6 @@ void main_window_set_menu_sensitive(MainWindow *mainwin) menu_path = "Menu/View/Sort/Score"; break; case SORT_BY_LOCKED: menu_path = "Menu/View/Sort/Locked"; break; - case SORT_BY_TAGS: - menu_path = "Menu/View/Sort/Tag"; break; case SORT_BY_NONE: default: menu_path = "Menu/View/Sort/DontSort"; break; diff --git a/src/prefs_matcher.c b/src/prefs_matcher.c @@ -50,7 +50,6 @@ #include "combobox.h" #include "matcher_parser.h" -#include "tags.h" #include "addressbook.h" static void prefs_matcher_addressbook_select(void); @@ -111,7 +110,6 @@ static struct Matcher { GtkTreeModel *model_set; GtkTreeModel *model_size; GtkTreeModel *model_size_units; - GtkTreeModel *model_tags; GtkTreeModel *model_test; GtkTreeModel *model_thread; @@ -311,8 +309,6 @@ static int header_name_to_crit(const gchar *header) return CRITERIA_MESSAGEID; if (!strcasecmp(header, "In-Reply-To")) return CRITERIA_INREPLYTO; - if (!strcasecmp(header, "Newsgroups")) - return CRITERIA_NEWSGROUPS; if (!strcasecmp(header, "References")) return CRITERIA_REFERENCES; @@ -371,7 +367,6 @@ static void prefs_matcher_models_create(void) COMBOBOX_ADD(store, "To or Cc", CRITERIA_TO_OR_CC); COMBOBOX_ADD(store, "Message-ID", CRITERIA_MESSAGEID); COMBOBOX_ADD(store, "In-Reply-To", CRITERIA_INREPLYTO); - COMBOBOX_ADD(store, "Newsgroups", CRITERIA_NEWSGROUPS); COMBOBOX_ADD(store, "References", CRITERIA_REFERENCES); COMBOBOX_ADD(store, "Sender", CRITERIA_HEADER); COMBOBOX_ADD(store, "X-ML-Name", CRITERIA_HEADER); @@ -414,11 +409,6 @@ static void prefs_matcher_models_create(void) matcher.model_partial = GTK_TREE_MODEL(store); store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN); - COMBOBOX_ADD(store, _("Any tags"), CRITERIA_TAGGED); - COMBOBOX_ADD(store, _("Specific tag"), CRITERIA_TAG); - matcher.model_tags = GTK_TREE_MODEL(store); - - store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN); COMBOBOX_ADD(store, _("ignored"), CRITERIA_IGNORE_THREAD); COMBOBOX_ADD(store, _("not ignored"), CRITERIA_IGNORE_THREAD); COMBOBOX_ADD(store, _("watched"), CRITERIA_WATCH_THREAD); @@ -631,7 +621,6 @@ static void prefs_matcher_create(void) COMBOBOX_ADD(store, _("Size"), MATCH_SIZE); COMBOBOX_ADD(store, _("Partially downloaded"), MATCH_PARTIAL); COMBOBOX_ADD(store, _("Address book"), MATCH_ABOOK); - COMBOBOX_ADD(store, _("Tags"), MATCH_TAGS); COMBOBOX_ADD(store, _("External program test"), MATCH_TEST); COMBOBOX_ADD(store, _("Date"), MATCH_DATE); @@ -920,7 +909,6 @@ static gboolean match_combo2_model_set(void) model == matcher.model_phrase || model == matcher.model_set || model == matcher.model_size_units || - model == matcher.model_tags || model == matcher.model_thread) return TRUE; else @@ -997,9 +985,6 @@ static void prefs_matcher_set_dialog(MatcherList *matchers) gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.bool_op_combo), bool_op); prefs_matcher_reset_condition(); - - combobox_set_sensitive(GTK_COMBO_BOX(matcher.criteria_combo), MATCH_TAGS, - (tags_get_size() > 0) ? TRUE : FALSE); } /*! @@ -1099,9 +1084,6 @@ static gint prefs_matcher_get_criteria_from_matching(gint matching_id) case MATCHCRITERIA_PARTIAL: case MATCHCRITERIA_NOT_PARTIAL: return CRITERIA_PARTIAL; - case MATCHCRITERIA_COLORLABEL: - case MATCHCRITERIA_NOT_COLORLABEL: - return CRITERIA_COLORLABEL; case MATCHCRITERIA_IGNORE_THREAD: case MATCHCRITERIA_NOT_IGNORE_THREAD: return CRITERIA_IGNORE_THREAD; @@ -1120,9 +1102,6 @@ static gint prefs_matcher_get_criteria_from_matching(gint matching_id) case MATCHCRITERIA_NOT_CC: case MATCHCRITERIA_CC: return CRITERIA_CC; - case MATCHCRITERIA_NOT_NEWSGROUPS: - case MATCHCRITERIA_NEWSGROUPS: - return CRITERIA_NEWSGROUPS; case MATCHCRITERIA_NOT_MESSAGEID: case MATCHCRITERIA_MESSAGEID: return CRITERIA_MESSAGEID; @@ -1135,12 +1114,6 @@ static gint prefs_matcher_get_criteria_from_matching(gint matching_id) case MATCHCRITERIA_NOT_TO_AND_NOT_CC: case MATCHCRITERIA_TO_OR_CC: return CRITERIA_TO_OR_CC; - case MATCHCRITERIA_NOT_TAG: - case MATCHCRITERIA_TAG: - return CRITERIA_TAG; - case MATCHCRITERIA_NOT_TAGGED: - case MATCHCRITERIA_TAGGED: - return CRITERIA_TAGGED; case MATCHCRITERIA_NOT_BODY_PART: case MATCHCRITERIA_BODY_PART: return CRITERIA_BODY_PART; @@ -1226,8 +1199,6 @@ static gint prefs_matcher_get_matching_from_criteria(gint criteria_id) return MATCHCRITERIA_SIGNED; case CRITERIA_PARTIAL: return MATCHCRITERIA_PARTIAL; - case CRITERIA_COLORLABEL: - return MATCHCRITERIA_COLORLABEL; case CRITERIA_IGNORE_THREAD: return MATCHCRITERIA_IGNORE_THREAD; case CRITERIA_WATCH_THREAD: @@ -1242,12 +1213,6 @@ static gint prefs_matcher_get_matching_from_criteria(gint criteria_id) return MATCHCRITERIA_CC; case CRITERIA_TO_OR_CC: return MATCHCRITERIA_TO_OR_CC; - case CRITERIA_TAG: - return MATCHCRITERIA_TAG; - case CRITERIA_TAGGED: - return MATCHCRITERIA_TAGGED; - case CRITERIA_NEWSGROUPS: - return MATCHCRITERIA_NEWSGROUPS; case CRITERIA_MESSAGEID: return MATCHCRITERIA_MESSAGEID; case CRITERIA_INREPLYTO: @@ -1330,8 +1295,6 @@ static gint prefs_matcher_not_criteria(gint matcher_criteria) return MATCHCRITERIA_NOT_SIGNED; case MATCHCRITERIA_PARTIAL: return MATCHCRITERIA_NOT_PARTIAL; - case MATCHCRITERIA_COLORLABEL: - return MATCHCRITERIA_NOT_COLORLABEL; case MATCHCRITERIA_IGNORE_THREAD: return MATCHCRITERIA_NOT_IGNORE_THREAD; case MATCHCRITERIA_WATCH_THREAD: @@ -1346,12 +1309,6 @@ static gint prefs_matcher_not_criteria(gint matcher_criteria) return MATCHCRITERIA_NOT_CC; case MATCHCRITERIA_TO_OR_CC: return MATCHCRITERIA_NOT_TO_AND_NOT_CC; - case MATCHCRITERIA_TAG: - return MATCHCRITERIA_NOT_TAG; - case MATCHCRITERIA_TAGGED: - return MATCHCRITERIA_NOT_TAGGED; - case MATCHCRITERIA_NEWSGROUPS: - return MATCHCRITERIA_NOT_NEWSGROUPS; case MATCHCRITERIA_MESSAGEID: return MATCHCRITERIA_NOT_MESSAGEID; case MATCHCRITERIA_INREPLYTO: @@ -1398,14 +1355,11 @@ static gint prefs_matcher_get_criteria(void) case MATCH_HEADER: header = gtk_entry_get_text(GTK_ENTRY(matcher.header_entry)); return header_name_to_crit(header); - case MATCH_LABEL: - return CRITERIA_COLORLABEL; case MATCH_PARTIAL: return CRITERIA_PARTIAL; case MATCH_TEST: return CRITERIA_TEST; case MATCH_PHRASE: - case MATCH_TAGS: case MATCH_THREAD: return combobox_get_active_data(GTK_COMBO_BOX( matcher.criteria_combo2)); @@ -1422,7 +1376,6 @@ static gint prefs_matcher_get_pred(const gint criteria) case CRITERIA_TO: case CRITERIA_CC: case CRITERIA_TO_OR_CC: - case CRITERIA_NEWSGROUPS: case CRITERIA_MESSAGEID: case CRITERIA_INREPLYTO: case CRITERIA_REFERENCES: @@ -1431,8 +1384,6 @@ static gint prefs_matcher_get_pred(const gint criteria) case CRITERIA_HEADERS_CONT: case CRITERIA_BODY_PART: case CRITERIA_MESSAGE: - case CRITERIA_TAG: - case CRITERIA_TAGGED: case CRITERIA_TEST: return gtk_combo_box_get_active(GTK_COMBO_BOX(matcher.match_combo)); case CRITERIA_FOUND_IN_ADDRESSBOOK: @@ -1446,7 +1397,6 @@ static gint prefs_matcher_get_pred(const gint criteria) case CRITERIA_SPAM: case CRITERIA_HAS_ATTACHMENT: case CRITERIA_SIGNED: - case CRITERIA_COLORLABEL: return gtk_combo_box_get_active(GTK_COMBO_BOX(matcher.match_combo2)); case CRITERIA_WATCH_THREAD: return gtk_combo_box_get_active(GTK_COMBO_BOX(matcher.criteria_combo2)) - 2; @@ -1517,7 +1467,6 @@ static MatcherProp *prefs_matcher_dialog_to_matcher(void) case CRITERIA_PARTIAL: case CRITERIA_IGNORE_THREAD: case CRITERIA_WATCH_THREAD: - case CRITERIA_TAGGED: break; case CRITERIA_SUBJECT: @@ -1525,8 +1474,6 @@ static MatcherProp *prefs_matcher_dialog_to_matcher(void) case CRITERIA_TO: case CRITERIA_CC: case CRITERIA_TO_OR_CC: - case CRITERIA_TAG: - case CRITERIA_NEWSGROUPS: case CRITERIA_MESSAGEID: case CRITERIA_INREPLYTO: case CRITERIA_REFERENCES: @@ -1849,7 +1796,7 @@ static void prefs_matcher_second_criteria_sel(GtkWidget *widget, gint criteria2 = combobox_get_active_data(GTK_COMBO_BOX( matcher.criteria_combo2)); - if(criteria != MATCH_PHRASE && criteria != MATCH_TAGS) return; + if(criteria != MATCH_PHRASE) return; if(criteria == MATCH_PHRASE) { switch(criteria2) { @@ -1871,26 +1818,6 @@ static void prefs_matcher_second_criteria_sel(GtkWidget *widget, break; } } - - if(criteria == MATCH_TAGS) { - if(criteria2 == CRITERIA_TAGGED) { - prefs_matcher_enable_widget(matcher.upper_filler, FALSE); - prefs_matcher_enable_widget(matcher.match_label2, TRUE); - prefs_matcher_enable_widget(matcher.string_entry, FALSE); - prefs_matcher_enable_widget(matcher.case_checkbtn, FALSE); - prefs_matcher_enable_widget(matcher.regexp_checkbtn, FALSE); - } else { - prefs_matcher_enable_widget(matcher.upper_filler, TRUE); - prefs_matcher_enable_widget(matcher.match_label2, FALSE); - prefs_matcher_enable_widget(matcher.string_entry, TRUE); - prefs_matcher_enable_widget(matcher.case_checkbtn, TRUE); - prefs_matcher_enable_widget(matcher.regexp_checkbtn, TRUE); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON( - matcher.regexp_checkbtn), FALSE); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON( - matcher.case_checkbtn), FALSE); - } - } } #define MATCH_COMBO_IS_ENABLED(x) (x != MATCH_ALL && x != MATCH_ABOOK && \ @@ -1922,14 +1849,12 @@ static void prefs_matcher_criteria_select(GtkWidget *widget, value == MATCH_PHRASE || value == MATCH_HEADER || value == MATCH_PARTIAL || - value == MATCH_TAGS || value == MATCH_THREAD)); prefs_matcher_enable_widget(matcher.headers_combo, (value == MATCH_HEADER)); prefs_matcher_enable_widget(matcher.criteria_combo2, (value == MATCH_PHRASE || value == MATCH_PARTIAL || - value == MATCH_TAGS || value == MATCH_THREAD)); prefs_matcher_enable_widget(matcher.match_combo2, (value == MATCH_ABOOK || @@ -1940,8 +1865,7 @@ static void prefs_matcher_criteria_select(GtkWidget *widget, prefs_matcher_enable_widget(matcher.match_label2, (value == MATCH_ABOOK || value == MATCH_FLAG || - value == MATCH_LABEL || - value == MATCH_TAGS)); + value == MATCH_LABEL)); prefs_matcher_enable_widget(matcher.header_addr_combo, (value == MATCH_ABOOK)); prefs_matcher_enable_widget(matcher.string_entry, @@ -2045,14 +1969,6 @@ static void prefs_matcher_criteria_select(GtkWidget *widget, gtk_spin_button_set_value(GTK_SPIN_BUTTON(matcher.numeric_entry), 0); gtk_label_set_text(GTK_LABEL(matcher.match_label), _("Size is")); break; - case MATCH_TAGS: - prefs_matcher_set_model(matcher.criteria_combo2, matcher.model_tags); - prefs_matcher_set_model(matcher.match_combo, matcher.model_contain); - gtk_label_set_text(GTK_LABEL(matcher.criteria_label2), _("Scope:")); - gtk_label_set_text(GTK_LABEL(matcher.match_label), _("Message")); - gtk_label_set_text(GTK_LABEL(matcher.match_label2), _("tags")); - prefs_matcher_second_criteria_sel(NULL, NULL); - break; case MATCH_THREAD: prefs_matcher_set_model(matcher.criteria_combo2, matcher.model_thread); gtk_label_set_text(GTK_LABEL(matcher.criteria_label2), _("type is")); @@ -2337,7 +2253,6 @@ static void prefs_matcher_set_criteria(const gint criteria) case CRITERIA_TO: case CRITERIA_CC: case CRITERIA_TO_OR_CC: - case CRITERIA_NEWSGROUPS: case CRITERIA_MESSAGEID: case CRITERIA_INREPLYTO: case CRITERIA_REFERENCES: @@ -2353,13 +2268,6 @@ static void prefs_matcher_set_criteria(const gint criteria) case CRITERIA_TEST: match_criteria = MATCH_TEST; break; - case CRITERIA_COLORLABEL: - match_criteria = MATCH_LABEL; - break; - case CRITERIA_TAG: - case CRITERIA_TAGGED: - match_criteria = MATCH_TAGS; - break; case CRITERIA_UNREAD: case CRITERIA_NEW: case CRITERIA_MARKED: @@ -2400,7 +2308,6 @@ static void prefs_matcher_set_criteria(const gint criteria) matcher.match_combo), criteria); break; case MATCH_PHRASE: - case MATCH_TAGS: combobox_select_by_data(GTK_COMBO_BOX( matcher.criteria_combo2), criteria); break; @@ -2462,7 +2369,6 @@ static gboolean prefs_matcher_selected(GtkTreeSelection *selector, case MATCHCRITERIA_HAS_NO_ATTACHMENT: case MATCHCRITERIA_NOT_SIGNED: case MATCHCRITERIA_NOT_PARTIAL: - case MATCHCRITERIA_NOT_COLORLABEL: case MATCHCRITERIA_NOT_IGNORE_THREAD: case MATCHCRITERIA_NOT_WATCH_THREAD: case MATCHCRITERIA_NOT_SUBJECT: @@ -2470,9 +2376,6 @@ static gboolean prefs_matcher_selected(GtkTreeSelection *selector, case MATCHCRITERIA_NOT_TO: case MATCHCRITERIA_NOT_CC: case MATCHCRITERIA_NOT_TO_AND_NOT_CC: - case MATCHCRITERIA_NOT_TAG: - case MATCHCRITERIA_NOT_TAGGED: - case MATCHCRITERIA_NOT_NEWSGROUPS: case MATCHCRITERIA_NOT_MESSAGEID: case MATCHCRITERIA_NOT_INREPLYTO: case MATCHCRITERIA_NOT_REFERENCES: @@ -2496,8 +2399,6 @@ static gboolean prefs_matcher_selected(GtkTreeSelection *selector, case MATCHCRITERIA_NOT_TO: case MATCHCRITERIA_NOT_CC: case MATCHCRITERIA_NOT_TO_AND_NOT_CC: - case MATCHCRITERIA_NOT_TAG: - case MATCHCRITERIA_NOT_NEWSGROUPS: case MATCHCRITERIA_NOT_MESSAGEID: case MATCHCRITERIA_NOT_INREPLYTO: case MATCHCRITERIA_NOT_REFERENCES: @@ -2511,8 +2412,6 @@ static gboolean prefs_matcher_selected(GtkTreeSelection *selector, case MATCHCRITERIA_TO: case MATCHCRITERIA_CC: case MATCHCRITERIA_TO_OR_CC: - case MATCHCRITERIA_TAG: - case MATCHCRITERIA_NEWSGROUPS: case MATCHCRITERIA_MESSAGEID: case MATCHCRITERIA_INREPLYTO: case MATCHCRITERIA_REFERENCES: @@ -2623,7 +2522,6 @@ static gboolean prefs_matcher_selected(GtkTreeSelection *selector, case CRITERIA_TO: case CRITERIA_CC: case CRITERIA_TO_OR_CC: - case CRITERIA_NEWSGROUPS: case CRITERIA_MESSAGEID: case CRITERIA_INREPLYTO: case CRITERIA_REFERENCES: @@ -2632,8 +2530,6 @@ static gboolean prefs_matcher_selected(GtkTreeSelection *selector, case CRITERIA_HEADERS_CONT: case CRITERIA_BODY_PART: case CRITERIA_MESSAGE: - case CRITERIA_TAG: - case CRITERIA_TAGGED: case CRITERIA_TEST: gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.match_combo), negative_cond ? PREDICATE_DOES_NOT_CONTAIN : @@ -2650,7 +2546,6 @@ static gboolean prefs_matcher_selected(GtkTreeSelection *selector, case CRITERIA_SPAM: case CRITERIA_HAS_ATTACHMENT: case CRITERIA_SIGNED: - case CRITERIA_COLORLABEL: gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.match_combo2), negative_cond ? PREDICATE_FLAG_DISABLED : PREDICATE_FLAG_ENABLED); diff --git a/src/procmsg.c b/src/procmsg.c @@ -47,7 +47,6 @@ #include "mainwindow.h" #include "summaryview.h" #include "log.h" -#include "tags.h" #include "inc.h" #include "privacy.h" #include "file-utils.h" @@ -1560,17 +1559,16 @@ static gint procmsg_send_message_queue_full(const gchar *file, gboolean keep_ses {NULL, NULL, FALSE}}; FILE *fp; gint filepos; - gint mailval = 0, newsval = 0; + gint mailval = 0; gchar *from = NULL; gchar *smtpserver = NULL; GSList *to_list = NULL; - GSList *newsgroup_list = NULL; gchar *savecopyfolder = NULL; gchar *replymessageid = NULL; gchar *fwdmessageid = NULL; gchar *buf; gint hnum; - PrefsAccount *mailac = NULL, *newsac = NULL; + PrefsAccount *mailac = NULL; gboolean encrypt = FALSE; FolderItem *outbox; @@ -1600,15 +1598,9 @@ static gint procmsg_send_message_queue_full(const gchar *file, gboolean keep_ses case Q_RECIPIENTS: to_list = address_list_append(to_list, p); break; - case Q_NEWSGROUPS: - newsgroup_list = newsgroup_list_append(newsgroup_list, p); - break; case Q_MAIL_ACCOUNT_ID: mailac = account_find_from_id(atoi(p)); break; - case Q_NEWS_ACCOUNT_ID: - newsac = account_find_from_id(atoi(p)); - break; case Q_SAVE_COPY_FOLDER: if (savecopyfolder == NULL) savecopyfolder = g_strdup(p); @@ -1690,7 +1682,7 @@ send_mail: } } } - } else if (!to_list && !newsgroup_list) { + } else if (!to_list) { if (errstr) { if (*errstr) g_free(*errstr); *errstr = g_strdup(_("Couldn't determine sending information. " @@ -1704,58 +1696,10 @@ send_mail: mailval = -1; } - if (newsgroup_list && newsac && (mailval == 0)) { - Folder *folder; - gchar *tmp = NULL; - gchar buf[BUFFSIZE]; - FILE *tmpfp; - - /* write to temporary file */ - tmp = g_strdup_printf("%s%cnntp%p", get_tmp_dir(), - G_DIR_SEPARATOR, file); - if ((tmpfp = g_fopen(tmp, "wb")) == NULL) { - FILE_OP_ERROR(tmp, "g_fopen"); - newsval = -1; - alertpanel_error(_("Couldn't create temporary file for news sending.")); - } else { - if (change_file_mode_rw(tmpfp, tmp) < 0) { - FILE_OP_ERROR(tmp, "chmod"); - g_warning("can't change file mode"); - } - - while ((newsval == 0) && fgets(buf, sizeof(buf), fp) != NULL) { - if (fputs(buf, tmpfp) == EOF) { - FILE_OP_ERROR(tmp, "fputs"); - newsval = -1; - if (errstr) { - if (*errstr) g_free(*errstr); - *errstr = g_strdup_printf(_("Error when writing temporary file for news sending.")); - } - } - } - safe_fclose(tmpfp); - - if (newsval == 0) { - debug_print("Sending message by news\n"); - - folder = FOLDER(newsac->folder); - - newsval = news_post(folder, tmp); - if (newsval < 0 && errstr) { - if (*errstr) g_free(*errstr); - *errstr = g_strdup_printf(_("Error occurred while posting the message to %s."), - newsac->nntp_server); - } - } - unlink(tmp); - } - g_free(tmp); - } - fclose(fp); /* save message to outbox */ - if (mailval == 0 && newsval == 0 && savecopyfolder) { + if (mailval == 0 && savecopyfolder) { debug_print("saving sent message to %s...\n", savecopyfolder); if (!encrypt || !mailac->save_encrypted_as_clear_text) { @@ -1842,12 +1786,11 @@ send_mail: g_free(from); g_free(smtpserver); slist_free_strings_full(to_list); - slist_free_strings_full(newsgroup_list); g_free(savecopyfolder); g_free(replymessageid); g_free(fwdmessageid); - return (newsval != 0 ? newsval : mailval); + return (mailval); } gint procmsg_send_message_queue(const gchar *file, gchar **errstr, FolderItem *queue, gint msgnum, gboolean *queued_removed) @@ -2502,67 +2445,3 @@ gboolean procmsg_have_trashed_mails_fast (void) return result; } -gchar *procmsg_msginfo_get_tags_str(MsgInfo *msginfo) -{ - GSList *cur = NULL; - gchar *tags = NULL; - - if (!msginfo) - return NULL; - - if (msginfo->tags == NULL) - return NULL; - for (cur = msginfo->tags; cur; cur = cur->next) { - const gchar *tag = tags_get_tag(GPOINTER_TO_INT(cur->data)); - if (!tag) - continue; - if (!tags) - tags = g_strdup(tag); - else { - int olen = strlen(tags); - int nlen = olen + strlen(tag) + 2 /* strlen(", ") */; - tags = g_realloc(tags, nlen+1); - if (!tags) - return NULL; - strcpy(tags+olen, ", "); - strcpy(tags+olen+2, tag); - tags[nlen]='\0'; - } - } - return tags; -} - -void procmsg_msginfo_update_tags(MsgInfo *msginfo, gboolean set, gint id) -{ - GSList changed; - - if (id == 0) - return; - - if (!set) { - msginfo->tags = g_slist_remove( - msginfo->tags, - GINT_TO_POINTER(id)); - changed.data = GINT_TO_POINTER(id); - changed.next = NULL; - folder_item_commit_tags(msginfo->folder, msginfo, NULL, &changed); - } else { - if (!g_slist_find(msginfo->tags, GINT_TO_POINTER(id))) { - msginfo->tags = g_slist_append( - msginfo->tags, - GINT_TO_POINTER(id)); - } - changed.data = GINT_TO_POINTER(id); - changed.next = NULL; - folder_item_commit_tags(msginfo->folder, msginfo, &changed, NULL); - } - -} - -void procmsg_msginfo_clear_tags(MsgInfo *msginfo) -{ - GSList *unset = msginfo->tags; - msginfo->tags = NULL; - folder_item_commit_tags(msginfo->folder, msginfo, NULL, unset); - g_slist_free(unset); -} diff --git a/src/quote_fmt_parse.y b/src/quote_fmt_parse.y @@ -14,7 +14,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * */ %{ @@ -154,7 +154,7 @@ gint quote_fmt_get_line(void) gint quote_fmt_get_cursor_pos(void) { - return cursor_pos; + return cursor_pos; } #define INSERT(buf) \ @@ -222,7 +222,7 @@ void quote_fmt_init(MsgInfo *info, const gchar *my_quote_str, escaped_string = string_is_escaped; if (!var_table) - var_table = g_hash_table_new_full(g_str_hash, g_str_equal, + var_table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); /* @@ -293,28 +293,28 @@ static void quote_fmt_show_date(const MsgInfo *msginfo, const gchar *format) if (!msginfo->date) return; - - /* - * ALF - GNU C's strftime() has a nice format specifier - * for time zone offset (%z). Non-standard however, so + + /* + * ALF - GNU C's strftime() has a nice format specifier + * for time zone offset (%z). Non-standard however, so * emulate it. */ -#define RLEFT (sizeof result) - (rptr - result) +#define RLEFT (sizeof result) - (rptr - result) zone[0] = 0; result[0] = '\0'; if (procheader_date_parse_to_tm(msginfo->date, &lt, zone)) { /* - * break up format string in tiny bits delimited by valid %z's and + * break up format string in tiny bits delimited by valid %z's and * feed it to strftime(). don't forget that '%%z' mean literal '%z'. */ for (rptr = result, fptr = format; fptr && *fptr && rptr < &result[sizeof result - 1];) { int perc, zlen; const char *p; char *tmp; - + if (NULL != (zptr = strtzspec(fptr, &zlen))) { /* * count nr. of prepended percent chars @@ -332,7 +332,7 @@ static void quote_fmt_show_date(const MsgInfo *msginfo, const gchar *format) /* * append time zone offset */ - if (zone[0] && perc % 2) + if (zone[0] && perc % 2) rptr += g_snprintf(rptr, RLEFT, "%s", zone); fptr = zptr + zlen; } else { @@ -340,18 +340,18 @@ static void quote_fmt_show_date(const MsgInfo *msginfo, const gchar *format) fptr = NULL; } } - + if (g_utf8_validate(result, -1, NULL)) { INSERT(result); } else { - gchar *utf = conv_codeset_strdup(result, + gchar *utf = conv_codeset_strdup(result, conv_get_locale_charset_str_no_utf8(), CS_INTERNAL); - if (utf == NULL || + if (utf == NULL || !g_utf8_validate(utf, -1, NULL)) { g_free(utf); utf = g_malloc(strlen(result)*2+1); - conv_localetodisp(utf, + conv_localetodisp(utf, strlen(result)*2+1, result); } if (g_utf8_validate(utf, -1, NULL)) { @@ -360,8 +360,8 @@ static void quote_fmt_show_date(const MsgInfo *msginfo, const gchar *format) g_free(utf); } } -#undef RLEFT -} +#undef RLEFT +} static void quote_fmt_show_first_name(const MsgInfo *msginfo) { @@ -369,8 +369,8 @@ static void quote_fmt_show_first_name(const MsgInfo *msginfo) gchar *str; if (!msginfo->fromname) - return; - + return; + p = (guchar*)strchr(msginfo->fromname, ','); if (p != NULL) { /* fromname is like "Duck, Donald" */ @@ -401,7 +401,7 @@ static void quote_fmt_show_last_name(const MsgInfo *msginfo) /* This probably won't work together very well with Middle names and the like - thth */ - if (!msginfo->fromname) + if (!msginfo->fromname) return; str = alloca(strlen(msginfo->fromname) + 1); @@ -417,20 +417,20 @@ static void quote_fmt_show_last_name(const MsgInfo *msginfo) p = str; while (*p && !isspace(*p)) p++; if (*p) { - /* We found a space. Get first + /* We found a space. Get first none-space char and insert rest of string from there. */ while (*p && isspace(*p)) p++; if (*p) { INSERT(p); } else { - /* If there is no none-space - char, just insert whole + /* If there is no none-space + char, just insert whole fromname. */ INSERT(str); } } else { - /* If there is no space, just + /* If there is no space, just insert whole fromname. */ INSERT(str); } @@ -446,7 +446,7 @@ static void quote_fmt_show_sender_initial(const MsgInfo *msginfo) gchar *cur; gint len = 0; - if (!msginfo->fromname) + if (!msginfo->fromname) return; p = (guchar *)msginfo->fromname; @@ -495,10 +495,10 @@ static void quote_fmt_show_msg(MsgInfo *msginfo, const gchar *body, if (!signature && account_sigsep_matchlist_nchar_found(buf, "%s\n")) break; - + if (quoted && quote_str) INSERT(quote_str); - + INSERT(buf); } account_sigsep_matchlist_delete(); @@ -510,7 +510,7 @@ static void quote_fmt_insert_file(const gchar *filename) { FILE *file; char buffer[PATH_MAX]; - + if ((file = g_fopen(filename, "rb")) != NULL) { while (fgets(buffer, sizeof(buffer), file)) { INSERT(buffer); @@ -538,7 +538,7 @@ static void quote_fmt_insert_user_input(const gchar *varname) gchar *buf = NULL; gchar *text = NULL; - if (dry_run) + if (dry_run) return; if ((text = g_hash_table_lookup(var_table, varname)) == NULL) { @@ -719,7 +719,7 @@ string: | string CHARACTER { size_t len; - + strncpy($$, $1, sizeof($$)); $$[sizeof($$) - 1] = '\0'; len = strlen($$); @@ -871,14 +871,6 @@ special: INSERT(default_dictionary); #endif } - | SHOW_TAGS - { - gchar *tags = procmsg_msginfo_get_tags_str(msginfo); - if (tags) { - INSERT(tags); - } - g_free(tags); - } | SHOW_BACKSLASH { INSERT("\\"); diff --git a/src/summaryview.c b/src/summaryview.c @@ -70,9 +70,7 @@ #include "folderutils.h" #include "quicksearch.h" #include "partial_download.h" -#include "tags.h" #include "log.h" -#include "edittags.h" #include "manual.h" #include "manage_window.h" #include "avatars.h" @@ -168,11 +166,6 @@ static void summary_display_msg_full (SummaryView *summaryview, static void summary_set_row_marks (SummaryView *summaryview, GtkCMCTreeNode *row); -static gboolean summary_set_row_tag (SummaryView *summaryview, - GtkCMCTreeNode *row, - gboolean refresh, - gboolean set, - gint id); /* message handling */ static void summary_mark_row (SummaryView *summaryview, GtkCMCTreeNode *row); @@ -224,15 +217,6 @@ void summary_simplify_subject(SummaryView *summaryview, gchar * rexp, static void summary_filter_func (MsgInfo *msginfo, PrefsAccount *ac_prefs); -static void summary_tags_menu_item_activate_cb - (GtkWidget *widget, - gpointer data); -static void summary_tags_menu_item_activate_item_cb - (GtkMenuItem *label_menu_item, - gpointer data); -static void summary_tags_menu_create(SummaryView *summaryview, - gboolean refresh); - static GtkWidget *summary_ctree_create (SummaryView *summaryview); /* callback functions */ @@ -295,8 +279,6 @@ static void summary_score_clicked (GtkWidget *button, SummaryView *summaryview); static void summary_locked_clicked (GtkWidget *button, SummaryView *summaryview); -static void summary_tags_clicked (GtkWidget *button, - SummaryView *summaryview); static void summary_start_drag (GtkWidget *widget, int button, @@ -370,9 +352,6 @@ static gint summary_cmp_by_subject (GtkCMCList *clist, static gint summary_cmp_by_locked (GtkCMCList *clist, gconstpointer ptr1, gconstpointer ptr2); -static gint summary_cmp_by_tags (GtkCMCList *clist, - gconstpointer ptr1, - gconstpointer ptr2); static void quicksearch_execute_cb (QuickSearch *quicksearch, gpointer data); @@ -962,7 +941,6 @@ void summary_init(SummaryView *summaryview) summaryview->simplify_subject_preg = NULL; summary_clear_list(summaryview); summary_set_column_titles(summaryview); - summary_tags_menu_create(summaryview, FALSE); main_create_mailing_list_menu (summaryview->mainwin, NULL); summary_set_menu_sensitive(summaryview); @@ -2829,38 +2807,6 @@ static void summary_set_column_titles(SummaryView *summaryview) } } -void summary_reflect_tags_changes(SummaryView *summaryview) -{ - GtkMenuShell *menu; - GList *children, *cur; - GtkCMCTreeNode *node; - GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree); - gboolean froze = FALSE; - gboolean redisplay = FALSE; - - menu = GTK_MENU_SHELL(summaryview->tags_menu); - cm_return_if_fail(menu != NULL); - - /* clear items. get item pointers. */ - children = gtk_container_get_children(GTK_CONTAINER(menu)); - for (cur = children; cur != NULL && cur->data != NULL; cur = cur->next) { - gtk_menu_item_set_submenu(GTK_MENU_ITEM(cur->data), NULL); - } - g_list_free(children); - summary_tags_menu_create(summaryview, TRUE); - - START_LONG_OPERATION(summaryview, TRUE); - for (node = GTK_CMCTREE_NODE(GTK_CMCLIST(ctree)->row_list); node != NULL; - node = gtkut_ctree_node_next(ctree, node)) { - redisplay |= summary_set_row_tag(summaryview, - node, TRUE, FALSE, 0); - } - END_LONG_OPERATION(summaryview); - if (redisplay) - summary_redisplay_msg(summaryview); -} - - void summary_reflect_prefs(void) { static gchar *last_smallfont = NULL; @@ -2962,9 +2908,6 @@ void summary_sort(SummaryView *summaryview, case SORT_BY_LOCKED: cmp_func = (GtkCMCListCompareFunc)summary_cmp_by_locked; break; - case SORT_BY_TAGS: - cmp_func = (GtkCMCListCompareFunc)summary_cmp_by_tags; - break; case SORT_BY_NONE: break; default: @@ -3296,7 +3239,7 @@ static inline void summary_set_header(SummaryView *summaryview, gchar *text[], static gchar from_buf[BUFFSIZE], to_buf[BUFFSIZE]; static gchar tmp1[BUFFSIZE], tmp2[BUFFSIZE+4], tmp3[BUFFSIZE]; gint *col_pos = summaryview->col_pos; - gchar *from_text = NULL, *to_text = NULL, *tags_text = NULL; + gchar *from_text = NULL, *to_text = NULL; gboolean should_swap = FALSE; gboolean vert_layout = (prefs_common.layout_mode == VERTICAL_LAYOUT); gboolean small_layout = (prefs_common.layout_mode == SMALL_LAYOUT); @@ -3328,19 +3271,6 @@ static inline void summary_set_header(SummaryView *summaryview, gchar *text[], else text[col_pos[S_COL_SCORE]] = ""; - if (summaryview->col_state[summaryview->col_pos[S_COL_TAGS]].visible) { - tags_text = procmsg_msginfo_get_tags_str(msginfo); - if (!tags_text) { - text[col_pos[S_COL_TAGS]] = "-"; - } else { - strncpy2(tmp1, tags_text, sizeof(tmp1)); - tmp1[sizeof(tmp1)-1]='\0'; - g_free(tags_text); - text[col_pos[S_COL_TAGS]] = tmp1; - } - } else - text[col_pos[S_COL_TAGS]] = ""; - /* slow! */ if (summaryview->col_state[summaryview->col_pos[S_COL_DATE]].visible || ((vert_layout || small_layout) && prefs_common.two_line_vert)) { @@ -5846,169 +5776,6 @@ void summary_filter_open(SummaryView *summaryview, PrefsFilterType type, summary_msginfo_filter_open(item, msginfo, type, processing_rule); } -static gboolean summary_set_row_tag(SummaryView *summaryview, GtkCMCTreeNode *row, gboolean refresh, gboolean set, gint id) -{ - GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree); - MsgInfo *msginfo; - gchar *tags_str = NULL; - msginfo = gtk_cmctree_node_get_row_data(ctree, row); - cm_return_val_if_fail(msginfo, FALSE); - - procmsg_msginfo_update_tags(msginfo, set, id); - - if (summaryview->col_state[summaryview->col_pos[S_COL_TAGS]].visible) { - tags_str = procmsg_msginfo_get_tags_str(msginfo); - gtk_cmctree_node_set_text(ctree, row, - summaryview->col_pos[S_COL_TAGS], - tags_str?tags_str:"-"); - g_free(tags_str); - } - - summary_set_row_marks(summaryview, row); - if (row == summaryview->displayed) { - return TRUE; - } - return FALSE; -} - -void summary_set_tag(SummaryView *summaryview, gint tag_id, - GtkWidget *widget) -{ - GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree); - GList *cur; - gboolean set = tag_id > 0; - gint real_id = set? tag_id:-tag_id; - gboolean froze = FALSE; - gboolean redisplay = FALSE; - - if (summary_is_locked(summaryview)) - return; - START_LONG_OPERATION(summaryview, FALSE); - folder_item_set_batch(summaryview->folder_item, TRUE); - for (cur = GTK_CMCLIST(ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next) { - redisplay |= summary_set_row_tag(summaryview, - GTK_CMCTREE_NODE(cur->data), FALSE, set, real_id); - } - folder_item_set_batch(summaryview->folder_item, FALSE); - END_LONG_OPERATION(summaryview); - if (redisplay) - summary_redisplay_msg(summaryview); -} - -static void summary_tags_menu_item_activate_cb(GtkWidget *widget, - gpointer data) -{ - gint id = GPOINTER_TO_INT(data); - gboolean set = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)); - SummaryView *summaryview; - - summaryview = g_object_get_data(G_OBJECT(widget), "summaryview"); - cm_return_if_fail(summaryview != NULL); - - /* "dont_toggle" state set? */ - if (g_object_get_data(G_OBJECT(summaryview->tags_menu), - "dont_toggle")) - return; - - if (!set) - id = -id; - summary_set_tag(summaryview, id, NULL); -} - -static void summary_tags_menu_item_activate_item_cb(GtkMenuItem *menu_item, - gpointer data) -{ - GtkMenuShell *menu; - GList *children, *cur; - GList *sel; - GHashTable *menu_table = g_hash_table_new_full( - g_direct_hash, - g_direct_equal, - NULL, NULL); - GHashTable *menu_allsel_table = g_hash_table_new_full( - g_direct_hash, - g_direct_equal, - NULL, NULL); - gint sel_len; - SummaryView *summaryview = (SummaryView *)data; - cm_return_if_fail(summaryview != NULL); - - sel = GTK_CMCLIST(summaryview->ctree)->selection; - if (!sel) return; - - menu = GTK_MENU_SHELL(summaryview->tags_menu); - cm_return_if_fail(menu != NULL); - - /* NOTE: don't return prematurely because we set the "dont_toggle" - * state for check menu items */ - g_object_set_data(G_OBJECT(menu), "dont_toggle", - GINT_TO_POINTER(1)); - - /* clear items. get item pointers. */ - children = gtk_container_get_children(GTK_CONTAINER(menu)); - for (cur = children; cur != NULL && cur->data != NULL; cur = cur->next) { - if (GTK_IS_CHECK_MENU_ITEM(cur->data)) { - gint id = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(cur->data), - "tag_id")); - gtk_check_menu_item_set_active - (GTK_CHECK_MENU_ITEM(cur->data), FALSE); - - g_hash_table_insert(menu_table, GINT_TO_POINTER(id), GTK_CHECK_MENU_ITEM(cur->data)); - g_hash_table_insert(menu_allsel_table, GINT_TO_POINTER(id), GINT_TO_POINTER(0)); - } - } - - g_list_free(children); - - /* iterate all messages and set the state of the appropriate - * items */ - sel_len = 0; - for (; sel != NULL; sel = sel->next) { - MsgInfo *msginfo; - GSList *tags = NULL; - GtkCheckMenuItem *item; - msginfo = gtk_cmctree_node_get_row_data - (GTK_CMCTREE(summaryview->ctree), - GTK_CMCTREE_NODE(sel->data)); - sel_len++; - if (msginfo) { - tags = msginfo->tags; - if (!tags) - continue; - - for (; tags; tags = tags->next) { - gint num_checked = GPOINTER_TO_INT(g_hash_table_lookup(menu_allsel_table, tags->data)); - item = g_hash_table_lookup(menu_table, GINT_TO_POINTER(tags->data)); - if (item && !gtk_check_menu_item_get_active(item)) { - gtk_check_menu_item_set_active - (item, TRUE); - } - num_checked++; - g_hash_table_replace(menu_allsel_table, tags->data, GINT_TO_POINTER(num_checked)); - } - } - } - - children = gtk_container_get_children(GTK_CONTAINER(menu)); - for (cur = children; cur != NULL && cur->data != NULL; cur = cur->next) { - if (GTK_IS_CHECK_MENU_ITEM(cur->data)) { - gint id = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(cur->data), - "tag_id")); - gint num_checked = GPOINTER_TO_INT(g_hash_table_lookup(menu_allsel_table, GINT_TO_POINTER(id))); - if (num_checked < sel_len && num_checked > 0) - gtk_check_menu_item_set_inconsistent(GTK_CHECK_MENU_ITEM(cur->data), TRUE); - else - gtk_check_menu_item_set_inconsistent(GTK_CHECK_MENU_ITEM(cur->data), FALSE); - } - } - g_list_free(children); - g_hash_table_destroy(menu_table); - g_hash_table_destroy(menu_allsel_table); - /* reset "dont_toggle" state */ - g_object_set_data(G_OBJECT(menu), "dont_toggle", - GINT_TO_POINTER(0)); -} - void summaryview_destroy(SummaryView *summaryview) { if(summaryview->simplify_subject_preg) { @@ -6017,105 +5784,6 @@ void summaryview_destroy(SummaryView *summaryview) summaryview->simplify_subject_preg = NULL; } } -static void summary_tags_menu_item_apply_tags_activate_cb(GtkWidget *widget, - gpointer data) -{ - SummaryView *summaryview; - - summaryview = g_object_get_data(G_OBJECT(widget), "summaryview"); - cm_return_if_fail(summaryview != NULL); - - /* "dont_toggle" state set? */ - if (g_object_get_data(G_OBJECT(summaryview->tags_menu), - "dont_toggle")) - return; - - tags_window_open(summary_get_selection(summaryview)); -} - -static gint summary_tag_cmp_list(gconstpointer a, gconstpointer b) -{ - gint id_a = GPOINTER_TO_INT(a); - gint id_b = GPOINTER_TO_INT(b); - const gchar *tag_a = tags_get_tag(id_a); - const gchar *tag_b = tags_get_tag(id_b); - - if (tag_a == NULL) - return tag_b == NULL ? 0:1; - - if (tag_b == NULL) - return 1; - - return g_utf8_collate(tag_a, tag_b); -} - -static void summary_tags_menu_create(SummaryView *summaryview, gboolean refresh) -{ - - GtkWidget *label_menuitem; - GtkWidget *menu; - GtkWidget *item; - GSList *cur = tags_get_list(); - GSList *orig = NULL; - gboolean existing_tags = FALSE; - gchar *accel_path = NULL; - - cur = orig = g_slist_sort(cur, summary_tag_cmp_list); - label_menuitem = gtk_ui_manager_get_widget(summaryview->mainwin->ui_manager, "/Menus/SummaryViewPopup/Tags"); - g_signal_connect(G_OBJECT(label_menuitem), "activate", - G_CALLBACK(summary_tags_menu_item_activate_item_cb), - summaryview); - - gtk_widget_show(label_menuitem); - - menu = gtk_menu_new(); - - gtk_menu_set_accel_group (GTK_MENU (menu), - gtk_ui_manager_get_accel_group(summaryview->mainwin->ui_manager)); - - /* create tags menu items */ - for (; cur; cur = cur->next) { - gint id = GPOINTER_TO_INT(cur->data); - const gchar *tag = tags_get_tag(id); - item = gtk_check_menu_item_new_with_label(tag); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); - g_signal_connect(G_OBJECT(item), "activate", - G_CALLBACK(summary_tags_menu_item_activate_cb), - GINT_TO_POINTER(id)); - g_object_set_data(G_OBJECT(item), "summaryview", - summaryview); - g_object_set_data(G_OBJECT(item), "tag_id", - GINT_TO_POINTER(id)); - gtk_widget_show(item); - accel_path = g_strconcat("<ClawsTags>/",tag, NULL); - gtk_menu_item_set_accel_path(GTK_MENU_ITEM(item), accel_path); - g_free(accel_path); - existing_tags = TRUE; - } - if (existing_tags) { - /* separator */ - item = gtk_separator_menu_item_new(); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); - gtk_widget_show(item); - } - - item = gtk_menu_item_new_with_label(_("Modify tags...")); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); - g_signal_connect(G_OBJECT(item), "activate", - G_CALLBACK(summary_tags_menu_item_apply_tags_activate_cb), - NULL); - g_object_set_data(G_OBJECT(item), "summaryview", - summaryview); - gtk_widget_show(item); - accel_path = g_strdup_printf("<ClawsTags>/ModifyTags"); - gtk_menu_item_set_accel_path(GTK_MENU_ITEM(item), accel_path); - g_free(accel_path); - - g_slist_free(orig); - gtk_widget_show(menu); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(label_menuitem), menu); - summaryview->tags_menu = menu; -} static gboolean summary_popup_menu(GtkWidget *widget, gpointer data) { @@ -6414,7 +6082,6 @@ static GtkWidget *summary_ctree_create(SummaryView *summaryview) CLIST_BUTTON_SIGNAL_CONNECT(S_COL_SUBJECT, summary_subject_clicked) CLIST_BUTTON_SIGNAL_CONNECT(S_COL_SCORE , summary_score_clicked) CLIST_BUTTON_SIGNAL_CONNECT(S_COL_LOCKED , summary_locked_clicked) - CLIST_BUTTON_SIGNAL_CONNECT(S_COL_TAGS , summary_tags_clicked) #undef CLIST_BUTTON_SIGNAL_CONNECT @@ -7090,12 +6757,6 @@ static void summary_locked_clicked(GtkWidget *button, summary_sort_by_column_click(summaryview, SORT_BY_LOCKED); } -static void summary_tags_clicked(GtkWidget *button, - SummaryView *summaryview) -{ - summary_sort_by_column_click(summaryview, SORT_BY_TAGS); -} - static void summary_start_drag(GtkWidget *widget, gint button, GdkEvent *event, SummaryView *summaryview) { @@ -7436,42 +7097,6 @@ static gint summary_cmp_by_to(GtkCMCList *clist, gconstpointer ptr1, return (res != 0)? res: summary_cmp_by_date(clist, ptr1, ptr2); } -static gint summary_cmp_by_tags(GtkCMCList *clist, gconstpointer ptr1, - gconstpointer ptr2) -{ - gchar *str1, *str2; - const GtkCMCListRow *r1 = (const GtkCMCListRow *) ptr1; - const GtkCMCListRow *r2 = (const GtkCMCListRow *) ptr2; - const SummaryView *sv = g_object_get_data(G_OBJECT(clist), "summaryview"); - MsgInfo *msginfo1 = ((GtkCMCListRow *)ptr1)->data; - MsgInfo *msginfo2 = ((GtkCMCListRow *)ptr2)->data; - gint res; - cm_return_val_if_fail(sv, -1); - - if (sv->col_state[sv->col_pos[S_COL_TAGS]].visible) { - str1 = g_strdup(GTK_CMCELL_TEXT(r1->cell[sv->col_pos[S_COL_TAGS]])->text); - str2 = g_strdup(GTK_CMCELL_TEXT(r2->cell[sv->col_pos[S_COL_TAGS]])->text); - } else { - str1 = procmsg_msginfo_get_tags_str(msginfo1); - str2 = procmsg_msginfo_get_tags_str(msginfo2); - } - - if (!str1) { - res = (str2 != NULL); - g_free(str2); - return res; - } - if (!str2) { - g_free(str1); - return -1; - } - - res = g_utf8_collate(str1, str2); - g_free(str1); - g_free(str2); - return (res != 0)? res: summary_cmp_by_date(clist, ptr1, ptr2); -} - static gint summary_cmp_by_simplified_subject (GtkCMCList *clist, gconstpointer ptr1, gconstpointer ptr2) {