2004-11-12 [paul] 0.9.12cvs146.1

* ChangeLog
	* ChangeLog.claws
	* ChangeLog.jp
	* NEWS
	* configure.ac
	* src/account.c
	* src/folderview.c
	* src/folderview.h
	* src/imap.c
	* src/imap_gtk.c
	* src/inc.c
	* src/mainwindow.c
	* src/mh_gtk.c
	* src/news_gtk.c
	* src/pop.c
	* src/prefs_account.c
	* src/prefs_account.h
	* src/prefs_ext_prog.c
	* src/procmime.c
	* src/procmime.h
	* src/procmsg.c
	* src/procmsg.h
	* src/summary_search.c
	* src/summaryview.c
	* src/textview.c
	* src/common/defs.h
	* src/common/utils.c
	* src/common/utils.h
	* src/gtk/menu.c
	* src/gtk/menu.h
		sync with HEAD
This commit is contained in:
Paul Mangan 2004-11-12 06:41:50 +00:00
parent 4ce85ee3a0
commit ebd4fca572
32 changed files with 720 additions and 169 deletions

174
ChangeLog
View file

@ -1,3 +1,177 @@
2004-11-11
* src/pixmaps/complete.xpm
src/pixmaps/continue.xpm: made them smaller size to fit CList
row.
2004-11-11
* src/statusbar.c: statusbar_create(): set the width of widget to 1
not to expand automatically.
* src/utils.[ch]: trim_string_before(): trim beginning characters
longer than the specified length and add "...".
* src/folderview.c
src/summaryview.c: use trim_string_before() to display folder name.
2004-11-10
* src/defs.h
src/prefs_common.c: made mozilla-firefox as default browser.
2004-11-09
* src/summaryview.c: summary_key_pressed()
src/textview.c: textview_key_pressed(): back scroll when Shift or
Alt and Space key is pressed. Also back scroll when Shift and Enter
key is pressed.
2004-11-09
* src/foldersel.c: foldersel_new_folder(): select newly created
folder.
2004-11-08
* version 1.0.0beta2
2004-11-08
* src/account.c
src/imap.c
src/inc.c
src/pop.c
src/prefs_account.[ch]: obsoleted RecvProtocol::A_APOP and made an
option for APOP.
prefs_account_protocol_set_optmenu(): refactored.
2004-11-07
* src/folderview.c: folderview_empty_trash_cb(): removed unused
variables.
2004-11-05
* src/summary_search.c: use C string instead of wide character string.
Enabled AND/OR matching.
2004-11-05
* src/folderview.[ch]
src/mainwindow.c: change menu sensitivity of File/Folder and
File/Mailbox according to selected folder.
Enabled newsgroups subscription from 'File/Folder/Create new folder'.
2004-11-04
* src/folderview.[ch]
src/mainwindow.c: reorganized folder/mailbox menus.
Enabled 'Remove mailbox', 'Check for new messages' and
'Rebuild folder tree' on main menu.
Removed 'Remove mailbox' from the folder context menu.
2004-11-04
* src/folderview.c
src/mainwindow.c
src/procmsg.[ch]: added 'Empty trash' to the folder context menu.
2004-11-01
* src/filter.[ch]
src/summaryview.c: don't move/delete immediately when
immediate_execution is off.
2004-10-29
* version 1.0.0beta1
2004-10-29
* upgraded to gettext-0.14.1.
2004-10-28
* src/compose.c: reorganized the menu.
* src/mh.c: removed g_print() for debug.
2004-10-27
* src/compose.c
src/prefs_template.c
src/template.[ch]: added Cc: to template parameter.
2004-10-26
* src/prefs_filter_edit.c: fixed condition menu switching problem
on editing existing rules.
2004-10-25
* src/filter.c: filter_action_exec(): update counters of FolderItem
on local filtering (fixes wrong folderview message count).
2004-10-25
* src/mbox.c: proc_mbox(): check if folder_table is NULL (fix
warnings).
2004-10-21
* src/pixmaps/stock_add_16.xpm
src/pixmaps/stock_remove_16.xpm: converted from stock icons in
gtk-2.4.
* src/prefs_filter_edit.c: use icons for add/remove button.
* src/stock_pixmap.[ch]: added add/remove icons.
2004-10-21
* src/pixmaps/stock_dialog_error_48.xpm
src/pixmaps/stock_dialog_info_48.xpm
src/pixmaps/stock_dialog_question_48.xpm
src/pixmaps/stock_dialog_warning_48.xpm: converted dialog icons from
stock icons in gtk-2.4.
* src/alertpanel.[ch]: added icons to the alert dialog.
alertpanel_message(): Added AlertType.
* src/stock_pixmaps.[ch]: added dialog icons.
2004-10-08
* src/procmsg.c: removed verbose debug prints.
2004-10-07
* version 0.9.99
2004-10-07
* src/procmsg.c: procmsg_send_queue()
src/send_message.c: send_queue_info_free(): fixed segmentation fault
when trying to send an invalid queued message.
2004-10-06
* src/mainwindow.c: added separators to the File menu.
* src/prefs_filter_edit.c: removed some debug prints.
2004-10-05
* src/inputdialog.c: input_dialog_open(): don't start auto-checking
mail while opening the input dialog.
2004-10-04
* src/mh.c: mh_remove_all_msg()
src/procmsg.c: procmsg_empty_trash(): fixed wrong message count
after emptying trash.
2004-10-01
* src/prefs_filter.c: fixed a bug that didn't add an auto-created
rule.
* src/prefs_filter_edit.c: prefs_filter_edit_dialog_to_rule(): check
if rule name exists.
2004-09-30
* src/filter.c: filter_apply_msginfo(): don't apply filter if

View file

@ -1,3 +1,37 @@
2004-11-12 [paul] 0.9.12cvs146.1
* ChangeLog
* ChangeLog.claws
* ChangeLog.jp
* NEWS
* configure.ac
* src/account.c
* src/folderview.c
* src/folderview.h
* src/imap.c
* src/imap_gtk.c
* src/inc.c
* src/mainwindow.c
* src/mh_gtk.c
* src/news_gtk.c
* src/pop.c
* src/prefs_account.c
* src/prefs_account.h
* src/prefs_ext_prog.c
* src/procmime.c
* src/procmime.h
* src/procmsg.c
* src/procmsg.h
* src/summary_search.c
* src/summaryview.c
* src/textview.c
* src/common/defs.h
* src/common/utils.c
* src/common/utils.h
* src/gtk/menu.c
* src/gtk/menu.h
sync with HEAD
2004-11-11 [colin] 0.9.12cvs144.2
* src/textview.c

View file

@ -1,3 +1,45 @@
2004-11-12 [paul] 0.9.12cvs146
* src/prefs_account.c
* src/procmime.c
* src/procmime.h
fix sync breakage
2004-11-12 [paul]
* src/pixmaps/complete.xpm
* src/pixmaps/continue.xpm
small sync with main, see ChangeLog 2004-11-11
2004-11-11 [paul] 0.9.12cvs145
* ChangeLog
* ChangeLog.jp
* src/account.c
* src/folderview.c
* src/folderview.h
* src/imap.c
* src/imap_gtk.c
* src/inc.c
* src/mainwindow.c
* src/mh_gtk.c
* src/news_gtk.c
* src/pop.c
* src/prefs_account.c
* src/prefs_account.h
* src/prefs_ext_prog.c
* src/procmsg.c
* src/procmsg.h
* src/summary_search.c
* src/summaryview.c
* src/textview.c
* src/common/defs.h
* src/common/utils.c
* src/common/utils.h
* src/gtk/menu.c
* src/gtk/menu.h
sync with main 1.0.0beta2 (plus 4)
2004-11-09 [christoph] 0.9.12cvs144
* src/compose.c

View file

@ -1,3 +1,179 @@
2004-11-11
* src/pixmaps/complete.xpm
src/pixmaps/continue.xpm: CList の行に合うようにより小さなサイズ
にした。
2004-11-11
* src/statusbar.c: statusbar_create(): 自動的に伸長しないように
ウィジェットの幅を1に指定。
* src/utils.[ch]: trim_string_before(): 指定した長さを超える先頭の
文字を切り詰め、 "..." を追加。
* src/folderview.c
src/summaryview.c: trim_string_before() を使ってフォルダ名を表示
するようにした。
2004-11-10
* src/defs.h
src/prefs_common.c: mozilla-firefox をデフォルトのブラウザにした。
2004-11-09
* src/summaryview.c: summary_key_pressed()
src/textview.c: textview_key_pressed(): Shift または Alt とスペース
キーが押された場合バックスクロールするようにした。 Shift と Enter
キーが押された場合もバックスクロールするようにした。
2004-11-09
* src/foldersel.c: foldersel_new_folder(): 新規に作成されたフォルダを
選択するようにした。
2004-11-08
* version 1.0.0beta2
2004-11-08
* src/account.c
src/imap.c
src/inc.c
src/pop.c
src/prefs_account.[ch]: RecvProtocol::A_APOP を廃止し、 APOP の
オプションを追加。
prefs_account_protocol_set_optmenu(): リファクタリング。
2004-11-07
* src/folderview.c: folderview_empty_trash_cb(): 未使用の変数を削除。
2004-11-05
* src/summary_search.c: ワイドキャラクタ文字列の代わりに C 文字列
を使用。 AND/OR マッチができるようにした。
2004-11-05
* src/folderview.[ch]
src/mainwindow.c: 選択フォルダに応じてファイル/フォルダ と
ファイル/メールボックス のメニューのセンシティビティを変更する
ようにした。
「ファイル/フォルダ/新規フォルダを作成」からニュースグループの
購読が行えるようにした。
2004-11-04
* src/folderview.[ch]
src/mainwindow.c: フォルダ/メールボックスのメニューを再構成。
メインメニューで「メールボックスを削除」、「新着メッセージを
チェック」、「フォルダツリーを再構築」を有効にした。
フォルダのコンテキストメニューから「メールボックスを削除」を
削除。
2004-11-04
* src/folderview.c
src/mainwindow.c
src/procmsg.[ch]: フォルダのコンテキストメニューに「ごみ箱を
空にする」を追加。
2004-11-01
* src/filter.[ch]
src/summaryview.c: immediate_execution が off の場合は即座に移動
または削除しないようにした。
2004-10-29
* version 1.0.0beta1
2004-10-29
* gettext-0.14.1 に更新。
2004-10-28
* src/compose.c: メニューを再構成。
* src/mh.c: デバッグ用の g_print() を削除。
2004-10-27
* src/compose.c
src/prefs_template.c
src/template.[ch]: テンプレートのパラメータに Cc: を追加。
2004-10-26
* src/prefs_filter_edit.c: 既存のルールの編集中の条件メニュー切替え
の問題を修正。
2004-10-25
* src/filter.c: filter_action_exec(): ローカルフィルタリング時
FolderItem のカウンタを更新するようにした(フォルダビューの
メッセージカウントがおかしくなるのを修正)。
2004-10-25
* src/mbox.c: proc_mbox(): folder_table が NULL かどうかをチェック
(警告を修正)。
2004-10-21
* src/pixmaps/stock_add_16.xpm
src/pixmaps/stock_remove_16.xpm: gtk-2.4 のストックアイコンから変換。
* src/prefs_filter_edit.c: 追加/削除ボタンにアイコンを使用。
* src/stock_pixmap.[ch]: 追加/削除のアイコンを追加。
2004-10-21
* src/pixmaps/stock_dialog_error_48.xpm
src/pixmaps/stock_dialog_info_48.xpm
src/pixmaps/stock_dialog_question_48.xpm
src/pixmaps/stock_dialog_warning_48.xpm: gtk-2.4 のストックアイコン
からダイアログアイコンを変換。
* src/alertpanel.[ch]: 警告ダイアログにアイコンを追加。
alertpanel_message(): AlertType を追加。
* src/stock_pixmaps.[ch]: ダイアログアイコンを追加。
2004-10-08
* src/procmsg.c: 冗長なデバッグ出力を削除。
2004-10-07
* version 0.9.99
2004-10-07
* src/procmsg.c: procmsg_send_queue()
src/send_message.c: send_queue_info_free(): 不正なキューメッセージ
を送信しようとしたときに segmentation fault になるバグを修正。
2004-10-06
* src/mainwindow.c: ファイルメニューにセパレータを追加。
* src/prefs_filter_edit.c: いくつかのデバッグ出力を削除。
2004-10-05
* src/inputdialog.c: input_dialog_open(): 入力ダイアログが開いている
間はメールの自動チェックを開始しないようにした。
2004-10-04
* src/mh.c: mh_remove_all_msg()
src/procmsg.c: procmsg_empty_trash(): ごみ箱を空にした後メッセージ
数のカウントがおかしくなるのを修正。
2004-10-01
* src/prefs_filter.c: 自動作成されたルールを追加できないバグを修正。
* src/prefs_filter_edit.c: prefs_filter_edit_dialog_to_rule(): ルール
名が存在するかどうかをチェック。
2004-09-30
* src/filter.c: filter_apply_msginfo(): FilterRule::enabled == FALSE

27
NEWS
View file

@ -1,5 +1,32 @@
Changes of Sylpheed
* 1.0beta2
* don't move or delete immediately at local filtering when immediate
execution option is off.
* 'Empty trash' has been added to the folder context menu.
* 'Remove mailbox' has been removed from the folder context menu.
* 'File' menu in the main menu has been reorganized.
* AND/OR matching option has been added to the summary search dialog.
* APOP setting became a separate option for POP3.
* 1.0beta1
* Icons are added to the alert dialog and filter edit dialog.
* Cc is added for the parameter of templates.
* The menu of composition window has been reorganized.
* Gettext has been upgraded to 0.14.1.
* Some minor bugs of filtering have been fixed.
* 0.9.99
* The new filtering system, which has many new features, has been
implemented.
* The handling of 'New' flags for messages has been modified.
* The spool path setting can now take both file and directory.
* Invalid URIs used by DnD has been fixed.
* Other bugfixes have been made.
* 0.9.12
* A session timeout for POP3/SMTP has been implemented.

View file

@ -225,3 +225,4 @@
( cvs diff -u -r 1.395.2.37 -r 1.395.2.38 src/summaryview.c; ) > 0.9.12cvs143.1.patchset
( cvs diff -u -r 1.2504.2.30 -r 1.2504.2.31 ChangeLog.claws; cvs diff -u -r 1.382.2.61 -r 1.382.2.62 src/compose.c; cvs diff -u -r 1.213.2.19 -r 1.213.2.20 src/folder.c; cvs diff -u -r 1.2.2.3 -r 1.2.2.4 src/folder_item_prefs.c; cvs diff -u -r 1.105.2.10 -r 1.105.2.11 src/prefs_account.c; cvs diff -u -r 1.49.2.5 -r 1.49.2.6 src/prefs_account.h; cvs diff -u -r 1.1.2.8 -r 1.1.2.9 src/plugins/pgpmime/pgpmime.c; ) > 0.9.12cvs144.1.patchset
( cvs diff -u -r 1.96.2.30 -r 1.96.2.31 src/textview.c; ) > 0.9.12cvs144.2.patchset
( cvs diff -u -r 1.396.2.11 -r 1.396.2.12 ChangeLog; cvs diff -u -r 1.2504.2.31 -r 1.2504.2.32 ChangeLog.claws; cvs diff -u -r 1.391.2.11 -r 1.391.2.12 ChangeLog.jp; cvs diff -u -r 1.42.2.3 -r 1.42.2.4 NEWS; cvs diff -u -r 1.654.2.259 -r 1.654.2.260 configure.ac; cvs diff -u -r 1.61.2.14 -r 1.61.2.15 src/account.c; cvs diff -u -r 1.207.2.20 -r 1.207.2.21 src/folderview.c; cvs diff -u -r 1.20.2.2 -r 1.20.2.3 src/folderview.h; cvs diff -u -r 1.179.2.10 -r 1.179.2.11 src/imap.c; cvs diff -u -r 1.1.2.2 -r 1.1.2.3 src/imap_gtk.c; cvs diff -u -r 1.149.2.16 -r 1.149.2.17 src/inc.c; cvs diff -u -r 1.274.2.22 -r 1.274.2.23 src/mainwindow.c; cvs diff -u -r 1.2.2.2 -r 1.2.2.3 src/mh_gtk.c; cvs diff -u -r 1.2.2.2 -r 1.2.2.3 src/news_gtk.c; cvs diff -u -r 1.56.2.27 -r 1.56.2.28 src/pop.c; cvs diff -u -r 1.105.2.11 -r 1.105.2.12 src/prefs_account.c; cvs diff -u -r 1.49.2.6 -r 1.49.2.7 src/prefs_account.h; cvs diff -u -r 1.3.2.3 -r 1.3.2.4 src/prefs_ext_prog.c; cvs diff -u -r 1.49.2.18 -r 1.49.2.19 src/procmime.c; cvs diff -u -r 1.17.2.6 -r 1.17.2.7 src/procmime.h; cvs diff -u -r 1.150.2.11 -r 1.150.2.12 src/procmsg.c; cvs diff -u -r 1.60.2.8 -r 1.60.2.9 src/procmsg.h; cvs diff -u -r 1.15.2.10 -r 1.15.2.11 src/summary_search.c; cvs diff -u -r 1.395.2.38 -r 1.395.2.39 src/summaryview.c; cvs diff -u -r 1.96.2.31 -r 1.96.2.32 src/textview.c; cvs diff -u -r 1.9.2.7 -r 1.9.2.8 src/common/defs.h; cvs diff -u -r 1.36.2.13 -r 1.36.2.14 src/common/utils.c; cvs diff -u -r 1.20.2.9 -r 1.20.2.10 src/common/utils.h; cvs diff -u -r 1.5.2.12 -r 1.5.2.13 src/gtk/menu.c; cvs diff -u -r 1.4.2.5 -r 1.4.2.6 src/gtk/menu.h; ) > 0.9.12cvs146.1.patchset

View file

@ -11,9 +11,9 @@ MINOR_VERSION=9
MICRO_VERSION=12
INTERFACE_AGE=0
BINARY_AGE=0
EXTRA_VERSION=144
EXTRA_VERSION=146
EXTRA_RELEASE=
EXTRA_GTK2_VERSION=.2
EXTRA_GTK2_VERSION=.1
if test \( $EXTRA_VERSION -eq 0 \) -o \( "x$EXTRA_RELEASE" != "x" \); then
VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}${EXTRA_RELEASE}${EXTRA_GTK2_VERSION}

View file

@ -1002,9 +1002,8 @@ static void account_selected(GtkCList *clist, gint row, gint column,
PrefsAccount *ac;
ac = gtk_clist_get_row_data(clist, row);
if (ac->protocol == A_POP3 || ac->protocol == A_APOP ||
ac->protocol == A_IMAP4 || ac->protocol == A_NNTP ||
ac->protocol == A_LOCAL) {
if (ac->protocol == A_POP3 || ac->protocol == A_IMAP4 ||
ac->protocol == A_NNTP || ac->protocol == A_LOCAL) {
ac->recv_at_getall ^= TRUE;
account_clist_set_row(ac, row);
}
@ -1043,11 +1042,6 @@ static gint account_clist_set_row(PrefsAccount *ac_prefs, gint row)
"POP3 (SSL)" :
ac_prefs->ssl_pop == SSL_STARTTLS ?
"POP3 (TLS)" : "POP3") :
ac_prefs->protocol == A_APOP ?
(ac_prefs->ssl_pop == SSL_TUNNEL ?
"POP3 (APOP, SSL)" :
ac_prefs->ssl_pop == SSL_STARTTLS ?
"POP3 (APOP, TLS)" : "POP3 (APOP)") :
ac_prefs->protocol == A_IMAP4 ?
(ac_prefs->ssl_imap == SSL_TUNNEL ?
"IMAP4 (SSL)" :
@ -1059,7 +1053,6 @@ static gint account_clist_set_row(PrefsAccount *ac_prefs, gint row)
"";
#else
text[COL_PROTOCOL] = ac_prefs->protocol == A_POP3 ? "POP3" :
ac_prefs->protocol == A_APOP ? "POP3 (APOP)" :
ac_prefs->protocol == A_IMAP4 ? "IMAP4" :
ac_prefs->protocol == A_LOCAL ? "Local" :
ac_prefs->protocol == A_NNTP ? "NNTP" : "";
@ -1078,7 +1071,6 @@ static gint account_clist_set_row(PrefsAccount *ac_prefs, gint row)
}
has_getallbox = (ac_prefs->protocol == A_POP3 ||
ac_prefs->protocol == A_APOP ||
ac_prefs->protocol == A_IMAP4 ||
ac_prefs->protocol == A_NNTP ||
ac_prefs->protocol == A_LOCAL);

View file

@ -86,7 +86,7 @@
/* #define DEFAULT_INC_PATH "/usr/bin/imget" */
/* #define DEFAULT_INC_PROGRAM "imget" */
#define DEFAULT_SENDMAIL_CMD "/usr/sbin/sendmail -t -i"
#define DEFAULT_BROWSER_CMD "mozilla -remote 'openURL(%s, new-window)'"
#define DEFAULT_BROWSER_CMD "mozilla-firefox -remote 'openURL(%s,new-window)'"
#ifdef _PATH_MAILDIR
# define DEFAULT_SPOOL_PATH _PATH_MAILDIR

View file

@ -144,6 +144,26 @@ void ptr_array_free_strings(GPtrArray *array)
}
}
gboolean str_find(const gchar *haystack, const gchar *needle)
{
return strstr(haystack, needle) != NULL ? TRUE : FALSE;
}
gboolean str_case_find(const gchar *haystack, const gchar *needle)
{
return strcasestr(haystack, needle) != NULL ? TRUE : FALSE;
}
gboolean str_find_equal(const gchar *haystack, const gchar *needle)
{
return strcmp(haystack, needle) == 0;
}
gboolean str_case_find_equal(const gchar *haystack, const gchar *needle)
{
return strcasecmp(haystack, needle) == 0;
}
gint to_number(const gchar *nstr)
{
register const guchar *p;
@ -2900,6 +2920,8 @@ FILE *my_tmpfile(void)
tmpdir = get_tmp_dir();
tmplen = strlen(tmpdir);
progname = g_get_prgname();
if (progname == NULL)
progname = "sylpheed-claws";
proglen = strlen(progname);
Xalloca(fname, tmplen + 1 + proglen + sizeof(suffix),
return tmpfile());

View file

@ -1,6 +1,6 @@
/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
* Copyright (C) 1999-2003 Hiroyuki Yamamoto
* Copyright (C) 1999-2004 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
@ -175,6 +175,18 @@ guint str_case_hash (gconstpointer key);
void ptr_array_free_strings (GPtrArray *array);
typedef gboolean (*StrFindFunc) (const gchar *haystack,
const gchar *needle);
gboolean str_find (const gchar *haystack,
const gchar *needle);
gboolean str_case_find (const gchar *haystack,
const gchar *needle);
gboolean str_find_equal (const gchar *haystack,
const gchar *needle);
gboolean str_case_find_equal (const gchar *haystack,
const gchar *needle);
/* number-string conversion */
gint to_number (const gchar *nstr);
gchar *itos_buf (gchar *nstr,

View file

@ -586,7 +586,7 @@ static void mark_all_read_cb(FolderView *folderview, guint action,
{
FolderItem *item;
item = folderview_get_selected(folderview);
item = folderview_get_selected_item(folderview);
if (item == NULL)
return;
@ -658,6 +658,14 @@ void folderview_select_next_unread(FolderView *folderview)
folderview_select_node(folderview, node);
}
FolderItem *folderview_get_selected_item(FolderView *folderview)
{
GtkCTree *ctree = GTK_CTREE(folderview->ctree);
if (!folderview->selected) return NULL;
return gtk_ctree_node_get_row_data(ctree, folderview->selected);
}
void folderview_update_msg_num(FolderView *folderview, GtkCTreeNode *row)
{
GtkCTree *ctree = GTK_CTREE(folderview->ctree);
@ -2152,12 +2160,6 @@ static void folderview_drag_end_cb(GtkWidget *widget,
folderview->nodes_to_recollapse = NULL;
}
FolderItem *folderview_get_selected(FolderView *folderview)
{
return (FolderItem *) gtk_ctree_node_get_row_data(
GTK_CTREE(folderview->ctree), folderview->selected);
}
void folderview_register_popup(FolderViewPopup *fpopup)
{
GList *folderviews;

View file

@ -72,13 +72,17 @@ struct _FolderViewPopup
void folderview_initialize (void);
FolderView *folderview_create (void);
void folderview_init (FolderView *folderview);
void folderview_set (FolderView *folderview);
void folderview_set_all (void);
void folderview_select (FolderView *folderview,
FolderItem *item);
void folderview_unselect (FolderView *folderview);
FolderItem *folderview_get_selected (FolderView *folderview);
void folderview_select_next_unread (FolderView *folderview);
FolderItem *folderview_get_selected_item(FolderView *folderview);
void folderview_update_msg_num (FolderView *folderview,
GtkCTreeNode *row);

View file

@ -203,6 +203,17 @@ gint menu_find_option_menu_index(GtkOptionMenu *optmenu, gpointer data,
return -1;
}
gpointer menu_get_option_menu_active_user_data(GtkOptionMenu *optmenu)
{
GtkWidget *menu;
GtkWidget *menuitem;
menu = gtk_option_menu_get_menu(optmenu);
menuitem = gtk_menu_get_active(GTK_MENU(menu));
return g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID);
}
/* call backs for accelerator changes on selected menu items */
static void menu_item_add_accel( GtkWidget *widget, guint accel_signal_id, GtkAccelGroup *accel_group,
guint accel_key, GdkModifierType accel_mods, GtkAccelFlags accel_flags,

View file

@ -84,6 +84,8 @@ gint menu_find_option_menu_index(GtkOptionMenu *optmenu,
gpointer data,
GCompareFunc func);
gpointer menu_get_option_menu_active_user_data
(GtkOptionMenu *optmenu);
void menu_connect_identical_items(void);
void menu_select_by_data (GtkMenu *menu,

View file

@ -333,7 +333,9 @@ static gint imap_cmd_login (IMAPSession *session,
const gchar *pass);
static gint imap_cmd_logout (IMAPSession *session);
static gint imap_cmd_noop (IMAPSession *session);
#if USE_OPENSSL
static gint imap_cmd_starttls (IMAPSession *session);
#endif
static gint imap_cmd_namespace (IMAPSession *session,
gchar **ns_str);
static gint imap_cmd_list (IMAPSession *session,
@ -2662,11 +2664,13 @@ static gint imap_cmd_noop(IMAPSession *session)
return imap_cmd_ok(session, NULL);
}
#if USE_OPENSSL
static gint imap_cmd_starttls(IMAPSession *session)
{
imap_gen_send(session, "STARTTLS");
return imap_cmd_ok(session, NULL);
}
#endif
#define THROW(err) { ok = err; goto catch; }

View file

@ -164,7 +164,7 @@ static void rename_folder_cb(FolderView *folderview, guint action,
gchar *old_id;
gchar *new_id;
item = folderview_get_selected(folderview);
item = folderview_get_selected_item(folderview);
g_return_if_fail(item != NULL);
g_return_if_fail(item->path != NULL);
g_return_if_fail(item->folder != NULL);
@ -220,7 +220,7 @@ static void move_folder_cb(FolderView *folderview, guint action, GtkWidget *widg
{
FolderItem *from_folder = NULL, *to_folder = NULL;
from_folder = folderview_get_selected(folderview);
from_folder = folderview_get_selected_item(folderview);
if (!from_folder || from_folder->folder->klass != imap_get_class())
return;
@ -331,7 +331,7 @@ static void update_tree_cb(FolderView *folderview, guint action,
{
FolderItem *item;
item = folderview_get_selected(folderview);
item = folderview_get_selected_item(folderview);
g_return_if_fail(item != NULL);
summary_show(folderview->summaryview, NULL);

View file

@ -458,7 +458,7 @@ static IncSession *inc_session_new(PrefsAccount *account)
g_return_val_if_fail(account != NULL, NULL);
if (account->protocol != A_POP3 && account->protocol != A_APOP)
if (account->protocol != A_POP3)
return NULL;
if (!account->recv_server || !account->userid)
return NULL;

View file

@ -439,10 +439,13 @@ static GtkItemFactoryEntry mainwin_entries[] =
{N_("/_File"), NULL, NULL, 0, "<Branch>"},
{N_("/_File/_Add mailbox"), NULL, NULL, 0, "<Branch>"},
{N_("/_File/_Add mailbox/MH..."), NULL, add_mailbox_cb, 0, NULL},
{N_("/_File/---"), NULL, NULL, 0, "<Separator>"},
{N_("/_File/Change folder order"), NULL, foldersort_cb, 0, NULL},
{N_("/_File/---"), NULL, NULL, 0, "<Separator>"},
{N_("/_File/_Import mbox file..."), NULL, import_mbox_cb, 0, NULL},
{N_("/_File/_Export to mbox file..."), NULL, export_mbox_cb, 0, NULL},
{N_("/_File/Empty all _Trash folders"), "<shift>D", empty_trash_cb, 0, NULL},
{N_("/_File/---"), NULL, NULL, 0, "<Separator>"},
{N_("/_File/Empty all _Trash folders"), "<shift>D", empty_trash_cb, 0, NULL},
{N_("/_File/---"), NULL, NULL, 0, "<Separator>"},
{N_("/_File/_Save as..."), "<control>S", save_as_cb, 0, NULL},
{N_("/_File/_Print..."), NULL, print_cb, 0, NULL},
@ -1610,7 +1613,7 @@ void main_window_empty_trash(MainWindow *mainwin, gboolean confirm)
manage_window_focus_in(mainwin->window, NULL, NULL);
}
procmsg_empty_trash();
procmsg_empty_all_trash();
if (mainwin->summaryview->folder_item &&
mainwin->summaryview->folder_item->stype == F_TRASH)
@ -2749,7 +2752,7 @@ static void delete_duplicated_cb(MainWindow *mainwin, guint action,
{
FolderItem *item;
item = folderview_get_selected(mainwin->folderview);
item = folderview_get_selected_item(mainwin->folderview);
if (item) {
main_window_cursor_wait(mainwin);
STATUSBAR_PUSH(mainwin, _("Deleting duplicated messages..."));

View file

@ -156,7 +156,7 @@ static void delete_folder_cb(FolderView *folderview, guint action,
gchar *old_path;
gchar *old_id;
item = folderview_get_selected(folderview);
item = folderview_get_selected_item(folderview);
g_return_if_fail(item != NULL);
g_return_if_fail(item->path != NULL);
g_return_if_fail(item->folder != NULL);
@ -207,7 +207,7 @@ static void rename_folder_cb(FolderView *folderview, guint action,
gchar *old_id;
gchar *new_id;
item = folderview_get_selected(folderview);
item = folderview_get_selected_item(folderview);
g_return_if_fail(item != NULL);
g_return_if_fail(item->path != NULL);
g_return_if_fail(item->folder != NULL);
@ -261,7 +261,7 @@ static void move_folder_cb(FolderView *folderview, guint action, GtkWidget *widg
{
FolderItem *from_folder = NULL, *to_folder = NULL;
from_folder = folderview_get_selected(folderview);
from_folder = folderview_get_selected_item(folderview);
if (!from_folder || from_folder->folder->klass != mh_get_class())
return;
@ -277,7 +277,7 @@ static void update_tree_cb(FolderView *folderview, guint action,
{
FolderItem *item;
item = folderview_get_selected(folderview);
item = folderview_get_selected_item(folderview);
g_return_if_fail(item != NULL);
summary_show(folderview->summaryview, NULL);
@ -298,7 +298,7 @@ static void remove_mailbox_cb(FolderView *folderview, guint action,
gchar *message;
AlertValue avalue;
item = folderview_get_selected(folderview);
item = folderview_get_selected_item(folderview);
g_return_if_fail(item != NULL);
g_return_if_fail(item->folder != NULL);
if (folder_item_parent(item)) return;

View file

@ -268,7 +268,7 @@ static void update_tree_cb(FolderView *folderview, guint action,
{
FolderItem *item;
item = folderview_get_selected(folderview);
item = folderview_get_selected_item(folderview);
g_return_if_fail(item != NULL);
summary_show(folderview->summaryview, NULL);

View file

@ -207,7 +207,7 @@ static gint pop3_getrange_last_recv(Pop3Session *session, const gchar *msg)
gint last;
if (sscanf(msg, "%d", &last) == 0) {
log_error(_("POP3 protocol error\n"));
log_warning(_("POP3 protocol error\n"));
session->error_val = PS_PROTOCOL;
return -1;
} else {
@ -271,6 +271,7 @@ static gint pop3_getrange_uidl_recv(Pop3Session *session, const gchar *data,
session->msg[num].received =
(partial_recv != POP3_MUST_COMPLETE_RECV);
session->msg[num].partial_recv = partial_recv;
}
if (!session->new_msg_exist &&
(session->ac_prefs->getall || recv_time == RECV_TIME_NONE ||
@ -872,7 +873,7 @@ static gint pop3_session_recv_msg(Session *session, const gchar *msg)
pop3_stls_send(pop3_session);
else
#endif
if (pop3_session->ac_prefs->protocol == A_APOP)
if (pop3_session->ac_prefs->use_apop_auth)
pop3_getauth_apop_send(pop3_session);
else
pop3_getauth_user_send(pop3_session);
@ -881,7 +882,7 @@ static gint pop3_session_recv_msg(Session *session, const gchar *msg)
case POP3_STLS:
if (pop3_stls_recv(pop3_session) != PS_SUCCESS)
return -1;
if (pop3_session->ac_prefs->protocol == A_APOP)
if (pop3_session->ac_prefs->use_apop_auth)
pop3_getauth_apop_send(pop3_session);
else
pop3_getauth_user_send(pop3_session);

View file

@ -89,6 +89,7 @@ static struct Basic {
static struct Receive {
GtkWidget *pop3_frame;
GtkWidget *use_apop_chkbtn;
GtkWidget *rmmail_chkbtn;
GtkWidget *leave_time_entry;
GtkWidget *getall_chkbtn;
@ -282,6 +283,10 @@ static PrefParam param[] = {
&receive.inbox_entry, prefs_set_data_from_entry, prefs_set_entry},
/* Receive */
{"use_apop_auth", "FALSE", &tmp_ac_prefs.use_apop_auth, P_BOOL,
&receive.use_apop_chkbtn,
prefs_set_data_from_toggle, prefs_set_toggle},
{"remove_mail", "TRUE", &tmp_ac_prefs.rmmail, P_BOOL,
&receive.rmmail_chkbtn,
prefs_set_data_from_toggle, prefs_set_toggle},
@ -574,6 +579,12 @@ void prefs_account_read_config(PrefsAccount *ac_prefs, const gchar *label)
if (id < 0) g_warning("wrong account id: %d\n", id);
ac_prefs->account_id = id;
if (ac_prefs->protocol == A_APOP) {
debug_print("converting protocol A_APOP to new prefs.\n");
ac_prefs->protocol = A_POP3;
ac_prefs->use_apop_auth = TRUE;
}
prefs_custom_header_read_config(ac_prefs);
}
@ -642,6 +653,7 @@ void update_privacy_system_menu() {
GSList *system_ids, *cur;
menu = gtk_menu_new();
menuitem = gtk_menu_item_new_with_label(_("None"));
gtk_widget_show(menuitem);
g_object_set_data(G_OBJECT(menuitem), MENU_VAL_ID, "");
@ -939,9 +951,7 @@ static void prefs_account_basic_create(void)
optmenu_menu = gtk_menu_new ();
MENUITEM_ADD (optmenu_menu, menuitem, _("POP3 (normal)"), A_POP3);
SET_ACTIVATE (menuitem);
MENUITEM_ADD (optmenu_menu, menuitem, _("POP3 (APOP auth)"), A_APOP);
MENUITEM_ADD (optmenu_menu, menuitem, _("POP3"), A_POP3);
SET_ACTIVATE (menuitem);
MENUITEM_ADD (optmenu_menu, menuitem, _("IMAP4"), A_IMAP4);
SET_ACTIVATE (menuitem);
@ -1115,6 +1125,7 @@ static void prefs_account_receive_create(void)
GtkWidget *vbox1;
GtkWidget *frame1;
GtkWidget *vbox2;
GtkWidget *use_apop_chkbtn;
GtkWidget *rmmail_chkbtn;
GtkWidget *hbox_spc;
GtkWidget *leave_time_label;
@ -1153,6 +1164,9 @@ static void prefs_account_receive_create(void)
gtk_container_add (GTK_CONTAINER (frame1), vbox2);
gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
PACK_CHECK_BUTTON (vbox2, use_apop_chkbtn,
_("Use secure authentication (APOP)"));
PACK_CHECK_BUTTON (vbox2, rmmail_chkbtn,
_("Remove messages on server when received"));
@ -1310,6 +1324,7 @@ static void prefs_account_receive_create(void)
_("`Get all' checks for new messages on this account"));
receive.pop3_frame = frame1;
receive.use_apop_chkbtn = use_apop_chkbtn;
receive.rmmail_chkbtn = rmmail_chkbtn;
receive.leave_time_entry = leave_time_entry;
receive.getall_chkbtn = getall_chkbtn;
@ -2170,19 +2185,18 @@ static gint prefs_account_apply(void)
return -1;
}
if (((protocol == A_POP3) ||
(protocol == A_APOP) ||
(protocol == A_LOCAL && !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(basic.mailcmd_chkbtn))) ||
(protocol == A_NONE)) &&
*gtk_entry_get_text(GTK_ENTRY(basic.smtpserv_entry)) == '\0') {
alertpanel_error(_("SMTP server is not entered."));
return -1;
}
if ((protocol == A_POP3 || protocol == A_APOP || protocol == A_IMAP4) &&
if ((protocol == A_POP3 || protocol == A_IMAP4) &&
*gtk_entry_get_text(GTK_ENTRY(basic.uid_entry)) == '\0') {
alertpanel_error(_("User ID is not entered."));
return -1;
}
if ((protocol == A_POP3 || protocol == A_APOP) &&
if (protocol == A_POP3 &&
*gtk_entry_get_text(GTK_ENTRY(basic.recvserv_entry)) == '\0') {
alertpanel_error(_("POP3 server is not entered."));
return -1;
@ -2301,43 +2315,19 @@ static void prefs_account_protocol_set_optmenu(PrefParam *pparam)
GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
GtkWidget *menu;
GtkWidget *menuitem;
GList *children;
gint list_order[] = {
0, /* A_POP3 */
1, /* A_APOP */
-1, /* A_RPOP */
2, /* A_IMAP4 */
3, /* A_NNTP */
4, /* A_LOCAL */
5, /* A_NONE */
};
gint index;
protocol = *((RecvProtocol *)pparam->data);
if (protocol < 0 || protocol > A_NONE) return;
if (list_order[protocol] < 0) return;
gtk_option_menu_set_history(optmenu, list_order[protocol]);
index = menu_find_option_menu_index
(optmenu, GINT_TO_POINTER(protocol), NULL);
if (index < 0) return;
gtk_option_menu_set_history(optmenu, index);
menu = gtk_option_menu_get_menu(optmenu);
menu_set_insensitive_all(GTK_MENU_SHELL(menu));
#define SET_NTH_SENSITIVE(proto) \
{ \
menuitem = g_list_nth_data(children, list_order[proto]); \
if (menuitem) \
gtk_widget_set_sensitive(menuitem, TRUE); \
}
children = GTK_MENU_SHELL(menu)->children;
SET_NTH_SENSITIVE(protocol);
if (protocol == A_POP3) {
SET_NTH_SENSITIVE(A_APOP);
} else if (protocol == A_APOP) {
SET_NTH_SENSITIVE(A_POP3);
}
#undef SET_NTH_SENSITIVE
menuitem = gtk_menu_get_active(GTK_MENU(menu));
gtk_widget_set_sensitive(menuitem, TRUE);
gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
}

View file

@ -28,8 +28,8 @@ typedef struct _PrefsAccount PrefsAccount;
typedef enum {
A_POP3,
A_APOP,
A_RPOP,
A_APOP, /* deprecated */
A_RPOP, /* deprecated */
A_IMAP4,
A_NNTP,
A_LOCAL,
@ -82,6 +82,7 @@ struct _PrefsAccount
gchar *tmp_pass;
/* Receive */
gboolean use_apop_auth;
gboolean rmmail;
gint msg_leave_time;
gboolean getall;

View file

@ -138,8 +138,8 @@ void prefs_ext_prog_create_widget(PrefsPage *_page, GtkWindow *window,
"gnome-moz-remote --newwin '%s'",
"kfmclient openURL '%s'",
"opera -newwindow '%s'",
"kterm -e w3m '%s'",
"kterm -e lynx '%s'",
"rxvt -e w3m '%s'",
"rxvt -e lynx '%s'",
NULL);
uri_entry = GTK_COMBO (uri_combo)->entry;
gtk_entry_set_text(GTK_ENTRY(uri_entry), prefs_common.uri_cmd ? prefs_common.uri_cmd : "");

View file

@ -738,28 +738,24 @@ FILE *procmime_get_first_text_content(MsgInfo *msginfo)
}
gboolean procmime_find_string_part(MimeInfo *mimeinfo, const gchar *filename,
const gchar *str, gboolean case_sens)
const gchar *str, StrFindFunc find_func)
{
FILE *outfp;
gchar buf[BUFFSIZE];
gchar *(* StrFindFunc) (const gchar *haystack, const gchar *needle);
g_return_val_if_fail(mimeinfo != NULL, FALSE);
g_return_val_if_fail(mimeinfo->type == MIMETYPE_TEXT, FALSE);
g_return_val_if_fail(str != NULL, FALSE);
g_return_val_if_fail(find_func != NULL, FALSE);
outfp = procmime_get_text_content(mimeinfo);
if (!outfp)
return FALSE;
if (case_sens)
StrFindFunc = strstr;
else
StrFindFunc = strcasestr;
while (fgets(buf, sizeof(buf), outfp) != NULL) {
if (StrFindFunc(buf, str) != NULL) {
strretchomp(buf);
if (find_func(buf, str)) {
fclose(outfp);
return TRUE;
}
@ -771,7 +767,7 @@ gboolean procmime_find_string_part(MimeInfo *mimeinfo, const gchar *filename,
}
gboolean procmime_find_string(MsgInfo *msginfo, const gchar *str,
gboolean case_sens)
StrFindFunc find_func)
{
MimeInfo *mimeinfo;
MimeInfo *partinfo;
@ -780,6 +776,7 @@ gboolean procmime_find_string(MsgInfo *msginfo, const gchar *str,
g_return_val_if_fail(msginfo != NULL, FALSE);
g_return_val_if_fail(str != NULL, FALSE);
g_return_val_if_fail(find_func != NULL, FALSE);
filename = procmsg_get_message_file(msginfo);
if (!filename) return FALSE;
@ -789,7 +786,7 @@ gboolean procmime_find_string(MsgInfo *msginfo, const gchar *str,
partinfo = procmime_mimeinfo_next(partinfo)) {
if (partinfo->type == MIMETYPE_TEXT) {
if (procmime_find_string_part
(partinfo, filename, str, case_sens) == TRUE) {
(partinfo, filename, str, find_func) == TRUE) {
found = TRUE;
break;
}

View file

@ -1,6 +1,6 @@
/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
* Copyright (C) 1999-2001 Hiroyuki Yamamoto
* Copyright (C) 1999-2004 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
@ -27,6 +27,9 @@
typedef struct _MimeType MimeType;
typedef struct _MimeInfo MimeInfo;
#include "procmsg.h"
#include "utils.h"
typedef enum
{
ENC_7BIT,
@ -189,10 +192,10 @@ FILE *procmime_get_first_text_content (MsgInfo *msginfo);
gboolean procmime_find_string_part (MimeInfo *mimeinfo,
const gchar *filename,
const gchar *str,
gboolean case_sens);
StrFindFunc find_func);
gboolean procmime_find_string (MsgInfo *msginfo,
const gchar *str,
gboolean case_sens);
StrFindFunc find_func);
gchar *procmime_get_tmp_file_name (MimeInfo *mimeinfo);

View file

@ -600,24 +600,31 @@ void procmsg_get_filter_keyword(MsgInfo *msginfo, gchar **header, gchar **key,
}
}
void procmsg_empty_trash(void)
void procmsg_empty_trash(FolderItem *trash)
{
FILE *fp;
if (trash && trash->total_msgs > 0) {
GSList *mlist = folder_item_get_msg_list(trash);
GSList *cur;
for (cur = mlist ; cur != NULL ; cur = cur->next) {
MsgInfo * msginfo = (MsgInfo *) cur->data;
partial_mark_for_delete(msginfo);
procmsg_msginfo_free(msginfo);
}
folder_item_remove_all_msg(trash);
}
}
void procmsg_empty_all_trash(void)
{
FolderItem *trash;
GList *cur;
for (cur = folder_get_list(); cur != NULL; cur = cur->next) {
trash = FOLDER(cur->data)->trash;
if (trash && trash->total_msgs > 0) {
GSList *mlist = folder_item_get_msg_list(trash);
GSList *cur;
for (cur = mlist ; cur != NULL ; cur = cur->next) {
MsgInfo * msginfo = (MsgInfo *) cur->data;
partial_mark_for_delete(msginfo);
procmsg_msginfo_free(msginfo);
}
folder_item_remove_all_msg(trash);
}
procmsg_empty_trash(trash);
}
}

View file

@ -266,7 +266,9 @@ void procmsg_get_filter_keyword (MsgInfo *msginfo,
gchar **key,
PrefsFilterType type);
void procmsg_empty_trash (void);
void procmsg_empty_trash (FolderItem *trash);
void procmsg_empty_all_trash (void);
gint procmsg_send_queue (FolderItem *queue,
gboolean save_msgs);
gint procmsg_save_to_outbox (FolderItem *outbox,

View file

@ -1,6 +1,6 @@
/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
* Copyright (C) 1999-2003 Hiroyuki Yamamoto
* Copyright (C) 1999-2004 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
@ -29,6 +29,7 @@
#include <gtk/gtkwindow.h>
#include <gtk/gtkvbox.h>
#include <gtk/gtktable.h>
#include <gtk/gtkoptionmenu.h>
#include <gtk/gtklabel.h>
#include <gtk/gtkentry.h>
#include <gtk/gtkhbox.h>
@ -46,12 +47,14 @@
#include "summaryview.h"
#include "messageview.h"
#include "mainwindow.h"
#include "menu.h"
#include "utils.h"
#include "gtkutils.h"
#include "manage_window.h"
#include "alertpanel.h"
static GtkWidget *window;
static GtkWidget *bool_optmenu;
static GtkWidget *from_entry;
static GtkWidget *to_entry;
static GtkWidget *subject_entry;
@ -89,6 +92,9 @@ void summary_search(SummaryView *summaryview)
static void summary_search_create(SummaryView *summaryview)
{
GtkWidget *vbox1;
GtkWidget *bool_hbox;
GtkWidget *bool_menu;
GtkWidget *menuitem;
GtkWidget *table1;
GtkWidget *from_label;
GtkWidget *to_label;
@ -112,6 +118,19 @@ static void summary_search_create(SummaryView *summaryview)
gtk_widget_show (vbox1);
gtk_container_add (GTK_CONTAINER (window), vbox1);
bool_hbox = gtk_hbox_new(FALSE, 4);
gtk_widget_show(bool_hbox);
gtk_box_pack_start(GTK_BOX(vbox1), bool_hbox, FALSE, FALSE, 0);
bool_optmenu = gtk_option_menu_new();
gtk_widget_show(bool_optmenu);
gtk_box_pack_start(GTK_BOX(bool_hbox), bool_optmenu, FALSE, FALSE, 0);
bool_menu = gtk_menu_new();
MENUITEM_ADD(bool_menu, menuitem, _("Match any of the following"), 0);
MENUITEM_ADD(bool_menu, menuitem, _("Match all of the following"), 1);
gtk_option_menu_set_menu(GTK_OPTION_MENU(bool_optmenu), bool_menu);
table1 = gtk_table_new (4, 3, FALSE);
gtk_widget_show (table1);
gtk_box_pack_start (GTK_BOX (vbox1), table1, TRUE, TRUE, 0);
@ -200,12 +219,6 @@ static void summary_search_create(SummaryView *summaryview)
g_signal_connect(G_OBJECT(all_checkbtn), "clicked",
G_CALLBACK(all_clicked), summaryview);
and_checkbtn =
gtk_check_button_new_with_label (_("AND search"));
gtk_widget_show (and_checkbtn);
gtk_box_pack_start (GTK_BOX (checkbtn_hbox), and_checkbtn,
FALSE, FALSE, 0);
gtkut_button_set_create(&confirm_area,
&search_btn, _("Search"),
&clear_btn, _("Clear"),
@ -227,48 +240,44 @@ static void summary_search_create(SummaryView *summaryview)
FALSE);
}
#define GET_ENTRY(entry) gtk_entry_get_text(GTK_ENTRY(entry))
static void summary_search_execute(GtkButton *button, gpointer data)
{
SummaryView *summaryview = data;
GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
GtkCTreeNode *node;
MsgInfo *msginfo;
gboolean bool_and;
gboolean case_sens;
gboolean backward;
gboolean search_all;
gboolean search_and;
gboolean all_searched = FALSE;
gboolean all_matched = FALSE;
gboolean from_matched;
gboolean to_matched;
gboolean subj_matched;
gboolean matched;
gboolean body_matched;
const gchar *body_str, *from_str, *to_str, *subj_str;
char *(*findfunc) (const char *haystack, const char *needle);
const gchar *from_str, *to_str, *subject_str, *body_str;
StrFindFunc str_find_func;
if (summary_is_locked(summaryview)) return;
summary_lock(summaryview);
bool_and = GPOINTER_TO_INT
(menu_get_option_menu_active_user_data
(GTK_OPTION_MENU(bool_optmenu)));
case_sens = gtk_toggle_button_get_active
(GTK_TOGGLE_BUTTON(case_checkbtn));
backward = gtk_toggle_button_get_active
(GTK_TOGGLE_BUTTON(backward_checkbtn));
search_all = gtk_toggle_button_get_active
(GTK_TOGGLE_BUTTON(all_checkbtn));
search_and = gtk_toggle_button_get_active
(GTK_TOGGLE_BUTTON(and_checkbtn));
if (case_sens)
findfunc = strstr;
else
findfunc = strcasestr;
from_str = GET_ENTRY(from_entry);
to_str = GET_ENTRY(to_entry);
subj_str = GET_ENTRY(subject_entry);
body_str = GET_ENTRY(body_entry);
if (case_sens)
str_find_func = str_find;
else
str_find_func = str_case_find;
from_str = gtk_entry_get_text(GTK_ENTRY(from_entry));
to_str = gtk_entry_get_text(GTK_ENTRY(to_entry));
subject_str = gtk_entry_get_text(GTK_ENTRY(subject_entry));
body_str = gtk_entry_get_text(GTK_ENTRY(body_entry));
if (search_all) {
gtk_clist_freeze(GTK_CLIST(ctree));
@ -335,38 +344,61 @@ static void summary_search_execute(GtkButton *button, gpointer data)
break;
}
from_matched = to_matched = subj_matched = body_matched = FALSE;
all_matched = search_and;
msginfo = gtk_ctree_node_get_row_data(ctree, node);
if (from_str && *from_str && msginfo->from) {
if (findfunc(msginfo->from, from_str) != NULL)
from_matched = TRUE;
else
all_matched = FALSE;
}
if (to_str && *to_str && msginfo->to) {
if (findfunc(msginfo->to, to_str) != NULL)
to_matched = TRUE;
else
all_matched = FALSE;
}
if (subj_str && *subj_str && msginfo->subject) {
if (findfunc(msginfo->subject, subj_str) != NULL)
from_matched = TRUE;
else
all_matched = FALSE;
}
if (body_str && *body_str) {
if (procmime_find_string(msginfo, body_str, case_sens))
body_matched = TRUE;
else
all_matched = FALSE;
msginfo = gtk_ctree_node_get_row_data(ctree, node);
body_matched = FALSE;
if (bool_and) {
matched = TRUE;
if (*from_str) {
if (!msginfo->from ||
!str_find_func(msginfo->from, from_str))
matched = FALSE;
}
if (matched && *to_str) {
if (!msginfo->to ||
!str_find_func(msginfo->to, to_str))
matched = FALSE;
}
if (matched && *subject_str) {
if (!msginfo->subject ||
!str_find_func(msginfo->subject, subject_str))
matched = FALSE;
}
if (matched && *body_str) {
if (procmime_find_string(msginfo, body_str,
str_find_func))
body_matched = TRUE;
else
matched = FALSE;
}
if (matched && !*from_str && !*to_str &&
!*subject_str && !*body_str)
matched = FALSE;
} else {
matched = FALSE;
if (*from_str && msginfo->from) {
if (str_find_func(msginfo->from, from_str))
matched = TRUE;
}
if (!matched && *to_str && msginfo->to) {
if (str_find_func(msginfo->to, to_str))
matched = TRUE;
}
if (!matched && *subject_str && msginfo->subject) {
if (str_find_func(msginfo->subject, subject_str))
matched = TRUE;
}
if (!matched && *body_str) {
if (procmime_find_string(msginfo, body_str,
str_find_func)) {
matched = TRUE;
body_matched = TRUE;
}
}
}
if ((from_matched || to_matched || subj_matched || body_matched)
&& (!search_and || all_matched)) {
if (matched) {
if (search_all)
gtk_ctree_select(ctree, node);
else {
@ -388,6 +420,7 @@ static void summary_search_execute(GtkButton *button, gpointer data)
break;
}
}
node = backward ? gtkut_ctree_node_prev(ctree, node)
: gtkut_ctree_node_next(ctree, node);
}
@ -398,8 +431,6 @@ static void summary_search_execute(GtkButton *button, gpointer data)
summary_unlock(summaryview);
}
#undef GET_ENTRY
static void summary_search_clear(GtkButton *button, gpointer data)
{
gtk_editable_delete_text(GTK_EDITABLE(from_entry), 0, -1);

View file

@ -4373,6 +4373,7 @@ static gboolean summary_key_pressed(GtkWidget *widget, GdkEventKey *event,
MessageView *messageview;
TextView *textview;
GtkAdjustment *adj;
gboolean mod_pressed;
if (summary_is_locked(summaryview)) return TRUE;
if (!event) return TRUE;
@ -4457,9 +4458,16 @@ static gboolean summary_key_pressed(GtkWidget *widget, GdkEventKey *event,
summaryview->selected);
break;
}
if (!textview_scroll_page(textview, FALSE))
summary_select_next_unread(summaryview);
}
mod_pressed = ((event->state &
(GDK_SHIFT_MASK|GDK_MOD1_MASK)) != 0);
if (mod_pressed) {
if (!textview_scroll_page(textview, TRUE))
summary_select_prev_unread(summaryview);
} else {
if (!textview_scroll_page(textview, FALSE))
summary_select_next_unread(summaryview);
}
}
break;
case GDK_BackSpace: /* Page up */
textview_scroll_page(textview, TRUE);
@ -4471,7 +4479,8 @@ static gboolean summary_key_pressed(GtkWidget *widget, GdkEventKey *event,
break;
}
textview_scroll_one_line
(textview, (event->state & GDK_MOD1_MASK) != 0);
(textview, (event->state &
(GDK_SHIFT_MASK|GDK_MOD1_MASK)) != 0);
break;
case GDK_Delete:
BREAK_ON_MODIFIER_KEY();

View file

@ -1781,14 +1781,18 @@ static gint textview_key_pressed(GtkWidget *widget, GdkEventKey *event,
if (summaryview)
summary_pass_key_press_event(summaryview, event);
else
textview_scroll_page(textview, FALSE);
textview_scroll_page
(textview,
(event->state &
(GDK_SHIFT_MASK|GDK_MOD1_MASK)) != 0);
break;
case GDK_BackSpace:
textview_scroll_page(textview, TRUE);
break;
case GDK_Return:
textview_scroll_one_line(textview,
(event->state & GDK_MOD1_MASK) != 0);
textview_scroll_one_line
(textview, (event->state &
(GDK_SHIFT_MASK|GDK_MOD1_MASK)) != 0);
break;
case GDK_Delete:
if (summaryview)