/* widget creating functions */
static void prefs_filtering_create (void);
-static void prefs_filtering_set_dialog (void);
+static void prefs_filtering_set_dialog (const gchar *header,
+ const gchar *key);
static void prefs_filtering_set_list (void);
/* callback functions */
N_("Delete on Server")
};
-void prefs_filtering_open(FolderItem * item)
+void prefs_filtering_open(FolderItem * item,
+ const gchar *header,
+ const gchar *key)
{
if (prefs_rc_is_readonly(FILTERING_RC))
return;
cur_item = item;
- prefs_filtering_set_dialog();
+ prefs_filtering_set_dialog(header, key);
gtk_widget_show(filtering.window);
prefs_matcher_write_config();
}
-static void prefs_filtering_set_dialog(void)
+static void prefs_filtering_set_dialog(const gchar *header, const gchar *key)
{
GtkCList *clist = GTK_CLIST(filtering.cond_clist);
GSList *cur;
GSList * prefs_filtering;
+ gchar *cond_str[1];
+ gint row;
gtk_clist_freeze(clist);
gtk_clist_clear(clist);
- prefs_filtering_clist_set_row(-1, NULL);
+ cond_str[0] = _("(New)");
+ row = gtk_clist_append(clist, cond_str);
+ gtk_clist_set_row_data(clist, row, NULL);
if (cur_item == NULL)
prefs_filtering = global_processing;
for(cur = prefs_filtering ; cur != NULL ; cur = g_slist_next(cur)) {
FilteringProp * prop = (FilteringProp *) cur->data;
- prefs_filtering_clist_set_row(-1, prop);
+ cond_str[0] = filteringprop_to_string(prop);
+ subst_char(cond_str[0], '\t', ':');
+ row = gtk_clist_append(clist, cond_str);
+ gtk_clist_set_row_data(clist, row, prop);
+
+ g_free(cond_str[0]);
}
prefs_filtering_update_hscrollbar();
gtk_clist_thaw(clist);
prefs_filtering_reset_dialog();
+
+ if (header && key) {
+ gchar *match_str = g_strconcat(header, " ",
+ get_matchparser_tab_str(MATCHTYPE_MATCHCASE),
+ " \"", key, "\"", NULL);
+ gtk_entry_set_text(GTK_ENTRY(filtering.cond_entry), match_str);
+ g_free(match_str);
+ }
}
static void prefs_filtering_reset_dialog(void)
void summary_filter_open(SummaryView *summaryview, PrefsFilterType type)
{
- static HeaderEntry hentry[] = {{"List-Id:", NULL, FALSE},
+ static HeaderEntry hentry[] = {{"X-BeenThere:", NULL, FALSE},
{"X-ML-Name:", NULL, FALSE},
{"X-List:", NULL, FALSE},
{"X-Mailing-list:", NULL, FALSE},
+ {"List-Id:", NULL, FALSE},
{NULL, NULL, FALSE}};
+
+ static gchar *header_strs[] = {"From", "from", "To", "to", "Subject", "subject"};
+
+ static gchar *hentry_strs[] = {"X-BeenThere", "X-ML-Name", "X-List",
+ "X-Mailing-List", "List-Id",
+ "header \"X-BeenThere\"", "header \"X-ML-Name\"",
+ "header \"X-List\"", "header \"X-Mailing-List\"",
+ "header \"List-Id\""};
enum
{
- H_LIST_ID = 0,
+ H_X_BEENTHERE = 0,
H_X_ML_NAME = 1,
H_X_LIST = 2,
- H_X_MAILING_LIST = 3
+ H_X_MAILING_LIST = 3,
+ H_LIST_ID = 4
+ };
+
+ enum
+ {
+ H_FROM = 0,
+ H_TO = 2,
+ H_SUBJECT = 4
};
MsgInfo *msginfo;
gchar *header = NULL;
gchar *key = NULL;
FILE *fp;
+ int header_offset;
+ int hentry_offset;
if (!summaryview->selected) return;
summaryview->selected);
if (!msginfo) return;
+ if (global_processing) {
+ header_offset = 1;
+ hentry_offset = 5;
+ }
+ else {
+ header_offset = 0;
+ hentry_offset = 0;
+ }
+
switch (type) {
case FILTER_BY_NONE:
break;
procheader_get_header_fields(fp, hentry);
fclose(fp);
- if (hentry[H_LIST_ID].body != NULL) {
- header = "List-Id";
- Xstrdup_a(key, hentry[H_LIST_ID].body, );
+ if (hentry[H_X_BEENTHERE].body != NULL) {
+ header = hentry_strs[H_X_BEENTHERE + hentry_offset];
+ Xstrdup_a(key, hentry[H_X_BEENTHERE].body, );
} else if (hentry[H_X_ML_NAME].body != NULL) {
- header = "X-ML-Name";
+ header = hentry_strs[H_X_ML_NAME + hentry_offset];
Xstrdup_a(key, hentry[H_X_ML_NAME].body, );
} else if (hentry[H_X_LIST].body != NULL) {
- header = "X-List";
+ header = hentry_strs[H_X_LIST + hentry_offset];
Xstrdup_a(key, hentry[H_X_LIST].body, );
} else if (hentry[H_X_MAILING_LIST].body != NULL) {
- header = "X-Mailing-list";
+ header = hentry_strs[H_X_MAILING_LIST + hentry_offset];
Xstrdup_a(key, hentry[H_X_MAILING_LIST].body, );
+ } else if (hentry[H_LIST_ID].body != NULL) {
+ header = hentry_strs[H_LIST_ID + hentry_offset];
+ Xstrdup_a(key, hentry[H_LIST_ID].body, );
} else if (msginfo->subject) {
- header = "Subject";
+ header = header_strs[H_SUBJECT + header_offset];
key = msginfo->subject;
}
- g_free(hentry[H_LIST_ID].body);
- hentry[H_LIST_ID].body = NULL;
+ g_free(hentry[H_X_BEENTHERE].body);
+ hentry[H_X_BEENTHERE].body = NULL;
g_free(hentry[H_X_ML_NAME].body);
hentry[H_X_ML_NAME].body = NULL;
g_free(hentry[H_X_LIST].body);
hentry[H_X_LIST].body = NULL;
g_free(hentry[H_X_MAILING_LIST].body);
hentry[H_X_MAILING_LIST].body = NULL;
+ g_free(hentry[H_LIST_ID].body);
+ hentry[H_LIST_ID].body = NULL;
break;
case FILTER_BY_FROM:
- header = "From";
+ header = header_strs[H_FROM + header_offset];
key = msginfo->from;
break;
case FILTER_BY_TO:
- header = "To";
+ header = header_strs[H_TO + header_offset];
key = msginfo->to;
break;
case FILTER_BY_SUBJECT:
- header = "Subject";
+ header = header_strs[H_SUBJECT + header_offset];
key = msginfo->subject;
break;
default:
break;
}
- prefs_filter_open(header, key);
+ if (global_processing)
+ prefs_filtering_open(NULL, header, key);
+ else
+ prefs_filter_open(header, key);
}
void summary_reply(SummaryView *summaryview, ComposeMode mode)