aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2006-01-25 08:25:41 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2006-01-25 08:25:41 +0000
commit88fe3b7e37244b83076c243741e2c71338d37360 (patch)
tree375da95ed456ed7e4487222905047e9b0de07922 /src
parent34a24148d4315d15e092760c983ff45115a32e00 (diff)
exclude trash on recursive search.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@928 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'src')
-rw-r--r--src/folderview.c32
-rw-r--r--src/prefs_search_folder.c28
-rw-r--r--src/prefs_search_folder.h2
-rw-r--r--src/summary_search.c15
-rw-r--r--src/summary_search.h2
5 files changed, 65 insertions, 14 deletions
diff --git a/src/folderview.c b/src/folderview.c
index 5a903324..2ede96d2 100644
--- a/src/folderview.c
+++ b/src/folderview.c
@@ -2756,12 +2756,32 @@ static void folderview_search_cb(FolderView *folderview, guint action,
FolderItem *item;
item = folderview_get_selected_item(folderview);
- if (item) {
- if (item->stype == F_VIRTUAL)
- prefs_search_folder_open(item);
- else
- summary_search(item);
- }
+ if (!item)
+ return;
+
+ if (item->stype == F_VIRTUAL) {
+ GtkTreePath *sel_path, *open_path;
+
+ sel_path = gtk_tree_row_reference_get_path
+ (folderview->selected);
+ open_path = gtk_tree_row_reference_get_path(folderview->opened);
+
+ if (prefs_search_folder_open(item)) {
+ if (sel_path && open_path &&
+ gtk_tree_path_compare(open_path, sel_path) == 0) {
+ GtkTreeRowReference *row;
+ row = gtk_tree_row_reference_copy(folderview->opened);
+ folderview_unselect(folderview);
+ summary_clear_all(folderview->summaryview);
+ folderview_select_row_ref(folderview, row);
+ gtk_tree_row_reference_free(row);
+ }
+ }
+
+ gtk_tree_path_free(open_path);
+ gtk_tree_path_free(sel_path);
+ } else
+ summary_search(item);
}
static void folderview_property_cb(FolderView *folderview, guint action,
diff --git a/src/prefs_search_folder.c b/src/prefs_search_folder.c
index c44309c4..a8ad0cda 100644
--- a/src/prefs_search_folder.c
+++ b/src/prefs_search_folder.c
@@ -75,10 +75,14 @@ struct _PrefsSearchFolderDialog
GtkWidget *subfolder_checkbtn;
GtkWidget *case_checkbtn;
+
+ gboolean finished;
+ gboolean updated;
};
static PrefsSearchFolderDialog *prefs_search_folder_create(FolderItem *item);
static void prefs_search_folder_set_dialog(PrefsSearchFolderDialog *dialog);
+static void prefs_search_folder_destroy (PrefsSearchFolderDialog *dialog);
static gint prefs_search_folder_delete_cb(GtkWidget *widget,
GdkEventAny *event,
@@ -100,16 +104,25 @@ static void prefs_search_folder_cancel_cb(GtkWidget *widget,
PrefsSearchFolderDialog *dialog);
-void prefs_search_folder_open(FolderItem *item)
+gboolean prefs_search_folder_open(FolderItem *item)
{
PrefsSearchFolderDialog *dialog;
+ gboolean updated;
- g_return_if_fail(item != NULL);
+ g_return_val_if_fail(item != NULL, FALSE);
dialog = prefs_search_folder_create(item);
manage_window_set_transient(GTK_WINDOW(dialog->dialog->window));
prefs_search_folder_set_dialog(dialog);
gtk_widget_show(dialog->dialog->window);
+
+ while (dialog->finished == FALSE)
+ gtk_main_iteration();
+
+ updated = dialog->updated;
+ prefs_search_folder_destroy(dialog);
+
+ return updated;
}
static PrefsSearchFolderDialog *prefs_search_folder_create(FolderItem *item)
@@ -265,6 +278,9 @@ static PrefsSearchFolderDialog *prefs_search_folder_create(FolderItem *item)
new_dialog->subfolder_checkbtn = subfolder_checkbtn;
new_dialog->case_checkbtn = case_checkbtn;
+ new_dialog->finished = FALSE;
+ new_dialog->updated = FALSE;
+
return new_dialog;
}
@@ -335,7 +351,7 @@ static void prefs_search_folder_destroy(PrefsSearchFolderDialog *dialog)
static gint prefs_search_folder_delete_cb(GtkWidget *widget, GdkEventAny *event,
PrefsSearchFolderDialog *dialog)
{
- prefs_search_folder_destroy(dialog);
+ dialog->finished = TRUE;
return TRUE;
}
@@ -371,7 +387,7 @@ static void prefs_search_folder_ok_cb(GtkWidget *widget,
PrefsSearchFolderDialog *dialog)
{
prefs_search_folder_apply_cb(widget, dialog);
- prefs_search_folder_destroy(dialog);
+ dialog->finished = TRUE;
}
static void prefs_search_folder_apply_cb(GtkWidget *widget,
@@ -426,10 +442,12 @@ static void prefs_search_folder_apply_cb(GtkWidget *widget,
g_free(path);
filter_rule_free(rule);
+
+ dialog->updated = TRUE;
}
static void prefs_search_folder_cancel_cb(GtkWidget *widget,
PrefsSearchFolderDialog *dialog)
{
- prefs_search_folder_destroy(dialog);
+ dialog->finished = TRUE;
}
diff --git a/src/prefs_search_folder.h b/src/prefs_search_folder.h
index 2592888b..60f51791 100644
--- a/src/prefs_search_folder.h
+++ b/src/prefs_search_folder.h
@@ -24,6 +24,6 @@
#include "folder.h"
-void prefs_search_folder_open (FolderItem *item);
+gboolean prefs_search_folder_open (FolderItem *item);
#endif /* __PREFS_SEARCH_FOLDER_H__ */
diff --git a/src/summary_search.c b/src/summary_search.c
index c21407c5..c2cc33aa 100644
--- a/src/summary_search.c
+++ b/src/summary_search.c
@@ -1,6 +1,6 @@
/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2005 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2006 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
@@ -103,6 +103,8 @@ static struct SummarySearchWindow {
FilterRule *rule;
gboolean requires_full_headers;
+ gboolean exclude_trash;
+
gboolean on_search;
gboolean cancelled;
} search_window;
@@ -481,6 +483,14 @@ static void summary_search_query(void)
search_window.requires_full_headers =
filter_rule_requires_full_headers(search_window.rule);
+ if (search_window.rule->recursive) {
+ if (item->stype == F_TRASH)
+ search_window.exclude_trash = FALSE;
+ else
+ search_window.exclude_trash = TRUE;
+ } else
+ search_window.exclude_trash = FALSE;
+
search_window.cancelled = FALSE;
gtk_button_set_label(GTK_BUTTON(search_window.search_btn),
@@ -496,6 +506,7 @@ static void summary_search_query(void)
filter_rule_free(search_window.rule);
search_window.rule = NULL;
search_window.requires_full_headers = FALSE;
+ search_window.exclude_trash = FALSE;
gtk_button_set_label(GTK_BUTTON(search_window.search_btn),
GTK_STOCK_FIND);
@@ -600,6 +611,8 @@ static gboolean summary_search_recursive_func(GNode *node, gpointer data)
if (!item->path)
return FALSE;
+ if (search_window.exclude_trash && item->stype == F_TRASH)
+ return FALSE;
summary_search_folder(item);
diff --git a/src/summary_search.h b/src/summary_search.h
index 5f1eacf5..cd95e376 100644
--- a/src/summary_search.h
+++ b/src/summary_search.h
@@ -1,6 +1,6 @@
/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2005 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2006 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