From aeaa6a865751f617c0b5f201016857f61e115252 Mon Sep 17 00:00:00 2001 From: hiro Date: Wed, 7 Feb 2007 06:38:49 +0000 Subject: fixed saved search. git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@1532 ee746299-78ed-0310-b773-934348b2243d --- ChangeLog | 9 +++++++++ ChangeLog.ja | 9 +++++++++ libsylph/procheader.c | 31 ++++++++++++++++++++++++++++++- libsylph/procheader.h | 5 ++++- src/prefs_filter.c | 10 ++++------ src/prefs_filter.h | 4 +++- src/prefs_filter_edit.c | 19 ++++++++++--------- src/query_search.c | 6 +++--- 8 files changed, 72 insertions(+), 21 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4d98249c..7a94fdc9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2007-02-07 + + * libsylph/procheader.[ch] + src/query_search.c + src/prefs_filter_edit.c + src/prefs_filter.[ch]: fixed a bug that the saved search rule + could be broken after editing a search folder. + Fixed a bug that the user-defined headers was not saved. + 2007-02-06 * libsylph/mbox.[ch] diff --git a/ChangeLog.ja b/ChangeLog.ja index 3d59f95e..5753e1f3 100644 --- a/ChangeLog.ja +++ b/ChangeLog.ja @@ -1,3 +1,12 @@ +2007-02-07 + + * libsylph/procheader.[ch] + src/query_search.c + src/prefs_filter_edit.c + src/prefs_filter.[ch]: 検索フォルダの編集後に保存した検索条件が + 壊れる可能性のあったバグを修正。 + ユーザ定義のヘッダが保存されないバグを修正。 + 2007-02-06 * libsylph/mbox.[ch] diff --git a/libsylph/procheader.c b/libsylph/procheader.c index 84c5f36d..4d45dbe7 100644 --- a/libsylph/procheader.c +++ b/libsylph/procheader.c @@ -1,6 +1,6 @@ /* * LibSylph -- E-Mail client library - * Copyright (C) 1999-2005 Hiroyuki Yamamoto + * Copyright (C) 1999-2007 Hiroyuki Yamamoto * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -292,6 +292,19 @@ GSList *procheader_add_header_list(GSList *hlist, const gchar *header_name, return g_slist_append(hlist, header); } +GSList *procheader_copy_header_list(GSList *hlist) +{ + GSList *newlist = NULL, *cur; + + for (cur = hlist; cur != NULL; cur = cur->next) { + Header *header = (Header *)cur->data; + newlist = procheader_add_header_list(newlist, header->name, + header->body); + } + + return newlist; +} + GSList *procheader_merge_header_list(GSList *hlist1, GSList *hlist2) { GSList *cur; @@ -305,6 +318,22 @@ GSList *procheader_merge_header_list(GSList *hlist1, GSList *hlist2) return hlist1; } +GSList *procheader_merge_header_list_dup(GSList *hlist1, GSList *hlist2) +{ + GSList *list, *cur; + + list = procheader_copy_header_list(hlist1); + + for (cur = hlist2; cur != NULL; cur = cur->next) { + Header *header = (Header *)cur->data; + if (procheader_find_header_list(list, header->name) < 0) + list = procheader_add_header_list(list, header->name, + header->body); + } + + return list; +} + gint procheader_find_header_list(GSList *hlist, const gchar *header_name) { GSList *cur; diff --git a/libsylph/procheader.h b/libsylph/procheader.h index 60a0abc0..6054f5d3 100644 --- a/libsylph/procheader.h +++ b/libsylph/procheader.h @@ -1,6 +1,6 @@ /* * LibSylph -- E-Mail client library - * Copyright (C) 1999-2005 Hiroyuki Yamamoto + * Copyright (C) 1999-2007 Hiroyuki Yamamoto * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -56,8 +56,11 @@ GSList *procheader_get_header_list_from_msginfo (MsgInfo *msginfo); GSList *procheader_add_header_list (GSList *hlist, const gchar *header_name, const gchar *body); +GSList *procheader_copy_header_list (GSList *hlist); GSList *procheader_merge_header_list (GSList *hlist1, GSList *hlist2); +GSList *procheader_merge_header_list_dup (GSList *hlist1, + GSList *hlist2); gint procheader_find_header_list (GSList *hlist, const gchar *header_name); void procheader_header_list_destroy (GSList *hlist); diff --git a/src/prefs_filter.c b/src/prefs_filter.c index 893fc024..05d00483 100644 --- a/src/prefs_filter.c +++ b/src/prefs_filter.c @@ -1,6 +1,6 @@ /* * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 1999-2005 Hiroyuki Yamamoto + * Copyright (C) 1999-2007 Hiroyuki Yamamoto * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -86,8 +86,6 @@ static void prefs_filter_set_list_row (GtkTreeIter *iter, FilterRule *rule, gboolean move_view); -static void prefs_filter_write_user_header_list (void); - static void prefs_filter_set_list (void); /* callback functions */ @@ -431,7 +429,8 @@ static void prefs_filter_set_list_row(GtkTreeIter *iter, FilterRule *rule, \ if (!g_hash_table_lookup(table, header->name)) { \ g_hash_table_insert(table, header->name, header); \ - list = g_slist_append(list, header); \ + list = procheader_add_header_list \ + (list, header->name, header->body); \ } \ } @@ -564,7 +563,7 @@ void prefs_filter_set_header_list(MsgInfo *msginfo) prefs_filter_set_msg_header_list(msginfo); } -static void prefs_filter_write_user_header_list(void) +void prefs_filter_write_user_header_list(void) { gchar *path; PrefFile *pfile; @@ -822,7 +821,6 @@ static gboolean prefs_filter_key_pressed(GtkWidget *widget, GdkEventKey *event, static void prefs_filter_close(void) { prefs_filter_set_msg_header_list(NULL); - prefs_filter_write_user_header_list(); prefs_filter_set_list(); filter_write_config(); gtk_widget_hide(rule_list_window.window); diff --git a/src/prefs_filter.h b/src/prefs_filter.h index 08efb43c..72b311ad 100644 --- a/src/prefs_filter.h +++ b/src/prefs_filter.h @@ -1,6 +1,6 @@ /* * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 1999-2005 Hiroyuki Yamamoto + * Copyright (C) 1999-2007 Hiroyuki Yamamoto * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -40,4 +40,6 @@ void prefs_filter_set_header_list (MsgInfo *msginfo); void prefs_filter_set_user_header_list (GSList *list); void prefs_filter_set_msg_header_list (MsgInfo *msginfo); +void prefs_filter_write_user_header_list (void); + #endif /* __PREFS_FILTER_H__ */ diff --git a/src/prefs_filter_edit.c b/src/prefs_filter_edit.c index 5a057c12..89da8e9d 100644 --- a/src/prefs_filter_edit.c +++ b/src/prefs_filter_edit.c @@ -1,6 +1,6 @@ /* * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 1999-2006 Hiroyuki Yamamoto + * Copyright (C) 1999-2007 Hiroyuki Yamamoto * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -345,7 +345,7 @@ void prefs_filter_edit_clear_cond_edit(FilterCondEdit *cond_edit) prefs_filter_edit_remove_cond_hbox(cond_edit, hbox); } - g_slist_free(cond_edit->hdr_list); + procheader_header_list_destroy(cond_edit->hdr_list); cond_edit->hdr_list = NULL; procheader_header_list_destroy(cond_edit->rule_hdr_list); cond_edit->rule_hdr_list = NULL; @@ -407,7 +407,7 @@ void prefs_filter_edit_set_header_list(FilterCondEdit *cond_edit, GSList *cur; FilterCond *cond; - g_slist_free(cond_edit->hdr_list); + procheader_header_list_destroy(cond_edit->hdr_list); cond_edit->hdr_list = NULL; procheader_header_list_destroy(cond_edit->rule_hdr_list); cond_edit->rule_hdr_list = NULL; @@ -429,21 +429,21 @@ void prefs_filter_edit_set_header_list(FilterCondEdit *cond_edit, } cond_edit->rule_hdr_list = rule_hdr_list; - cond_edit->hdr_list = procheader_merge_header_list(list, rule_hdr_list); + cond_edit->hdr_list = procheader_merge_header_list_dup(list, + rule_hdr_list); } static void prefs_filter_edit_update_header_list(FilterCondEdit *cond_edit) { GSList *list; - g_slist_free(cond_edit->hdr_list); + procheader_header_list_destroy(cond_edit->hdr_list); cond_edit->hdr_list = NULL; list = prefs_filter_get_header_list(); - cond_edit->hdr_list = list; - - cond_edit->hdr_list = - procheader_merge_header_list(list, cond_edit->rule_hdr_list); + cond_edit->hdr_list = procheader_merge_header_list_dup + (list, cond_edit->rule_hdr_list); + procheader_header_list_destroy(list); } CondHBox *prefs_filter_edit_cond_hbox_create(FilterCondEdit *cond_edit) @@ -1633,6 +1633,7 @@ static void prefs_filter_edit_edit_header_list(FilterCondEdit *cond_edit) CondHBox *hbox = (CondHBox *)cur->data; prefs_filter_edit_set_cond_header_menu(cond_edit, hbox); } + prefs_filter_write_user_header_list(); } gtk_widget_destroy(edit_header_list_dialog.window); diff --git a/src/query_search.c b/src/query_search.c index 8114c32d..75198d6a 100644 --- a/src/query_search.c +++ b/src/query_search.c @@ -1,6 +1,6 @@ /* * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 1999-2006 Hiroyuki Yamamoto + * Copyright (C) 1999-2007 Hiroyuki Yamamoto * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -149,9 +149,9 @@ static gboolean row_selected (GtkTreeSelection *selection, gboolean cur_selected, gpointer data); -static void query_search_clear (GtkButton *button, +static void query_search_clear (GtkButton *button, gpointer data); -static void query_select_folder (GtkButton *button, +static void query_select_folder (GtkButton *button, gpointer data); static void query_search_clicked (GtkButton *button, gpointer data); -- cgit v1.2.3