+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
+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
+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
+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
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.
( 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
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}
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);
}
"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)" :
"";
#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" : "";
}
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);
/* #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
}
}
+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;
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());
/*
* 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
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,
{
FolderItem *item;
- item = folderview_get_selected(folderview);
+ item = folderview_get_selected_item(folderview);
if (item == NULL)
return;
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);
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;
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);
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,
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,
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,
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; }
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);
{
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;
{
FolderItem *item;
- item = folderview_get_selected(folderview);
+ item = folderview_get_selected_item(folderview);
g_return_if_fail(item != NULL);
summary_show(folderview->summaryview, NULL);
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;
{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},
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)
{
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..."));
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);
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);
{
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;
{
FolderItem *item;
- item = folderview_get_selected(folderview);
+ item = folderview_get_selected_item(folderview);
g_return_if_fail(item != NULL);
summary_show(folderview->summaryview, NULL);
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;
{
FolderItem *item;
- item = folderview_get_selected(folderview);
+ item = folderview_get_selected_item(folderview);
g_return_if_fail(item != NULL);
summary_show(folderview->summaryview, NULL);
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 {
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 ||
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);
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);
static struct Receive {
GtkWidget *pop3_frame;
+ GtkWidget *use_apop_chkbtn;
GtkWidget *rmmail_chkbtn;
GtkWidget *leave_time_entry;
GtkWidget *getall_chkbtn;
&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},
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);
}
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, "");
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);
GtkWidget *vbox1;
GtkWidget *frame1;
GtkWidget *vbox2;
+ GtkWidget *use_apop_chkbtn;
GtkWidget *rmmail_chkbtn;
GtkWidget *hbox_spc;
GtkWidget *leave_time_label;
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"));
_("`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;
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;
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));
}
typedef enum {
A_POP3,
- A_APOP,
- A_RPOP,
+ A_APOP, /* deprecated */
+ A_RPOP, /* deprecated */
A_IMAP4,
A_NNTP,
A_LOCAL,
gchar *tmp_pass;
/* Receive */
+ gboolean use_apop_auth;
gboolean rmmail;
gint msg_leave_time;
gboolean getall;
"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 : "");
}
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;
}
}
gboolean procmime_find_string(MsgInfo *msginfo, const gchar *str,
- gboolean case_sens)
+ StrFindFunc find_func)
{
MimeInfo *mimeinfo;
MimeInfo *partinfo;
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;
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;
}
/*
* 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
typedef struct _MimeType MimeType;
typedef struct _MimeInfo MimeInfo;
+#include "procmsg.h"
+#include "utils.h"
+
typedef enum
{
ENC_7BIT,
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);
}
}
-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);
}
}
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,
/*
* 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
#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>
#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;
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;
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);
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"),
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;
+ str_find_func = str_find;
else
- findfunc = strcasestr;
+ str_find_func = str_case_find;
- from_str = GET_ENTRY(from_entry);
- to_str = GET_ENTRY(to_entry);
- subj_str = GET_ENTRY(subject_entry);
- body_str = GET_ENTRY(body_entry);
+ 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));
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 {
break;
}
}
+
node = backward ? gtkut_ctree_node_prev(ctree, node)
: gtkut_ctree_node_next(ctree, node);
}
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);
MessageView *messageview;
TextView *textview;
GtkAdjustment *adj;
+ gboolean mod_pressed;
if (summary_is_locked(summaryview)) return TRUE;
if (!event) return TRUE;
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);
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();
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)