50
52
QuickSearchExecuteCallback callback;
51
53
gpointer callback_data;
55
FolderItem *root_folder_item;
55
58
void quicksearch_set_running(QuickSearch *quicksearch, gboolean run);
59
static void quicksearch_set_active(QuickSearch *quicksearch, gboolean active);
60
static void quicksearch_reset_folder_items(QuickSearch *quicksearch, FolderItem *folder_item);
57
62
static void prepare_matcher(QuickSearch *quicksearch)
87
92
quicksearch->search_string = g_strdup(search_string);
90
quicksearch->active = TRUE;
95
quicksearch_set_active(quicksearch, TRUE);
93
98
static gint searchbar_pressed(GtkWidget *widget, GdkEventKey *event,
145
150
if (quicksearch->callback != NULL)
146
151
quicksearch->callback(quicksearch, quicksearch->callback_data);
147
152
quicksearch_set_running(quicksearch, FALSE);
156
static gboolean searchtype_recursive_changed(GtkMenuItem *widget, gpointer data)
158
QuickSearch *quicksearch = (QuickSearch *)data;
159
gboolean checked = GTK_CHECK_MENU_ITEM(widget)->active;
161
prefs_common.summary_quicksearch_recurse = checked;
163
/* reselect the search type */
164
gtk_option_menu_set_history(GTK_OPTION_MENU(quicksearch->search_type_opt),
165
prefs_common.summary_quicksearch_type);
167
prepare_matcher(quicksearch);
169
quicksearch_set_running(quicksearch, TRUE);
170
if (quicksearch->callback != NULL)
171
quicksearch->callback(quicksearch, quicksearch->callback_data);
172
quicksearch_set_running(quicksearch, FALSE);
272
298
GTK_SIGNAL_FUNC(searchtype_changed),
301
MENUITEM_ADD (search_type, menuitem, NULL, NULL);
303
menuitem = gtk_check_menu_item_new_with_label(_("Recursive"));
304
gtk_widget_show(menuitem);
305
gtk_menu_shell_append(GTK_MENU_SHELL(search_type), menuitem);
307
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem),
308
prefs_common.summary_quicksearch_recurse);
310
gtk_signal_connect(GTK_OBJECT(menuitem), "activate",
311
GTK_SIGNAL_FUNC(searchtype_recursive_changed),
275
314
gtk_option_menu_set_menu(GTK_OPTION_MENU(search_type_opt), search_type);
277
316
gtk_option_menu_set_history(GTK_OPTION_MENU(search_type_opt), prefs_common.summary_quicksearch_type);
362
401
void quicksearch_hide(QuickSearch *quicksearch)
364
quicksearch->active = FALSE;
403
quicksearch_set_active(quicksearch, FALSE);
365
404
gtk_widget_hide(quicksearch->hbox_search);
387
426
return quicksearch->active;
429
static void quicksearch_set_active(QuickSearch *quicksearch, gboolean active)
431
quicksearch->active = active;
433
quicksearch_reset_cur_folder_item(quicksearch);
390
437
void quicksearch_set_execute_callback(QuickSearch *quicksearch,
391
438
QuickSearchExecuteCallback callback,
422
if (prefs_common.summary_quicksearch_type != QUICK_SEARCH_EXTENDED && quicksearch->search_string &&
469
if (prefs_common.summary_quicksearch_type != QUICK_SEARCH_EXTENDED &&
470
quicksearch->search_string &&
423
471
searched_header && strcasestr(searched_header, quicksearch->search_string) != NULL)
425
else if ((quicksearch->matcher_list != NULL) && matcherlist_match(quicksearch->matcher_list, msginfo))
473
else if ((quicksearch->matcher_list != NULL) &&
474
matcherlist_match(quicksearch->matcher_list, msginfo))
616
665
return quicksearch->running;
669
static gboolean quicksearch_match_subfolder(QuickSearch *quicksearch,
672
GSList *msglist = folder_item_get_msg_list(src);
674
gboolean result = FALSE;
676
for (cur = msglist; cur != NULL; cur = cur->next) {
677
MsgInfo *msg = (MsgInfo *)cur->data;
678
if (quicksearch_match(quicksearch, msg)) {
679
procmsg_msginfo_free(msg);
683
procmsg_msginfo_free(msg);
686
g_slist_free(msglist);
690
void quicksearch_search_subfolders(QuickSearch *quicksearch,
691
FolderView *folderview,
692
FolderItem *folder_item)
694
FolderItem *cur = NULL;
695
GNode *node = folder_item->node->children;
697
if (!prefs_common.summary_quicksearch_recurse)
700
for (; node != NULL; node = node->next) {
701
cur = FOLDER_ITEM(node->data);
702
if (quicksearch_match_subfolder(quicksearch, cur)) {
703
folderview_update_search_icon(cur, TRUE);
705
folderview_update_search_icon(cur, FALSE);
707
if (cur->node->children)
708
quicksearch_search_subfolders(quicksearch,
712
quicksearch->root_folder_item = folder_item;
715
static void quicksearch_reset_folder_items(QuickSearch *quicksearch,
716
FolderItem *folder_item)
718
FolderItem *cur = NULL;
719
GNode *node = folder_item->node->children;
721
for (; node != NULL; node = node->next) {
722
cur = FOLDER_ITEM(node->data);
723
folderview_update_search_icon(cur, FALSE);
724
if (cur->node->children)
725
quicksearch_reset_folder_items(quicksearch,
730
void quicksearch_reset_cur_folder_item(QuickSearch *quicksearch)
732
if (quicksearch->root_folder_item)
733
quicksearch_reset_folder_items(quicksearch,
734
quicksearch->root_folder_item);
736
quicksearch->root_folder_item = NULL;