claws-mail/src/summary_search.c

730 lines
22 KiB
C
Raw Normal View History

2001-04-19 14:21:46 +02:00
/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
2006-01-13 [paul] 1.9.100cvs142 * src/account.c * src/account.h * src/action.c * src/action.h * src/adbookbase.h * src/addr_compl.c * src/addr_compl.h * src/addrbook.c * src/addrcache.c * src/addrcache.h * src/addrcindex.c * src/addrcindex.h * src/addrclip.c * src/addrclip.h * src/addrdefs.h * src/addressadd.c * src/addressadd.h * src/addressbook.c * src/addressbook.h * src/addrgather.c * src/addrgather.h * src/addrharvest.c * src/addrharvest.h * src/addrindex.c * src/addrindex.h * src/addritem.c * src/addritem.h * src/addrquery.c * src/addrquery.h * src/addrselect.c * src/addrselect.h * src/alertpanel.c * src/alertpanel.h * src/browseldap.c * src/browseldap.h * src/codeconv.c * src/codeconv.h * src/compose.c * src/compose.h * src/customheader.c * src/customheader.h * src/displayheader.c * src/displayheader.h * src/editaddress.c * src/editaddress.h * src/editbook.c * src/editbook.h * src/editgroup.c * src/editgroup.h * src/editjpilot.c * src/editjpilot.h * src/editldap.c * src/editldap.h * src/editldap_basedn.c * src/editldap_basedn.h * src/editvcard.c * src/editvcard.h * src/exphtmldlg.c * src/exphtmldlg.h * src/expldifdlg.c * src/expldifdlg.h * src/export.h * src/exporthtml.c * src/exporthtml.h * src/exportldif.c * src/exportldif.h * src/filtering.c * src/filtering.h * src/folder.c * src/folder.h * src/folder_item_prefs.c * src/folder_item_prefs.h * src/foldersel.c * src/foldersel.h * src/folderutils.c * src/folderutils.h * src/folderview.c * src/folderview.h * src/grouplistdialog.c * src/grouplistdialog.h * src/headerview.c * src/html.c * src/html.h * src/image_viewer.c * src/image_viewer.h * src/imap.c * src/imap.h * src/imap_gtk.c * src/imap_gtk.h * src/import.h * src/importldif.c * src/importldif.h * src/importmutt.c * src/importmutt.h * src/importpine.c * src/importpine.h * src/inc.c * src/inc.h * src/jpilot.c * src/jpilot.h * src/ldapctrl.c * src/ldapctrl.h * src/ldaplocate.c * src/ldaplocate.h * src/ldapquery.c * src/ldapquery.h * src/ldapserver.c * src/ldapserver.h * src/ldaputil.c * src/ldaputil.h * src/ldif.c * src/ldif.h * src/main.c * src/main.h * src/mainwindow.c * src/mainwindow.h * src/manual.c * src/manual.h * src/mbox.c * src/mbox.h * src/message_search.c * src/message_search.h * src/messageview.c * src/messageview.h * src/mh.c * src/mh.h * src/mh_gtk.c * src/mh_gtk.h * src/mimeview.c * src/mimeview.h * src/msgcache.c * src/msgcache.h * src/mutt.c * src/mutt.h * src/news.c * src/news.h * src/news_gtk.c * src/news_gtk.h * src/partial_download.c * src/partial_download.h * src/pine.c * src/pine.h * src/pop.c * src/pop.h * src/prefs_account.c * src/prefs_account.h * src/prefs_actions.c * src/prefs_actions.h * src/prefs_common.c * src/prefs_common.h * src/prefs_compose_writing.c * src/prefs_compose_writing.h * src/prefs_customheader.c * src/prefs_customheader.h * src/prefs_display_header.c * src/prefs_display_header.h * src/prefs_filtering.c * src/prefs_filtering.h * src/prefs_filtering_action.c * src/prefs_filtering_action.h * src/prefs_folder_column.c * src/prefs_folder_column.h * src/prefs_folder_item.c * src/prefs_folder_item.h * src/prefs_fonts.c * src/prefs_fonts.h * src/prefs_gtk.c * src/prefs_gtk.h * src/prefs_image_viewer.c * src/prefs_image_viewer.h * src/prefs_matcher.c * src/prefs_matcher.h * src/prefs_message.c * src/prefs_msg_colors.c * src/prefs_msg_colors.h * src/prefs_other.c * src/prefs_quote.c * src/prefs_receive.c * src/prefs_send.c * src/prefs_spelling.c * src/prefs_spelling.h * src/prefs_summaries.c * src/prefs_summaries.h * src/prefs_summary_column.c * src/prefs_summary_column.h * src/prefs_template.c * src/prefs_template.h * src/prefs_themes.c * src/prefs_themes.h * src/prefs_toolbar.c * src/prefs_toolbar.h * src/prefs_wrapping.c * src/prefs_wrapping.h * src/privacy.c * src/privacy.h * src/procheader.c * src/procheader.h * src/procmime.c * src/procmime.h * src/procmsg.c * src/procmsg.h * src/quote_fmt.c * src/quote_fmt_parse.y * src/recv.c * src/recv.h * src/remotefolder.c * src/remotefolder.h * src/send_message.c * src/send_message.h * src/setup.c * src/setup.h * src/sourcewindow.c * src/sourcewindow.h * src/ssl_manager.c * src/ssl_manager.h * src/statusbar.c * src/statusbar.h * src/stock_pixmap.c * src/stock_pixmap.h * src/summary_search.c * src/summary_search.h * src/summaryview.c * src/summaryview.h * src/syldap.c * src/syldap.h * src/textview.c * src/textview.h * src/toolbar.c * src/toolbar.h * src/undo.c * src/undo.h * src/unmime.c * src/unmime.h * src/vcard.c * src/vcard.h * src/wizard.c * src/wizard.h * src/common/base64.c * src/common/base64.h * src/common/defs.h * src/common/hooks.c * src/common/hooks.h * src/common/log.c * src/common/log.h * src/common/mgutils.c * src/common/mgutils.h * src/common/nntp.c * src/common/nntp.h * src/common/passcrypt.c * src/common/passcrypt.h.in * src/common/plugin.c * src/common/plugin.h * src/common/prefs.c * src/common/prefs.h * src/common/progressindicator.c * src/common/progressindicator.h * src/common/quoted-printable.c * src/common/quoted-printable.h * src/common/session.c * src/common/session.h * src/common/smtp.c * src/common/smtp.h * src/common/socket.c * src/common/socket.h * src/common/ssl.c * src/common/ssl.h * src/common/ssl_certificate.c * src/common/ssl_certificate.h * src/common/stringtable.c * src/common/stringtable.h * src/common/sylpheed.c * src/common/sylpheed.h * src/common/template.c * src/common/template.h * src/common/timing.h * src/common/utils.c * src/common/utils.h * src/common/version.h.in * src/common/xml.c * src/common/xml.h * src/common/xmlprops.c * src/common/xmlprops.h * src/gtk/colorlabel.c * src/gtk/colorsel.c * src/gtk/colorsel.h * src/gtk/description_window.c * src/gtk/description_window.h * src/gtk/filesel.c * src/gtk/filesel.h * src/gtk/foldersort.c * src/gtk/foldersort.h * src/gtk/gtkutils.c * src/gtk/gtkutils.h * src/gtk/inputdialog.c * src/gtk/inputdialog.h * src/gtk/logwindow.c * src/gtk/logwindow.h * src/gtk/manage_window.c * src/gtk/manage_window.h * src/gtk/menu.c * src/gtk/menu.h * src/gtk/pluginwindow.c * src/gtk/pluginwindow.h * src/gtk/prefswindow.c * src/gtk/prefswindow.h * src/gtk/progressdialog.c * src/gtk/progressdialog.h * src/gtk/sslcertwindow.c * src/gtk/sslcertwindow.h * src/plugins/clamav/clamav_plugin.c * src/plugins/clamav/clamav_plugin.h * src/plugins/clamav/clamav_plugin_gtk.c * src/plugins/demo/demo.c * src/plugins/dillo_viewer/dillo_prefs.c * src/plugins/dillo_viewer/dillo_prefs.h * src/plugins/dillo_viewer/dillo_viewer.c * src/plugins/pgpcore/passphrase.c * src/plugins/pgpcore/passphrase.h * src/plugins/pgpcore/plugin.c * src/plugins/pgpcore/select-keys.c * src/plugins/pgpcore/select-keys.h * src/plugins/pgpcore/sgpgme.c * src/plugins/pgpcore/sgpgme.h * src/plugins/pgpinline/pgpinline.c * src/plugins/pgpinline/pgpinline.h * src/plugins/pgpinline/plugin.c * src/plugins/pgpmime/pgpmime.c * src/plugins/pgpmime/pgpmime.h * src/plugins/pgpmime/plugin.c * src/plugins/spamassassin/spamassassin.c * src/plugins/spamassassin/spamassassin.h * src/plugins/spamassassin/spamassassin_gtk.c * src/plugins/trayicon/trayicon.c update copyright header
2006-01-13 18:24:38 +01:00
* Copyright (C) 1999-2006 Hiroyuki Yamamoto and the Sylpheed-Claws team
2001-04-19 14:21:46 +02:00
*
* 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
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
2005-09-21 [paul] 1.9.14cvs47 * README * README.jp * configure.ac * config/config.rpath * doc/manual/en/sylpheed-20.html * doc/manual/es/sylpheed-20.html * po/bg.po * po/ca.po * po/de.po * po/es.po * po/fr.po * po/it.po * po/pt_BR.po * po/sk.po * po/zh_TW.po * src/account.c * src/account.h * src/action.c * src/action.h * src/adbookbase.h * src/addr_compl.c * src/addr_compl.h * src/addrbook.c * src/addrbook.h * src/addrcache.c * src/addrcache.h * src/addrcindex.c * src/addrcindex.h * src/addrclip.c * src/addrclip.h * src/addrdefs.h * src/addressadd.c * src/addressadd.h * src/addressbook.c * src/addressbook.h * src/addressitem.h * src/addrgather.c * src/addrgather.h * src/addrharvest.c * src/addrharvest.h * src/addrindex.c * src/addrindex.h * src/addritem.c * src/addritem.h * src/addrquery.c * src/addrquery.h * src/addrselect.c * src/addrselect.h * src/alertpanel.c * src/alertpanel.h * src/browseldap.c * src/browseldap.h * src/codeconv.c * src/codeconv.h * src/compose.c * src/compose.h * src/crash.c * src/crash.h * src/customheader.c * src/customheader.h * src/displayheader.c * src/displayheader.h * src/editaddress.c * src/editaddress.h * src/editbook.c * src/editbook.h * src/editgroup.c * src/editgroup.h * src/editjpilot.c * src/editjpilot.h * src/editldap.c * src/editldap.h * src/editldap_basedn.c * src/editldap_basedn.h * src/editvcard.c * src/editvcard.h * src/enriched.c * src/enriched.h * src/exphtmldlg.c * src/exphtmldlg.h * src/expldifdlg.c * src/expldifdlg.h * src/export.c * src/export.h * src/exporthtml.c * src/exporthtml.h * src/exportldif.c * src/exportldif.h * src/filtering.c * src/filtering.h * src/folder.c * src/folder.h * src/folder_item_prefs.c * src/folder_item_prefs.h * src/foldersel.c * src/foldersel.h * src/folderutils.c * src/folderutils.h * src/folderview.c * src/folderview.h * src/grouplistdialog.c * src/grouplistdialog.h * src/headerview.c * src/headerview.h * src/html.c * src/html.h * src/image_viewer.c * src/image_viewer.h * src/imap.c * src/imap.h * src/imap_gtk.c * src/imap_gtk.h * src/import.c * src/import.h * src/importldif.c * src/importldif.h * src/importmutt.c * src/importmutt.h * src/importpine.c * src/importpine.h * src/inc.c * src/inc.h * src/jpilot.c * src/jpilot.h * src/ldapctrl.c * src/ldapctrl.h * src/ldaplocate.c * src/ldaplocate.h * src/ldapquery.c * src/ldapquery.h * src/ldapserver.c * src/ldapserver.h * src/ldaputil.c * src/ldaputil.h * src/ldif.c * src/ldif.h * src/localfolder.c * src/localfolder.h * src/main.c * src/main.h * src/mainwindow.c * src/mainwindow.h * src/manual.c * src/manual.h * src/matcher.c * src/matcher.h * src/matcher_parser.h * src/matcher_parser_lex.l * src/matcher_parser_parse.y * src/mbox.c * src/mbox.h * src/message_search.c * src/message_search.h * src/messageview.c * src/messageview.h * src/mh.c * src/mh.h * src/mh_gtk.c * src/mh_gtk.h * src/mimeview.c * src/mimeview.h * src/msgcache.c * src/msgcache.h * src/mutt.c * src/mutt.h * src/news.c * src/news.h * src/news_gtk.c * src/news_gtk.h * src/noticeview.c * src/noticeview.h * src/partial_download.c * src/partial_download.h * src/pine.c * src/pine.h * src/pop.c * src/pop.h * src/prefs_account.c * src/prefs_account.h * src/prefs_actions.c * src/prefs_actions.h * src/prefs_common.c * src/prefs_common.h * src/prefs_compose_writing.c * src/prefs_compose_writing.h * src/prefs_customheader.c * src/prefs_customheader.h * src/prefs_display_header.c * src/prefs_display_header.h * src/prefs_ext_prog.c * src/prefs_ext_prog.h * src/prefs_filtering.c * src/prefs_filtering.h * src/prefs_filtering_action.c * src/prefs_filtering_action.h * src/prefs_folder_column.c * src/prefs_folder_column.h * src/prefs_folder_item.c * src/prefs_folder_item.h * src/prefs_fonts.c * src/prefs_fonts.h * src/prefs_gtk.c * src/prefs_gtk.h * src/prefs_image_viewer.c * src/prefs_image_viewer.h * src/prefs_matcher.c * src/prefs_matcher.h * src/prefs_message.c * src/prefs_message.h * src/prefs_msg_colors.c * src/prefs_msg_colors.h * src/prefs_other.c * src/prefs_other.h * src/prefs_quote.c * src/prefs_quote.h * src/prefs_receive.c * src/prefs_receive.h * src/prefs_send.c * src/prefs_send.h * src/prefs_spelling.c * src/prefs_spelling.h * src/prefs_summaries.c * src/prefs_summaries.h * src/prefs_summary_column.c * src/prefs_summary_column.h * src/prefs_template.c * src/prefs_template.h * src/prefs_themes.c * src/prefs_themes.h * src/prefs_toolbar.c * src/prefs_toolbar.h * src/prefs_wrapping.c * src/prefs_wrapping.h * src/privacy.c * src/privacy.h * src/procheader.c * src/procheader.h * src/procmime.c * src/procmime.h * src/procmsg.c * src/procmsg.h * src/quote_fmt.c * src/quote_fmt_parse.y * src/recv.c * src/recv.h * src/remotefolder.c * src/remotefolder.h * src/send_message.c * src/send_message.h * src/setup.c * src/setup.h * src/simple-gettext.c * src/sourcewindow.c * src/sourcewindow.h * src/ssl_manager.c * src/ssl_manager.h * src/statusbar.c * src/statusbar.h * src/stock_pixmap.c * src/stock_pixmap.h * src/summary_search.c * src/summary_search.h * src/summaryview.c * src/summaryview.h * src/syldap.c * src/syldap.h * src/textview.c * src/textview.h * src/toolbar.c * src/toolbar.h * src/undo.c * src/undo.h * src/unmime.c * src/unmime.h * src/vcard.c * src/vcard.h * src/wizard.c * src/wizard.h * src/common/base64.c * src/common/base64.h * src/common/defs.h * src/common/hooks.c * src/common/hooks.h * src/common/log.c * src/common/log.h * src/common/md5.c * src/common/md5.h * src/common/mgutils.c * src/common/mgutils.h * src/common/nntp.c * src/common/nntp.h * src/common/passcrypt.c * src/common/passcrypt.h.in * src/common/plugin.c * src/common/plugin.h * src/common/prefs.c * src/common/prefs.h * src/common/progressindicator.c * src/common/progressindicator.h * src/common/quoted-printable.c * src/common/quoted-printable.h * src/common/session.c * src/common/session.h * src/common/smtp.c * src/common/smtp.h * src/common/socket.c * src/common/socket.h * src/common/ssl.c * src/common/ssl.h * src/common/ssl_certificate.c * src/common/ssl_certificate.h * src/common/string_match.c * src/common/string_match.h * src/common/stringtable.c * src/common/sylpheed.c * src/common/sylpheed.h * src/common/template.c * src/common/template.h * src/common/timing.h * src/common/utils.c * src/common/utils.h * src/common/uuencode.c * src/common/uuencode.h * src/common/version.h.in * src/common/xml.c * src/common/xml.h * src/common/xmlprops.c * src/common/xmlprops.h * src/gtk/about.c * src/gtk/about.h * src/gtk/colorlabel.c * src/gtk/colorlabel.h * src/gtk/colorsel.c * src/gtk/colorsel.h * src/gtk/description_window.c * src/gtk/description_window.h * src/gtk/filesel.c * src/gtk/filesel.h * src/gtk/foldersort.c * src/gtk/foldersort.h * src/gtk/gtkutils.c * src/gtk/gtkutils.h * src/gtk/inputdialog.c * src/gtk/inputdialog.h * src/gtk/logwindow.c * src/gtk/logwindow.h * src/gtk/manage_window.c * src/gtk/manage_window.h * src/gtk/menu.c * src/gtk/menu.h * src/gtk/pluginwindow.c * src/gtk/pluginwindow.h * src/gtk/prefswindow.c * src/gtk/prefswindow.h * src/gtk/progressdialog.c * src/gtk/progressdialog.h * src/gtk/quicksearch.c * src/gtk/quicksearch.h * src/gtk/sslcertwindow.c * src/gtk/sslcertwindow.h * src/plugins/clamav/clamav_plugin.c * src/plugins/clamav/clamav_plugin.h * src/plugins/clamav/clamav_plugin_gtk.c * src/plugins/demo/demo.c * src/plugins/dillo_viewer/dillo_prefs.c * src/plugins/dillo_viewer/dillo_prefs.h * src/plugins/dillo_viewer/dillo_viewer.c * src/plugins/mathml_viewer/mathml_viewer.c * src/plugins/pgpcore/passphrase.c * src/plugins/pgpcore/passphrase.h * src/plugins/pgpcore/plugin.c * src/plugins/pgpcore/prefs_gpg.c * src/plugins/pgpcore/prefs_gpg.h * src/plugins/pgpcore/select-keys.c * src/plugins/pgpcore/select-keys.h * src/plugins/pgpcore/sgpgme.c * src/plugins/pgpcore/sgpgme.h * src/plugins/pgpinline/pgpinline.c * src/plugins/pgpinline/pgpinline.h * src/plugins/pgpinline/plugin.c * src/plugins/pgpmime/pgpmime.c * src/plugins/pgpmime/pgpmime.h * src/plugins/pgpmime/plugin.c * src/plugins/spamassassin/spamassassin.c * src/plugins/spamassassin/spamassassin.h * src/plugins/spamassassin/spamassassin_gtk.c * src/plugins/trayicon/trayicon.c * tools/OOo2sylpheed.pl * tools/acroread2sylpheed.pl * tools/asus_mailled.sh * tools/filter_conv.pl * tools/freshmeat_search.pl * tools/google_search.pl * tools/kmail2sylpheed.pl * tools/kmail2sylpheed_v2.pl * tools/maildir2sylpheed.pl * tools/multiwebsearch.pl * tools/newscache_clean.pl * tools/outlook2sylpheed.pl * tools/sylpheed-switcher * tools/update-po * tools/vcard2xml.py * tools/kdeservicemenu/sylpheed-kdeservicemenu.pl update FSF address
2005-09-21 20:22:51 +02:00
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
2001-04-19 14:21:46 +02:00
*/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include "defs.h"
#include <glib.h>
2005-02-10 [paul] 1.0.1cvs3.2 * AUTHORS * Makefile.am * autogen.sh * configure.ac * config/mkinstalldirs * intl/.cvsignore * intl/ChangeLog * intl/VERSION * intl/bindtextdom.c * intl/config.charset * intl/dcgettext.c * intl/dcigettext.c * intl/dcngettext.c * intl/dgettext.c * intl/dngettext.c * intl/eval-plural.h * intl/explodename.c * intl/finddomain.c * intl/gettext.c * intl/gettextP.h * intl/gmo.h * intl/hash-string.h * intl/intl-compat.c * intl/l10nflist.c * intl/libgnuintl.h.in * intl/loadinfo.h * intl/loadmsgcat.c * intl/localcharset.c * intl/localcharset.h * intl/locale.alias * intl/localealias.c * intl/localename.c * intl/log.c * intl/ngettext.c * intl/os2compat.c * intl/os2compat.h * intl/osdep.c * intl/plural-exp.c * intl/plural-exp.h * intl/plural.c * intl/plural.y * intl/ref-add.sin * intl/ref-del.sin * intl/relocatable.c * intl/relocatable.h * intl/textdomain.c * m4/Makefile.am * po/Makefile.in.in * src/Makefile.am * src/account.c * src/action.c * src/addr_compl.c * src/addressadd.c * src/addressbook.c * src/addrgather.c * src/addrindex.c * src/alertpanel.c * src/browseldap.c * src/codeconv.c * src/codeconv.h * src/compose.c * src/compose.h * src/crash.c * src/editaddress.c * src/editbook.c * src/editgroup.c * src/editjpilot.c * src/editldap.c * src/editldap_basedn.c * src/editvcard.c * src/exphtmldlg.c * src/expldifdlg.c * src/export.c * src/exporthtml.c * src/filtering.c * src/folder.c * src/folder_item_prefs.c * src/foldersel.c * src/folderview.c * src/grouplistdialog.c * src/headerview.c * src/imap.c * src/imap_gtk.c * src/import.c * src/importldif.c * src/importmutt.c * src/importpine.c * src/inc.c * src/ldif.c * src/main.c * src/mainwindow.c * src/matcher.c * src/mbox.c * src/message_search.c * src/messageview.c * src/mh.c * src/mh_gtk.c * src/mimeview.c * src/msgcache.c * src/news.c * src/news_gtk.c * src/noticeview.c * src/partial_download.c * src/pop.c * src/prefs_account.c * src/prefs_actions.c * src/prefs_common.c * src/prefs_customheader.c * src/prefs_display_header.c * src/prefs_ext_prog.c * src/prefs_filtering.c * src/prefs_filtering_action.c * src/prefs_folder_item.c * src/prefs_fonts.c * src/prefs_gtk.c * src/prefs_matcher.c * src/prefs_msg_colors.c * src/prefs_spelling.c * src/prefs_summary_column.c * src/prefs_template.c * src/prefs_themes.c * src/prefs_toolbar.c * src/prefs_wrapping.c * src/privacy.c * src/procheader.c * src/procmime.c * src/procmsg.c * src/quote_fmt.c * src/recv.c * src/send_message.c * src/setup.c * src/sourcewindow.c * src/ssl_manager.c * src/statusbar.c * src/summary_search.c * src/summaryview.c * src/textview.c * src/toolbar.c * src/wizard.c * src/common/nntp.c * src/common/plugin.c * src/common/smtp.c * src/common/ssl.c * src/common/ssl_certificate.c * src/common/string_match.c * src/common/sylpheed.c * src/common/template.c * src/common/utils.c * src/gtk/about.c * src/gtk/colorlabel.c * src/gtk/description_window.c * src/gtk/filesel.c * src/gtk/foldersort.c * src/gtk/gtkaspell.c * src/gtk/gtkutils.c * src/gtk/inputdialog.c * src/gtk/logwindow.c * src/gtk/menu.c * src/gtk/pluginwindow.c * src/gtk/prefswindow.c * src/gtk/progressdialog.c * src/gtk/quicksearch.c * src/gtk/sslcertwindow.c * src/plugins/clamav/clamav_plugin.c * src/plugins/clamav/clamav_plugin_gtk.c * src/plugins/demo/demo.c * src/plugins/dillo_viewer/dillo_prefs.c * src/plugins/dillo_viewer/dillo_viewer.c * src/plugins/image_viewer/plugin.c * src/plugins/image_viewer/viewer.c * src/plugins/image_viewer/viewerprefs.c * src/plugins/mathml_viewer/mathml_viewer.c * src/plugins/pgpmime/passphrase.c * src/plugins/pgpmime/plugin.c * src/plugins/pgpmime/prefs_gpg.c * src/plugins/pgpmime/select-keys.c * src/plugins/pgpmime/sgpgme.c * src/plugins/spamassassin/spamassassin.c * src/plugins/spamassassin/spamassassin_gtk.c * src/plugins/trayicon/trayicon.c sync with main (revision 104)
2005-02-10 13:06:07 +01:00
#include <glib/gi18n.h>
2001-04-19 14:21:46 +02:00
#include <gdk/gdkkeysyms.h>
#include <gtk/gtkwidget.h>
#include <gtk/gtkwindow.h>
#include <gtk/gtkvbox.h>
#include <gtk/gtktable.h>
#include <gtk/gtkoptionmenu.h>
2001-04-19 14:21:46 +02:00
#include <gtk/gtklabel.h>
#include <gtk/gtkentry.h>
#include <gtk/gtkhbox.h>
#include <gtk/gtkcheckbutton.h>
#include <gtk/gtkhbbox.h>
#include <gtk/gtkbutton.h>
#include <gtk/gtkctree.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "main.h"
#include "summary_search.h"
#include "summaryview.h"
#include "messageview.h"
2001-09-24 10:15:52 +02:00
#include "mainwindow.h"
#include "menu.h"
2001-04-19 14:21:46 +02:00
#include "utils.h"
#include "gtkutils.h"
#include "prefs_gtk.h"
2001-04-19 14:21:46 +02:00
#include "manage_window.h"
#include "alertpanel.h"
#include "matcher.h"
#include "matcher_parser.h"
#include "prefs_matcher.h"
2001-04-19 14:21:46 +02:00
static struct SummarySearchWindow {
GtkWidget *window;
GtkWidget *bool_optmenu;
GtkWidget *from_entry;
GtkWidget *to_entry;
GtkWidget *subject_entry;
GtkWidget *body_entry;
GtkWidget *adv_condition_entry;
GtkWidget *adv_condition_btn;
GtkWidget *adv_search_checkbtn;
GtkWidget *case_checkbtn;
GtkWidget *clear_btn;
GtkWidget *all_btn;
GtkWidget *prev_btn;
GtkWidget *next_btn;
GtkWidget *close_btn;
GtkWidget *stop_btn;
SummaryView *summaryview;
MatcherList *matcher_list;
gboolean is_searching;
} search_window;
static void summary_search_create (void);
static void summary_search_execute (gboolean backward,
gboolean search_all);
static void summary_search_clear (GtkButton *button,
gpointer data);
static void summary_search_prev_clicked (GtkButton *button,
gpointer data);
static void summary_search_next_clicked (GtkButton *button,
gpointer data);
static void summary_search_all_clicked (GtkButton *button,
gpointer data);
static void summary_search_stop_clicked (GtkButton *button,
gpointer data);
static void adv_condition_btn_clicked (GtkButton *button,
gpointer data);
static void from_activated (void);
static void to_activated (void);
static void subject_activated (void);
static void body_activated (void);
static void adv_condition_activated (void);
static gboolean key_pressed (GtkWidget *widget,
GdkEventKey *event,
gpointer data);
2001-04-19 14:21:46 +02:00
void summary_search(SummaryView *summaryview)
{
if (!search_window.window)
summary_search_create();
2001-09-30 13:07:34 +02:00
else
gtk_widget_hide(search_window.window);
search_window.summaryview = summaryview;
2001-04-19 14:21:46 +02:00
gtk_widget_grab_focus(search_window.next_btn);
gtk_widget_grab_focus(search_window.subject_entry);
gtk_widget_show(search_window.window);
2001-04-19 14:21:46 +02:00
}
static void summary_search_create(void)
2001-04-19 14:21:46 +02:00
{
GtkWidget *window;
2001-04-19 14:21:46 +02:00
GtkWidget *vbox1;
GtkWidget *bool_hbox;
GtkWidget *bool_optmenu;
GtkWidget *bool_menu;
GtkWidget *menuitem;
GtkWidget *clear_btn;
2001-04-19 14:21:46 +02:00
GtkWidget *table1;
GtkWidget *from_label;
GtkWidget *from_entry;
2001-04-19 14:21:46 +02:00
GtkWidget *to_label;
GtkWidget *to_entry;
2001-04-19 14:21:46 +02:00
GtkWidget *subject_label;
GtkWidget *subject_entry;
2001-09-20 13:53:09 +02:00
GtkWidget *body_label;
GtkWidget *body_entry;
GtkWidget *adv_condition_label;
GtkWidget *adv_condition_entry;
GtkWidget *adv_condition_btn;
2001-04-19 14:21:46 +02:00
GtkWidget *checkbtn_hbox;
GtkWidget *adv_search_checkbtn;
GtkWidget *case_checkbtn;
2001-04-19 14:21:46 +02:00
GtkWidget *confirm_area;
GtkWidget *all_btn;
GtkWidget *prev_btn;
GtkWidget *next_btn;
GtkWidget *close_btn;
GtkWidget *stop_btn;
gboolean is_searching = FALSE;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW (window), _("Search messages"));
gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, TRUE);
gtk_container_set_border_width(GTK_CONTAINER (window), 8);
2003-10-05 12:10:30 +02:00
g_signal_connect(G_OBJECT(window), "delete_event",
G_CALLBACK(gtk_widget_hide_on_delete), NULL);
g_signal_connect(G_OBJECT(window), "key_press_event",
G_CALLBACK(key_pressed), NULL);
2002-02-23 11:52:54 +01:00
MANAGE_WINDOW_SIGNALS_CONNECT(window);
2001-04-19 14:21:46 +02:00
vbox1 = gtk_vbox_new (FALSE, 0);
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);
clear_btn = gtk_button_new_from_stock(GTK_STOCK_CLEAR);
gtk_widget_show(clear_btn);
gtk_box_pack_end(GTK_BOX(bool_hbox), clear_btn, FALSE, FALSE, 0);
table1 = gtk_table_new (5, 3, FALSE);
2001-04-19 14:21:46 +02:00
gtk_widget_show (table1);
gtk_box_pack_start (GTK_BOX (vbox1), table1, TRUE, TRUE, 0);
gtk_container_set_border_width (GTK_CONTAINER (table1), 4);
gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
from_entry = gtk_entry_new ();
gtk_widget_show (from_entry);
gtk_table_attach (GTK_TABLE (table1), from_entry, 1, 3, 0, 1,
GTK_EXPAND|GTK_FILL, 0, 0, 0);
2003-10-05 12:10:30 +02:00
g_signal_connect(G_OBJECT(from_entry), "activate",
G_CALLBACK(from_activated), NULL);
2001-04-19 14:21:46 +02:00
to_entry = gtk_entry_new ();
gtk_widget_show (to_entry);
gtk_table_attach (GTK_TABLE (table1), to_entry, 1, 3, 1, 2,
GTK_EXPAND|GTK_FILL, 0, 0, 0);
2003-10-05 12:10:30 +02:00
g_signal_connect(G_OBJECT(to_entry), "activate",
G_CALLBACK(to_activated), NULL);
2001-04-19 14:21:46 +02:00
subject_entry = gtk_entry_new ();
gtk_widget_show (subject_entry);
gtk_table_attach (GTK_TABLE (table1), subject_entry, 1, 3, 2, 3,
GTK_EXPAND|GTK_FILL, 0, 0, 0);
2003-10-05 12:10:30 +02:00
g_signal_connect(G_OBJECT(subject_entry), "activate",
G_CALLBACK(subject_activated), NULL);
2001-04-19 14:21:46 +02:00
2001-09-20 13:53:09 +02:00
body_entry = gtk_entry_new ();
gtk_widget_show (body_entry);
gtk_table_attach (GTK_TABLE (table1), body_entry, 1, 3, 3, 4,
GTK_EXPAND|GTK_FILL, 0, 0, 0);
2003-10-05 12:10:30 +02:00
g_signal_connect(G_OBJECT(body_entry), "activate",
G_CALLBACK(body_activated), NULL);
2001-09-20 13:53:09 +02:00
adv_condition_entry = gtk_entry_new ();
gtk_widget_show (adv_condition_entry);
gtk_table_attach (GTK_TABLE (table1), adv_condition_entry, 1, 2, 4, 5,
GTK_EXPAND|GTK_FILL, 0, 0, 0);
g_signal_connect(G_OBJECT(adv_condition_entry), "activate",
G_CALLBACK(adv_condition_activated), NULL);
adv_condition_btn = gtk_button_new_with_label (_(" ... "));
gtk_widget_show (adv_condition_btn);
gtk_table_attach (GTK_TABLE (table1), adv_condition_btn, 2, 3, 4, 5,
GTK_FILL, 0, 0, 0);
g_signal_connect(G_OBJECT (adv_condition_btn), "clicked",
G_CALLBACK(adv_condition_btn_clicked), search_window.window);
2001-04-19 14:21:46 +02:00
from_label = gtk_label_new (_("From:"));
gtk_widget_show (from_label);
gtk_table_attach (GTK_TABLE (table1), from_label, 0, 1, 0, 1,
GTK_FILL, 0, 0, 0);
gtk_label_set_justify (GTK_LABEL (from_label), GTK_JUSTIFY_RIGHT);
gtk_misc_set_alignment (GTK_MISC (from_label), 1, 0.5);
to_label = gtk_label_new (_("To:"));
gtk_widget_show (to_label);
gtk_table_attach (GTK_TABLE (table1), to_label, 0, 1, 1, 2,
GTK_FILL, 0, 0, 0);
gtk_label_set_justify (GTK_LABEL (to_label), GTK_JUSTIFY_RIGHT);
gtk_misc_set_alignment (GTK_MISC (to_label), 1, 0.5);
subject_label = gtk_label_new (_("Subject:"));
gtk_widget_show (subject_label);
gtk_table_attach (GTK_TABLE (table1), subject_label, 0, 1, 2, 3,
GTK_FILL, 0, 0, 0);
gtk_label_set_justify (GTK_LABEL (subject_label), GTK_JUSTIFY_RIGHT);
gtk_misc_set_alignment (GTK_MISC (subject_label), 1, 0.5);
2001-09-24 10:15:52 +02:00
body_label = gtk_label_new (_("Body:"));
2001-09-20 13:53:09 +02:00
gtk_widget_show (body_label);
gtk_table_attach (GTK_TABLE (table1), body_label, 0, 1, 3, 4,
GTK_FILL, 0, 0, 0);
gtk_label_set_justify (GTK_LABEL (body_label), GTK_JUSTIFY_RIGHT);
gtk_misc_set_alignment (GTK_MISC (body_label), 1, 0.5);
adv_condition_label = gtk_label_new (_("Condition:"));
gtk_widget_show (adv_condition_label);
gtk_table_attach (GTK_TABLE (table1), adv_condition_label, 0, 1, 4, 5,
GTK_FILL, 0, 0, 0);
gtk_label_set_justify (GTK_LABEL (adv_condition_label), GTK_JUSTIFY_RIGHT);
gtk_misc_set_alignment (GTK_MISC (adv_condition_label), 1, 0.5);
2001-04-19 14:21:46 +02:00
checkbtn_hbox = gtk_hbox_new (FALSE, 8);
gtk_widget_show (checkbtn_hbox);
gtk_box_pack_start (GTK_BOX (vbox1), checkbtn_hbox, TRUE, TRUE, 0);
gtk_container_set_border_width (GTK_CONTAINER (checkbtn_hbox), 8);
case_checkbtn = gtk_check_button_new_with_label (_("Case sensitive"));
gtk_widget_show (case_checkbtn);
gtk_box_pack_start (GTK_BOX (checkbtn_hbox), case_checkbtn,
FALSE, FALSE, 0);
adv_search_checkbtn = gtk_check_button_new_with_label (_("Advanced search"));
gtk_widget_show (adv_search_checkbtn);
gtk_box_pack_start (GTK_BOX (checkbtn_hbox), adv_search_checkbtn,
FALSE, FALSE, 0);
confirm_area = gtk_hbutton_box_new();
2001-04-19 14:21:46 +02:00
gtk_widget_show (confirm_area);
gtk_button_box_set_layout(GTK_BUTTON_BOX(confirm_area),
GTK_BUTTONBOX_END);
gtk_box_set_spacing(GTK_BOX(confirm_area), 5);
all_btn = gtk_button_new_with_mnemonic(_("Find _all"));
GTK_WIDGET_SET_FLAGS(all_btn, GTK_CAN_DEFAULT);
gtk_box_pack_start(GTK_BOX(confirm_area), all_btn, TRUE, TRUE, 0);
gtk_widget_show(all_btn);
prev_btn = gtk_button_new_from_stock(GTK_STOCK_GO_BACK);
GTK_WIDGET_SET_FLAGS(prev_btn, GTK_CAN_DEFAULT);
gtk_box_pack_start(GTK_BOX(confirm_area), prev_btn, TRUE, TRUE, 0);
gtk_widget_show(prev_btn);
next_btn = gtk_button_new_from_stock(GTK_STOCK_GO_FORWARD);
GTK_WIDGET_SET_FLAGS(next_btn, GTK_CAN_DEFAULT);
gtk_box_pack_start(GTK_BOX(confirm_area), next_btn, TRUE, TRUE, 0);
gtk_widget_show(next_btn);
close_btn = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
GTK_WIDGET_SET_FLAGS(close_btn, GTK_CAN_DEFAULT);
gtk_box_pack_start(GTK_BOX(confirm_area), close_btn, TRUE, TRUE, 0);
gtk_widget_show(close_btn);
/* stop button hidden */
stop_btn = gtk_button_new_from_stock(GTK_STOCK_STOP);
GTK_WIDGET_SET_FLAGS(stop_btn, GTK_CAN_DEFAULT);
gtk_box_pack_start(GTK_BOX(confirm_area), stop_btn, TRUE, TRUE, 0);
2001-04-19 14:21:46 +02:00
gtk_box_pack_start (GTK_BOX (vbox1), confirm_area, FALSE, FALSE, 0);
gtk_widget_grab_default(next_btn);
2001-04-19 14:21:46 +02:00
SET_TOGGLE_SENSITIVITY_REVERSE(adv_search_checkbtn, bool_menu)
SET_TOGGLE_SENSITIVITY_REVERSE(adv_search_checkbtn, from_entry)
SET_TOGGLE_SENSITIVITY_REVERSE(adv_search_checkbtn, to_entry)
SET_TOGGLE_SENSITIVITY_REVERSE(adv_search_checkbtn, subject_entry)
SET_TOGGLE_SENSITIVITY_REVERSE(adv_search_checkbtn, body_entry)
SET_TOGGLE_SENSITIVITY(adv_search_checkbtn, adv_condition_label)
SET_TOGGLE_SENSITIVITY(adv_search_checkbtn, adv_condition_entry)
SET_TOGGLE_SENSITIVITY(adv_search_checkbtn, adv_condition_btn)
SET_TOGGLE_SENSITIVITY_REVERSE(adv_search_checkbtn, case_checkbtn)
2003-10-05 12:10:30 +02:00
g_signal_connect(G_OBJECT(clear_btn), "clicked",
G_CALLBACK(summary_search_clear), NULL);
g_signal_connect(G_OBJECT(all_btn), "clicked",
G_CALLBACK(summary_search_all_clicked), NULL);
g_signal_connect(G_OBJECT(prev_btn), "clicked",
G_CALLBACK(summary_search_prev_clicked), NULL);
g_signal_connect(G_OBJECT(next_btn), "clicked",
G_CALLBACK(summary_search_next_clicked), NULL);
2003-10-05 12:10:30 +02:00
g_signal_connect_closure
(G_OBJECT(close_btn), "clicked",
g_cclosure_new_swap(G_CALLBACK(gtk_widget_hide),
window, NULL), FALSE);
g_signal_connect(G_OBJECT(stop_btn), "clicked",
G_CALLBACK(summary_search_stop_clicked), NULL);
search_window.window = window;
search_window.bool_optmenu = bool_optmenu;
search_window.from_entry = from_entry;
search_window.to_entry = to_entry;
search_window.subject_entry = subject_entry;
search_window.body_entry = body_entry;
search_window.adv_condition_entry = adv_condition_entry;
search_window.adv_condition_btn = adv_condition_btn;
search_window.case_checkbtn = case_checkbtn;
search_window.adv_search_checkbtn = adv_search_checkbtn;
search_window.clear_btn = clear_btn;
search_window.all_btn = all_btn;
search_window.prev_btn = prev_btn;
search_window.next_btn = next_btn;
search_window.close_btn = close_btn;
search_window.stop_btn = stop_btn;
search_window.matcher_list = NULL;
search_window.is_searching = is_searching;
2001-04-19 14:21:46 +02:00
}
static void summary_search_execute(gboolean backward, gboolean search_all)
2001-04-19 14:21:46 +02:00
{
SummaryView *summaryview = search_window.summaryview;
2001-04-19 14:21:46 +02:00
GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
GtkCTreeNode *node;
MsgInfo *msginfo;
gboolean adv_search;
gboolean bool_and = FALSE;
gboolean case_sens = FALSE;
2001-04-19 14:21:46 +02:00
gboolean all_searched = FALSE;
gboolean matched = FALSE;
gboolean body_matched = FALSE;
const gchar *from_str = NULL, *to_str = NULL, *subject_str = NULL;
const gchar *body_str = NULL, *adv_condition = NULL;
StrFindFunc str_find_func = NULL;
2001-04-19 14:21:46 +02:00
2002-04-23 09:23:52 +02:00
if (summary_is_locked(summaryview)) return;
summary_lock(summaryview);
adv_search = gtk_toggle_button_get_active
(GTK_TOGGLE_BUTTON(search_window.adv_search_checkbtn));
if (adv_search) {
if (search_window.matcher_list != NULL) {
matcherlist_free(search_window.matcher_list);
search_window.matcher_list = NULL;
}
adv_condition = gtk_entry_get_text(GTK_ENTRY(search_window.adv_condition_entry));
if (adv_condition[0] != '\0') {
search_window.matcher_list = matcher_parser_get_cond((gchar*)adv_condition);
/* TODO: check for condition parsing error and show an error dialog */
} else {
/* TODO: warn if no search condition? (or make buttons enabled only when
at least one search condition has been set */
summary_unlock(summaryview);
return;
}
} else {
bool_and = GPOINTER_TO_INT
(menu_get_option_menu_active_user_data
(GTK_OPTION_MENU(search_window.bool_optmenu)));
case_sens = gtk_toggle_button_get_active
(GTK_TOGGLE_BUTTON(search_window.case_checkbtn));
if (case_sens)
str_find_func = str_find;
else
str_find_func = str_case_find;
from_str = gtk_entry_get_text(GTK_ENTRY(search_window.from_entry));
to_str = gtk_entry_get_text(GTK_ENTRY(search_window.to_entry));
subject_str = gtk_entry_get_text(GTK_ENTRY(search_window.subject_entry));
body_str = gtk_entry_get_text(GTK_ENTRY(search_window.body_entry));
if ( (from_str[0] == '\0') &&
(to_str[0] == '\0') &&
(subject_str[0] == '\0') &&
(body_str[0] == '\0')) {
/* TODO: warn if no search criteria? (or make buttons enabled only when
at least one search criteria has been set */
summary_unlock(summaryview);
return;
}
}
2001-04-19 14:21:46 +02:00
search_window.is_searching = TRUE;
main_window_cursor_wait(summaryview->mainwin);
gtk_widget_hide(search_window.close_btn);
gtk_widget_show(search_window.stop_btn);
2001-04-19 14:21:46 +02:00
if (search_all) {
gtk_clist_freeze(GTK_CLIST(ctree));
gtk_clist_unselect_all(GTK_CLIST(ctree));
node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
2004-01-12 22:28:31 +01:00
backward = FALSE;
2001-04-19 14:21:46 +02:00
} else if (!summaryview->selected) {
if (backward)
node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list_end);
else
node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
2002-04-23 09:23:52 +02:00
if (!node) {
search_window.is_searching = FALSE;
main_window_cursor_normal(summaryview->mainwin);
2002-04-23 09:23:52 +02:00
summary_unlock(summaryview);
return;
}
2001-04-19 14:21:46 +02:00
} else {
if (backward)
2003-02-05 10:23:13 +01:00
node = gtkut_ctree_node_prev
(ctree, summaryview->selected);
2001-04-19 14:21:46 +02:00
else
2003-02-05 10:23:13 +01:00
node = gtkut_ctree_node_next
(ctree, summaryview->selected);
2001-04-19 14:21:46 +02:00
}
for (; search_window.is_searching;) {
2001-04-19 14:21:46 +02:00
if (!node) {
gchar *str;
AlertValue val;
if (search_all) {
gtk_clist_thaw(GTK_CLIST(ctree));
break;
}
if (all_searched) {
alertpanel_full(_("Search failed"),
_("Search string not found."),
GTK_STOCK_CLOSE, NULL, NULL, FALSE,
NULL, ALERT_WARNING, G_ALERTDEFAULT);
2001-04-19 14:21:46 +02:00
break;
}
if (backward)
str = _("Beginning of list reached; continue from end?");
else
str = _("End of list reached; continue from beginning?");
val = alertpanel(_("Search finished"), str,
GTK_STOCK_NO, GTK_STOCK_YES, NULL);
if (G_ALERTALTERNATE == val) {
2001-04-19 14:21:46 +02:00
if (backward)
node = GTK_CTREE_NODE
(GTK_CLIST(ctree)->row_list_end);
else
node = GTK_CTREE_NODE
(GTK_CLIST(ctree)->row_list);
all_searched = TRUE;
manage_window_focus_in(search_window.window, NULL, NULL);
2001-04-19 14:21:46 +02:00
} else
break;
}
msginfo = gtk_ctree_node_get_row_data(ctree, node);
body_matched = FALSE;
if (adv_search) {
matched = matcherlist_match(search_window.matcher_list, msginfo);
} else {
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;
}
}
}
2001-09-20 13:53:09 +02:00
}
2001-04-19 14:21:46 +02:00
if (matched) {
2001-04-19 14:21:46 +02:00
if (search_all)
gtk_ctree_select(ctree, node);
else {
if (messageview_is_visible
(summaryview->messageview)) {
2002-05-07 09:28:36 +02:00
summary_unlock(summaryview);
2001-09-30 13:07:34 +02:00
summary_select_node
2002-02-16 15:01:09 +01:00
(summaryview, node, TRUE, TRUE);
2002-05-07 09:28:36 +02:00
summary_lock(summaryview);
2001-09-30 13:07:34 +02:00
if (body_matched) {
messageview_search_string
(summaryview->messageview,
body_str, case_sens);
}
} else {
summary_select_node
2002-02-16 15:01:09 +01:00
(summaryview, node, FALSE, TRUE);
2001-09-24 10:15:52 +02:00
}
2001-04-19 14:21:46 +02:00
break;
}
}
2003-02-05 10:23:13 +01:00
node = backward ? gtkut_ctree_node_prev(ctree, node)
: gtkut_ctree_node_next(ctree, node);
2001-09-24 10:15:52 +02:00
GTK_EVENTS_FLUSH();
}
2002-04-23 09:23:52 +02:00
search_window.is_searching = FALSE;
gtk_widget_hide(search_window.stop_btn);
gtk_widget_show(search_window.close_btn);
main_window_cursor_normal(summaryview->mainwin);
2002-04-23 09:23:52 +02:00
summary_unlock(summaryview);
2001-04-19 14:21:46 +02:00
}
static void summary_search_clear(GtkButton *button, gpointer data)
{
if (gtk_toggle_button_get_active
(GTK_TOGGLE_BUTTON(search_window.adv_search_checkbtn))) {
gtk_editable_delete_text(GTK_EDITABLE(search_window.adv_condition_entry),
0, -1);
} else {
gtk_editable_delete_text(GTK_EDITABLE(search_window.from_entry),
0, -1);
gtk_editable_delete_text(GTK_EDITABLE(search_window.to_entry),
0, -1);
gtk_editable_delete_text(GTK_EDITABLE(search_window.subject_entry),
0, -1);
gtk_editable_delete_text(GTK_EDITABLE(search_window.body_entry),
0, -1);
}
/* stop searching */
if (search_window.is_searching) {
search_window.is_searching = FALSE;
}
}
static void summary_search_prev_clicked(GtkButton *button, gpointer data)
{
summary_search_execute(TRUE, FALSE);
}
static void summary_search_next_clicked(GtkButton *button, gpointer data)
{
summary_search_execute(FALSE, FALSE);
}
static void summary_search_all_clicked(GtkButton *button, gpointer data)
{
summary_search_execute(FALSE, TRUE);
2001-04-19 14:21:46 +02:00
}
static void adv_condition_btn_done(MatcherList * matchers)
{
gchar *str;
g_return_if_fail(
mainwindow_get_mainwindow()->summaryview->quicksearch != NULL);
if (matchers == NULL)
return;
str = matcherlist_to_string(matchers);
if (str != NULL) {
gtk_entry_set_text(
GTK_ENTRY(search_window.adv_condition_entry), str);
g_free(str);
}
}
static void summary_search_stop_clicked(GtkButton *button, gpointer data)
{
search_window.is_searching = FALSE;
}
static void adv_condition_btn_clicked(GtkButton *button, gpointer data)
{
const gchar * cond_str;
MatcherList * matchers = NULL;
g_return_if_fail( search_window.window != NULL );
/* re-use it the current quicksearch value if it's a condition expression,
otherwise ignore it silently */
cond_str = gtk_entry_get_text(
GTK_ENTRY(search_window.adv_condition_entry));
if (*cond_str != '\0') {
matchers = matcher_parser_get_cond((gchar*)cond_str);
}
prefs_matcher_open(matchers, adv_condition_btn_done);
if (matchers != NULL)
matcherlist_free(matchers);
};
2001-04-19 14:21:46 +02:00
static void from_activated(void)
{
gtk_widget_grab_focus(search_window.to_entry);
2001-04-19 14:21:46 +02:00
}
static void to_activated(void)
{
gtk_widget_grab_focus(search_window.subject_entry);
2001-04-19 14:21:46 +02:00
}
static void subject_activated(void)
{
gtk_button_clicked(GTK_BUTTON(search_window.next_btn));
2001-04-19 14:21:46 +02:00
}
2001-09-20 13:53:09 +02:00
static void body_activated(void)
{
gtk_button_clicked(GTK_BUTTON(search_window.next_btn));
2004-01-12 22:28:31 +01:00
}
static void adv_condition_activated(void)
{
gtk_button_clicked(GTK_BUTTON(search_window.next_btn));
}
static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event,
gpointer data)
2001-04-19 14:21:46 +02:00
{
if (event && event->keyval == GDK_Escape) {
/* ESC key will:
- stop a running search
- close the search window if no search is running
*/
if (!search_window.is_searching) {
gtk_widget_hide(search_window.window);
} else {
search_window.is_searching = FALSE;
}
}
2003-10-05 12:10:30 +02:00
return FALSE;
2001-04-19 14:21:46 +02:00
}