2012-11-18 [colin] 3.9.0cvs6-stable
[claws.git] / src / gtk / quicksearch.c
index 783041e16b5b9872a792bfd145cb1f6e225bd178..527ea53e2259bc3c506ae6af0819957f06f4cbca 100644 (file)
@@ -88,6 +88,7 @@ struct _QuickSearch
 
        AdvancedSearch                  *asearch;
        gboolean                         want_reexec;
+       gboolean                         want_history;
 };
 
 void quicksearch_set_on_progress_cb(QuickSearch* search,
@@ -99,6 +100,40 @@ void quicksearch_set_on_progress_cb(QuickSearch* search,
 static void quicksearch_set_running(QuickSearch *quicksearch, gboolean run);
 static void quicksearch_set_matchstring(QuickSearch *quicksearch, const gchar *matchstring);
 static void quicksearch_set_active(QuickSearch *quicksearch, gboolean active);
+static void quicksearch_set_popdown_strings(QuickSearch *quicksearch);
+
+static void quicksearch_add_to_history(QuickSearch* quicksearch)
+{
+       gchar* search_string = quicksearch->request.matchstring;
+
+       /* add to history, for extended search add only correct matching rules */
+       if (quicksearch->want_history && !quicksearch->in_typing && search_string && strlen(search_string) != 0) {
+               switch (prefs_common.summary_quicksearch_type) {
+                       case ADVANCED_SEARCH_EXTENDED:
+                               if (advsearch_has_proper_predicate(quicksearch->asearch)) {
+                                       quicksearch->extended_search_strings =
+                                               add_history(quicksearch->extended_search_strings,
+                                                               g_strdup(search_string));
+                                       prefs_common.summary_quicksearch_history =
+                                               add_history(prefs_common.summary_quicksearch_history,
+                                                               g_strdup(search_string));
+                               }
+                               break;
+                       default:
+                               quicksearch->normal_search_strings =
+                                       add_history(quicksearch->normal_search_strings,
+                                                       g_strdup(search_string));               
+                               prefs_common.summary_quicksearch_history =
+                                       add_history(prefs_common.summary_quicksearch_history,
+                                                       g_strdup(search_string));
+                               break;
+               }
+
+               quicksearch_set_popdown_strings(quicksearch);
+       }
+
+       quicksearch->want_history = FALSE;
+}
 
 static void quicksearch_invoke_execute(QuickSearch *quicksearch, gboolean run_only_if_fast)
 {
@@ -109,13 +144,16 @@ static void quicksearch_invoke_execute(QuickSearch *quicksearch, gboolean run_on
        }
 
        do {
-               gboolean active = g_strcmp0(quicksearch->request.matchstring, "");
+               gboolean active = quicksearch->request.matchstring != NULL 
+                                  && g_strcmp0(quicksearch->request.matchstring, "");
                advsearch_set(quicksearch->asearch, quicksearch->request.type,
                                quicksearch->request.matchstring);
 
                if (run_only_if_fast && !advsearch_is_fast(quicksearch->asearch))
                        return;
 
+               quicksearch_add_to_history(quicksearch);
+
                quicksearch_set_active(quicksearch, active);
 
                quicksearch->want_reexec = FALSE;
@@ -129,7 +167,10 @@ static void quicksearch_invoke_execute(QuickSearch *quicksearch, gboolean run_on
 gboolean quicksearch_run_on_folder(QuickSearch* quicksearch, FolderItem *folderItem, MsgInfoList **result)
 {
        if (quicksearch_has_sat_predicate(quicksearch)) {
-               gboolean searchres = advsearch_search_msgs_in_folders(quicksearch->asearch, result, folderItem, FALSE);
+               gboolean searchres;
+               main_window_cursor_wait(mainwindow_get_mainwindow());
+               searchres = advsearch_search_msgs_in_folders(quicksearch->asearch, result, folderItem, FALSE);
+               main_window_cursor_normal(mainwindow_get_mainwindow());
                if (quicksearch->want_reexec) {
                        advsearch_set(quicksearch->asearch, quicksearch->request.type, "");
                }
@@ -218,36 +259,10 @@ static void searchbar_run(QuickSearch *quicksearch, gboolean run_only_if_fast)
 {
        gchar *search_string = quicksearch_get_text(quicksearch);
        quicksearch_set_matchstring(quicksearch, search_string);
-
-       /* add to history, for extended search add only correct matching rules */
-       if (!quicksearch->in_typing && search_string && strlen(search_string) != 0) {
-               switch (prefs_common.summary_quicksearch_type) {
-                       case ADVANCED_SEARCH_EXTENDED:
-                               if (advsearch_has_proper_predicate(quicksearch->asearch)) {
-                                       quicksearch->extended_search_strings =
-                                               add_history(quicksearch->extended_search_strings,
-                                                               g_strdup(search_string));
-                                       prefs_common.summary_quicksearch_history =
-                                               add_history(prefs_common.summary_quicksearch_history,
-                                                               g_strdup(search_string));
-                               }
-                               break;
-                       default:
-                               quicksearch->normal_search_strings =
-                                       add_history(quicksearch->normal_search_strings,
-                                                       g_strdup(search_string));               
-                               prefs_common.summary_quicksearch_history =
-                                       add_history(prefs_common.summary_quicksearch_history,
-                                                       g_strdup(search_string));
-                               break;
-               }
-
-               quicksearch_set_popdown_strings(quicksearch);
-
-       }
-
        g_free(search_string);
 
+       quicksearch->want_history = TRUE;
+
        quicksearch_invoke_execute(quicksearch, run_only_if_fast);
 }
 
@@ -416,8 +431,8 @@ static gboolean searchtype_autorun_changed(GtkMenuItem *widget, gpointer data)
  */
 static gchar *search_descr_strings[] = {
        "a",     N_("all messages"),
-       "ag #",  N_("messages whose age is greater than #"),
-       "al #",  N_("messages whose age is less than #"),
+       "ag #",  N_("messages whose age is greater than # days"),
+       "al #",  N_("messages whose age is less than # days"),
        "b S",   N_("messages which contain S in the message body"),
        "B S",   N_("messages which contain S in the whole message"),
        "c S",   N_("messages carbon-copied to S"),
@@ -440,12 +455,12 @@ static gchar *search_descr_strings[] = {
        "r",     N_("messages which have been replied to"),
        "R",     N_("read messages"),
        "s S",   N_("messages which contain S in subject"),
-       "se #",  N_("messages whose score is equal to #"),
-       "sg #",  N_("messages whose score is greater than #"),
-       "sl #",  N_("messages whose score is lower than #"),
-       "Se #",  N_("messages whose size is equal to #"),
-       "Sg #",  N_("messages whose size is greater than #"),
-       "Ss #",  N_("messages whose size is smaller than #"),
+       "se #",  N_("messages whose score is equal to # points"),
+       "sg #",  N_("messages whose score is greater than # points"),
+       "sl #",  N_("messages whose score is lower than # points"),
+       "Se #",  N_("messages whose size is equal to # bytes"),
+       "Sg #",  N_("messages whose size is greater than # bytes"),
+       "Ss #",  N_("messages whose size is smaller than # bytes"),
        "t S",   N_("messages which have been sent to S"),
        "tg S",  N_("messages which tags contain S"),
        "tagged",N_("messages which have tag(s)"),
@@ -468,6 +483,7 @@ static gchar *search_descr_strings[] = {
 static DescriptionWindow search_descr = {
        NULL,
        NULL,
+       FALSE,
        2,
        N_("Extended Search"),
        N_("Extended Search allows the user to define criteria that messages must "
@@ -570,7 +586,7 @@ static void quicksearch_set_button(GtkButton *button, const gchar *icon, const g
 
 static void quicksearch_error(gpointer data)
 {
-       alertpanel_error(_("Something went wrong during search. Please check you logs."));
+       alertpanel_error(_("Something went wrong during search. Please check your logs."));
 }
 
 QuickSearch *quicksearch_new()