aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mail/ChangeLog25
-rw-r--r--mail/folder-browser.c506
-rw-r--r--mail/folder-browser.h5
-rw-r--r--mail/mail-ops.c4
4 files changed, 263 insertions, 277 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index 080a22efe8..b4169c829b 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,9 +1,28 @@
+2000-11-07 Jeffrey Stedfast <fejj@helixcode.com>
+
+ * folder-browser.c (search_full_clicked): Updated to use the
+ ESearchBar object rather than the previously used search widgets.
+ (search_full): Same.
+ (search_save): Same. Also use enums to make it a little easier to
+ read now that we have to have enums anyway.
+ (folder_browser_search_menu_activated): New ESearchBar menu
+ callback.
+ (folder_browser_search_query_changed): New ESearchBar query
+ callback. Replaces search_set()
+ (folder_browser_clear_search): Updated to use the ESearchBar
+ object rather than the previously used search widgets.
+ (folder_browser_gui_init): Don't hand construct a search widget,
+ use the new ESearchBar convenience widget.
+
+ * mail-ops.c (cleanup_load_folder): Updated to reflect changes to
+ FolderBrowser.
+
2000-11-07 Jesse Pavel <jpavel@helixcode.com>
- * mail-display.c: (pixmap_press): modified some of the EPopupMenu
+ * mail-display.c (pixmap_press): modified some of the EPopupMenu
structures to account for differences in the popup menu API (as
- informed by Jeff.
- (on_object_requested): passed the user's default email address
+ informed by Jeff.
+ (on_object_requested): passed the user's default email address
to the iTip control.
2000-11-07 Ettore Perazzoli <ettore@helixcode.com>
diff --git a/mail/folder-browser.c b/mail/folder-browser.c
index e684953086..bf1cd4689b 100644
--- a/mail/folder-browser.c
+++ b/mail/folder-browser.c
@@ -38,6 +38,8 @@
#include <gal/widgets/e-popup-menu.h>
+#define d(x) x
+
#define PARENT_TYPE (gtk_table_get_type ())
static void fb_resize_cb (GtkWidget *w, GtkAllocation *a);
@@ -57,30 +59,30 @@ folder_browser_destroy (GtkObject *object)
{
FolderBrowser *folder_browser;
CORBA_Environment ev;
-
+
folder_browser = FOLDER_BROWSER (object);
-
+
CORBA_exception_init (&ev);
if (folder_browser->search_full)
- gtk_object_unref((GtkObject *)folder_browser->search_full);
+ gtk_object_unref (GTK_OBJECT (folder_browser->search_full));
if (folder_browser->shell != CORBA_OBJECT_NIL)
CORBA_Object_release (folder_browser->shell, &ev);
- g_free (folder_browser->uri);
-
+ g_free (folder_browser->uri);
+
if (folder_browser->folder) {
mail_do_sync_folder (folder_browser->folder);
camel_object_unref (CAMEL_OBJECT (folder_browser->folder));
}
-
+
if (folder_browser->message_list)
bonobo_object_unref (BONOBO_OBJECT (folder_browser->message_list));
-
+
if (folder_browser->mail_display)
gtk_widget_destroy (GTK_WIDGET (folder_browser->mail_display));
-
+
if (folder_browser->filter_context)
gtk_object_unref (GTK_OBJECT (folder_browser->filter_context));
@@ -88,9 +90,9 @@ folder_browser_destroy (GtkObject *object)
g_slist_foreach (folder_browser->filter_menu_paths, oc_destroy, NULL);
g_slist_free (folder_browser->filter_menu_paths);
}
-
+
CORBA_exception_free (&ev);
-
+
folder_browser_parent_class->destroy (object);
}
@@ -98,7 +100,7 @@ static void
folder_browser_class_init (GtkObjectClass *object_class)
{
object_class->destroy = folder_browser_destroy;
-
+
folder_browser_parent_class = gtk_type_class (PARENT_TYPE);
}
@@ -123,7 +125,8 @@ folder_browser_class_init (GtkObjectClass *object_class)
#define EQUAL(a,b) (strcmp (a,b) == 0)
-gboolean folder_browser_set_uri (FolderBrowser *folder_browser, const char *uri)
+gboolean
+folder_browser_set_uri (FolderBrowser *folder_browser, const char *uri)
{
if (*uri)
mail_do_load_folder (folder_browser, uri);
@@ -139,20 +142,44 @@ folder_browser_set_message_preview (FolderBrowser *folder_browser, gboolean show
g_warning ("FIXME: implement me");
}
-static char * search_options[] = {
- N_("Body or subject contains"),
- N_("Body contains"),
- N_("Subject contains"),
- N_("Body does not contain"),
- N_("Subject does not contain"),
- N_("Custom search"),
- NULL
+enum {
+ ESB_SHOW_ALL,
+ ESB_ADVANCED,
+ ESB_SAVE,
+};
+
+static ESearchBarItem folder_browser_search_menu_items[] = {
+ { N_("Show All"), ESB_SHOW_ALL },
+ { NULL, 0 },
+ { N_("Advanced..."), ESB_ADVANCED },
+ { NULL, 0 },
+ { N_("Save Search"), ESB_SAVE },
+ { NULL, -1 }
+};
+
+enum {
+ ESB_BODY_SUBJECT_CONTAINS,
+ ESB_BODY_CONTAINS,
+ ESB_SUBJECT_CONTAINS,
+ ESB_BODY_DOES_NOT_CONTAIN,
+ ESB_SUBJECT_DOES_NOT_CONTAIN,
+ ESB_CUSTOM_SEARCH,
+};
+
+static ESearchBarItem folder_browser_search_option_items[] = {
+ { N_("Body or subject contains"), ESB_BODY_SUBJECT_CONTAINS },
+ { N_("Body contains"), ESB_BODY_CONTAINS },
+ { N_("Subject contains"), ESB_SUBJECT_CONTAINS },
+ { N_("Body does not contain"), ESB_BODY_DOES_NOT_CONTAIN },
+ { N_("Subject does not contain"), ESB_SUBJECT_DOES_NOT_CONTAIN },
+ { N_("Custom search"), ESB_CUSTOM_SEARCH },
+ { NULL, -1 }
};
/* NOTE: If this is changed, then change the search_save() function to match! */
/* %s is replaced by the whole search string in quotes ...
possibly could split the search string into words as well ? */
-static char * search_string[] = {
+static char *search_string[] = {
"(or (body-contains %s) (match-all (header-contains \"Subject\" %s)))",
"(body-contains %s)",
"(match-all (header-contains \"Subject\" %s)",
@@ -160,240 +187,203 @@ static char * search_string[] = {
"(match-all (not (header-contains \"Subject\" %s)))",
"%s",
};
-#define CUSTOM_SEARCH_ID (5)
static void
-search_full_clicked(MailSearchDialogue *msd, guint button, FolderBrowser *fb)
+search_full_clicked (MailSearchDialogue *msd, guint button, FolderBrowser *fb)
{
char *query;
-
+
switch (button) {
case 0: /* 'ok' */
case 1: /* 'search' */
- query = mail_search_dialogue_get_query(msd);
- message_list_set_search(fb->message_list, query);
- g_free(query);
+ query = mail_search_dialogue_get_query (msd);
+ message_list_set_search (fb->message_list, query);
+ g_free (query);
+
/* save the search as well */
if (fb->search_full)
- gtk_object_unref((GtkObject *)fb->search_full);
+ gtk_object_unref (GTK_OBJECT (fb->search_full));
+
fb->search_full = msd->rule;
- gtk_object_ref((GtkObject *)fb->search_full);
+
+ gtk_object_ref (GTK_OBJECT (fb->search_full));
if (button == 0)
- gnome_dialog_close((GnomeDialog *)msd);
+ gnome_dialog_close (GNOME_DIALOG (msd));
break;
case 2: /* 'cancel' */
- gnome_dialog_close((GnomeDialog *)msd);
+ gnome_dialog_close (GNOME_DIALOG (msd));
case -1: /* dialogue closed */
- message_list_set_search(fb->message_list, 0);
+ message_list_set_search (fb->message_list, 0);
/* reset the search buttons state */
- gtk_menu_set_active(GTK_MENU(GTK_OPTION_MENU(fb->search_menu)->menu), 0);
- gtk_widget_set_sensitive(fb->search_entry, TRUE);
+ gtk_menu_set_active (GTK_MENU (GTK_OPTION_MENU (fb->search->option)->menu), 0);
+ gtk_widget_set_sensitive (fb->search->entry, TRUE);
break;
}
}
/* bring up the 'full search' dialogue and let the user use that to search with */
static void
-search_full(GtkWidget *w, FolderBrowser *fb)
+search_full (GtkWidget *w, FolderBrowser *fb)
{
MailSearchDialogue *msd;
-
+
/* make search dialogue thingy match */
- gtk_menu_set_active(GTK_MENU(GTK_OPTION_MENU(fb->search_menu)->menu), CUSTOM_SEARCH_ID);
- gtk_widget_set_sensitive(fb->search_entry, FALSE);
-
- msd = mail_search_dialogue_new_with_rule(fb->search_full);
- gtk_signal_connect((GtkObject *)msd, "clicked", search_full_clicked, fb);
- gtk_widget_show((GtkWidget*)msd);
-}
-
-static void
-search_set(FolderBrowser *fb)
-{
- GtkWidget *widget;
- GString *out;
- char *str;
- int index;
- char *text;
-
- widget = gtk_menu_get_active (GTK_MENU(GTK_OPTION_MENU(fb->search_menu)->menu));
- index = (int)gtk_object_get_data((GtkObject *)widget, "search_option");
- if (index == CUSTOM_SEARCH_ID) {
- search_full(NULL, fb);
- return;
- }
- gtk_widget_set_sensitive(fb->search_entry, TRUE);
-
- text = e_utf8_gtk_entry_get_text((GtkEntry *)fb->search_entry);
-
- if (text == NULL || text[0] == 0) {
- if (text)
- g_free(text);
- message_list_set_search(fb->message_list, NULL);
- return;
- }
-
- if (index > sizeof(search_string)/sizeof(search_string[0]))
- index = 0;
- str = search_string[index];
-
- out = g_string_new("");
- while (*str) {
- if (str[0] == '%' && str[1]=='s') {
- str+=2;
- e_sexp_encode_string(out, text);
- } else {
- g_string_append_c(out, *str);
- str++;
- }
- }
- message_list_set_search(fb->message_list, out->str);
- g_string_free(out, TRUE);
-
- g_free (text);
-}
-
-static void
-search_menu_deactivate(GtkWidget *menu, FolderBrowser *fb)
-{
- search_set(fb);
-}
-
-static GtkWidget *
-create_option_menu (char **menu_list, int item, void *data)
-{
- GtkWidget *omenu;
- GtkWidget *menu;
- int i = 0;
-
- omenu = gtk_option_menu_new ();
- menu = gtk_menu_new ();
- while (*menu_list){
- GtkWidget *entry;
-
- /* We don't use e_utf8_gtk_menu_item_new_with_label here
- * because the string comes from gettext and so is localized,
- * not UTF-8.
- */
- entry = gtk_menu_item_new_with_label (_(*menu_list));
- gtk_widget_show (entry);
- gtk_object_set_data((GtkObject *)entry, "search_option", (void *)i);
- gtk_menu_append (GTK_MENU (menu), entry);
- menu_list++;
- i++;
- }
- gtk_option_menu_set_menu (GTK_OPTION_MENU (omenu), menu);
- gtk_option_menu_set_history (GTK_OPTION_MENU (omenu), item);
- gtk_widget_show (omenu);
-
- gtk_signal_connect (GTK_OBJECT (menu),
- "deactivate",
- GTK_SIGNAL_FUNC (search_menu_deactivate), data);
-
- return omenu;
-}
-
-static void
-search_activate(GtkEntry *entry, FolderBrowser *fb)
-{
- search_set(fb);
+ gtk_menu_set_active (GTK_MENU (GTK_OPTION_MENU (fb->search->option)->menu), ESB_CUSTOM_SEARCH);
+ gtk_widget_set_sensitive (fb->search->entry, FALSE);
+
+ msd = mail_search_dialogue_new_with_rule (fb->search_full);
+ gtk_signal_connect (GTK_OBJECT (msd), "clicked", search_full_clicked, fb);
+ gtk_widget_show (GTK_WIDGET (msd));
}
static void
-search_save(GtkWidget *w, FolderBrowser *fb)
+search_save (GtkWidget *w, FolderBrowser *fb)
{
- GtkWidget *widget;
- int index;
char *text;
FilterElement *element;
VfolderRule *rule;
FilterPart *part;
-
- text = e_utf8_gtk_entry_get_text((GtkEntry *)fb->search_entry);
-
- widget = gtk_menu_get_active (GTK_MENU(GTK_OPTION_MENU(fb->search_menu)->menu));
- index = (int)gtk_object_get_data((GtkObject *)widget, "search_option");
-
+ int index;
+
+ text = e_utf8_gtk_entry_get_text (GTK_ENTRY (fb->search->entry));
+
+ index = fb->search->option_choice;
+
/* some special case code for the custom search position */
- if (index == CUSTOM_SEARCH_ID) {
- g_free(text);
- text = g_strdup(_("Custom"));
+ if (index == ESB_CUSTOM_SEARCH) {
+ g_free (text);
+ text = g_strdup (_("Custom"));
} else {
if (text == NULL || text[0] == 0) {
g_free (text);
return;
}
}
-
- rule = vfolder_rule_new();
+
+ rule = vfolder_rule_new ();
((FilterRule *)rule)->grouping = FILTER_GROUP_ANY;
- vfolder_rule_add_source(rule, fb->uri);
- filter_rule_set_name((FilterRule *)rule, text);
- switch(index) {
- case 5: /* custom search */
+ vfolder_rule_add_source (rule, fb->uri);
+ filter_rule_set_name ((FilterRule *)rule, text);
+
+ switch (index) {
+ case ESB_CUSTOM_SEARCH:
if (fb->search_full) {
GList *partl;
-
+
/* copy the parts from the search rule to the vfolder rule */
partl = fb->search_full->parts;
while (partl) {
FilterPart *old = partl->data;
- part = filter_part_clone(old);
- filter_rule_add_part((FilterRule *)rule, part);
- partl = g_list_next(partl);
+ part = filter_part_clone (old);
+ filter_rule_add_part ((FilterRule *)rule, part);
+ partl = g_list_next (partl);
}
break;
}
- default: /* header or body contains */
- index = 0;
- case 1: case 2:
- if (index == 0 || index == 1) { /* body-contains */
- part = vfolder_create_part("body");
- filter_rule_add_part((FilterRule *)rule, part);
- element = filter_part_find_element(part, "body-type");
- filter_option_set_current((FilterOption *)element, "contains");
- element = filter_part_find_element(part, "word");
- filter_input_set_value((FilterInput *)element, text);
+ default:
+ /* header or body contains */
+ index = ESB_BODY_SUBJECT_CONTAINS;
+ case ESB_BODY_CONTAINS:
+ case ESB_SUBJECT_CONTAINS:
+ if (index == ESB_BODY_SUBJECT_CONTAINS || index == ESB_BODY_CONTAINS) {
+ part = vfolder_create_part ("body");
+ filter_rule_add_part ((FilterRule *)rule, part);
+ element = filter_part_find_element (part, "body-type");
+ filter_option_set_current ((FilterOption *)element, "contains");
+ element = filter_part_find_element (part, "word");
+ filter_input_set_value ((FilterInput *)element, text);
}
- if (index == 0 || index == 2) { /* subject contains */
- part = vfolder_create_part("subject");
- filter_rule_add_part((FilterRule *)rule, part);
- element = filter_part_find_element(part, "subject-type");
- filter_option_set_current((FilterOption *)element, "contains");
- element = filter_part_find_element(part, "subject");
- filter_input_set_value((FilterInput *)element, text);
+
+ if (index == ESB_BODY_SUBJECT_CONTAINS || index == ESB_SUBJECT_CONTAINS) {
+ part = vfolder_create_part ("subject");
+ filter_rule_add_part ((FilterRule *)rule, part);
+ element = filter_part_find_element (part, "subject-type");
+ filter_option_set_current ((FilterOption *)element, "contains");
+ element = filter_part_find_element (part, "subject");
+ filter_input_set_value ((FilterInput *)element, text);
}
break;
- case 3: /* not body contains */
- part = vfolder_create_part("body");
- filter_rule_add_part((FilterRule *)rule, part);
- element = filter_part_find_element(part, "body-type");
- filter_option_set_current((FilterOption *)element, "not contains");
- element = filter_part_find_element(part, "word");
- filter_input_set_value((FilterInput *)element, text);
+ case ESB_BODY_DOES_NOT_CONTAIN:
+ part = vfolder_create_part ("body");
+ filter_rule_add_part ((FilterRule *)rule, part);
+ element = filter_part_find_element (part, "body-type");
+ filter_option_set_current ((FilterOption *)element, "not contains");
+ element = filter_part_find_element (part, "word");
+ filter_input_set_value ((FilterInput *)element, text);
break;
- case 4: /* not header contains */
- part = vfolder_create_part("subject");
- filter_rule_add_part((FilterRule *)rule, part);
- element = filter_part_find_element(part, "subject-type");
- filter_option_set_current((FilterOption *)element, "not contains");
- element = filter_part_find_element(part, "subject");
- filter_input_set_value((FilterInput *)element, text);
+ case ESB_SUBJECT_DOES_NOT_CONTAIN:
+ part = vfolder_create_part ("subject");
+ filter_rule_add_part ((FilterRule *)rule, part);
+ element = filter_part_find_element (part, "subject-type");
+ filter_option_set_current ((FilterOption *)element, "not contains");
+ element = filter_part_find_element (part, "subject");
+ filter_input_set_value ((FilterInput *)element, text);
break;
-
}
+
+ vfolder_gui_add_rule (rule);
+
+ g_free (text);
+}
- vfolder_gui_add_rule(rule);
+static void
+folder_browser_search_menu_activated (ESearchBar *esb, int id, FolderBrowser *fb)
+{
+ switch (id) {
+ case ESB_SHOW_ALL:
+ message_list_set_search (fb->message_list, NULL);
+ break;
+ case ESB_ADVANCED:
+ search_full (NULL, fb);
+ break;
+ case ESB_SAVE:
+ search_save (NULL, fb);
+ break;
+ }
+}
- g_free (text);
+static void
+folder_browser_search_query_changed (ESearchBar *esb, FolderBrowser *fb)
+{
+ GString *search_query;
+ char *search_word, *str;
+ int search_type;
+
+ gtk_object_get (GTK_OBJECT (esb),
+ "text", &search_word,
+ "option_choice", &search_type,
+ NULL);
+
+ if (search_word && strlen (search_word)) {
+ str = search_string[search_type];
+
+ search_query = g_string_new ("");
+ while (*str) {
+ if (str[0] == '%' && str[1]=='s') {
+ str += 2;
+ e_sexp_encode_string (search_query, search_word);
+ } else {
+ g_string_append_c (search_query, *str);
+ str++;
+ }
+ }
+
+ message_list_set_search (fb->message_list, search_query->str);
+ g_string_free (search_query, TRUE);
+ } else {
+ message_list_set_search (fb->message_list, NULL);
+ }
+
+ g_free (search_word);
}
void
folder_browser_clear_search (FolderBrowser *fb)
{
- gtk_entry_set_text (GTK_ENTRY (fb->search_entry), "");
- gtk_option_menu_set_history (GTK_OPTION_MENU (fb->search_menu), 0);
- message_list_set_search(fb->message_list, NULL);
+ gtk_entry_set_text (GTK_ENTRY (fb->search->entry), "");
+ gtk_option_menu_set_history (GTK_OPTION_MENU (fb->search->option), 0);
+
+ message_list_set_search (fb->message_list, NULL);
}
void
@@ -404,51 +394,51 @@ folder_browser_toggle_threads (BonoboUIComponent *component,
gpointer user_data)
{
FolderBrowser *fb = user_data;
-
+
if (type != Bonobo_UIComponent_STATE_CHANGED)
return;
- mail_config_set_thread_list(atoi(state));
- message_list_set_threaded(fb->message_list, atoi(state));
+ mail_config_set_thread_list (atoi (state));
+ message_list_set_threaded (fb->message_list, atoi (state));
}
void
-vfolder_subject(GtkWidget *w, FolderBrowser *fb)
+vfolder_subject (GtkWidget *w, FolderBrowser *fb)
{
- vfolder_gui_add_from_message(fb->mail_display->current_message, AUTO_SUBJECT,
- fb->uri);
+ vfolder_gui_add_from_message (fb->mail_display->current_message, AUTO_SUBJECT,
+ fb->uri);
}
void
-vfolder_sender(GtkWidget *w, FolderBrowser *fb)
+vfolder_sender (GtkWidget *w, FolderBrowser *fb)
{
- vfolder_gui_add_from_message(fb->mail_display->current_message, AUTO_FROM,
- fb->uri);
+ vfolder_gui_add_from_message (fb->mail_display->current_message, AUTO_FROM,
+ fb->uri);
}
void
-vfolder_recipient(GtkWidget *w, FolderBrowser *fb)
+vfolder_recipient (GtkWidget *w, FolderBrowser *fb)
{
- vfolder_gui_add_from_message(fb->mail_display->current_message, AUTO_TO,
- fb->uri);
+ vfolder_gui_add_from_message (fb->mail_display->current_message, AUTO_TO,
+ fb->uri);
}
void
-filter_subject(GtkWidget *w, FolderBrowser *fb)
+filter_subject (GtkWidget *w, FolderBrowser *fb)
{
- filter_gui_add_from_message(fb->mail_display->current_message, AUTO_SUBJECT);
+ filter_gui_add_from_message (fb->mail_display->current_message, AUTO_SUBJECT);
}
void
-filter_sender(GtkWidget *w, FolderBrowser *fb)
+filter_sender (GtkWidget *w, FolderBrowser *fb)
{
- filter_gui_add_from_message(fb->mail_display->current_message, AUTO_FROM);
+ filter_gui_add_from_message (fb->mail_display->current_message, AUTO_FROM);
}
void
-filter_recipient(GtkWidget *w, FolderBrowser *fb)
+filter_recipient (GtkWidget *w, FolderBrowser *fb)
{
- filter_gui_add_from_message(fb->mail_display->current_message, AUTO_TO);
+ filter_gui_add_from_message (fb->mail_display->current_message, AUTO_TO);
}
void
@@ -457,13 +447,13 @@ filter_mlist (GtkWidget *w, FolderBrowser *fb)
char *name;
char *header_value;
const char *header_name;
-
+
name = mail_mlist_magic_detect_list (fb->mail_display->current_message, &header_name, &header_value);
if (name == NULL)
return;
-
+
filter_gui_add_for_mailing_list (fb->mail_display->current_message, name, header_name, header_value);
-
+
g_free (name);
g_free (header_value);
}
@@ -618,7 +608,7 @@ etable_key (ETable *table, int row, int col, GdkEvent *ev, FolderBrowser *fb)
gtk_adjustment_value_changed (vadj);
return TRUE;
}
-
+
case GDK_Delete:
case GDK_KP_Delete:
delete_msg (NULL, fb);
@@ -631,12 +621,12 @@ etable_key (ETable *table, int row, int col, GdkEvent *ev, FolderBrowser *fb)
case GDK_KP_Home:
message_list_select(fb->message_list, 0, MESSAGE_LIST_SELECT_NEXT, 0, 0);
return TRUE;
-
+
case GDK_End:
case GDK_KP_End:
message_list_select(fb->message_list, -1, MESSAGE_LIST_SELECT_PREVIOUS, 0, 0);
return TRUE;
-
+
case 'n':
case 'N':
message_list_select (fb->message_list, row,
@@ -667,65 +657,41 @@ on_double_click (ETableScrolled *table, gint row, FolderBrowser *fb)
static void
folder_browser_gui_init (FolderBrowser *fb)
{
- GtkWidget *hbox, *label;
- GtkButton *button, *searchbutton;
- GtkWidget *search_alignment, *save_alignment;
-
- /*
- * The panned container
- */
+ /* The panned container */
fb->vpaned = e_vpaned_new ();
gtk_widget_show (fb->vpaned);
-
- gtk_table_attach (
- GTK_TABLE (fb), fb->vpaned,
- 0, 1, 1, 3,
- GTK_FILL | GTK_EXPAND,
- GTK_FILL | GTK_EXPAND,
- 0, 0);
-
+
+ gtk_table_attach (GTK_TABLE (fb), fb->vpaned,
+ 0, 1, 1, 3,
+ GTK_FILL | GTK_EXPAND,
+ GTK_FILL | GTK_EXPAND,
+ 0, 0);
+
/* quick-search entry */
- hbox = gtk_hbox_new(FALSE, 3);
- gtk_widget_show(hbox);
- fb->search_entry = gtk_entry_new();
- gtk_widget_show(fb->search_entry);
- gtk_signal_connect(GTK_OBJECT (fb->search_entry), "activate", search_activate, fb);
- search_alignment = gtk_alignment_new(.5, .5, 0, 0);
- gtk_widget_show(search_alignment);
- searchbutton = (GtkButton *)gtk_button_new_with_label(_("Full Search"));
- gtk_widget_show((GtkWidget *)searchbutton);
- label = gtk_label_new(_("Search"));
- gtk_widget_show(label);
- fb->search_menu = create_option_menu(search_options, 0, fb);
- button = (GtkButton *)gtk_button_new_with_label(_("Save"));
- gtk_widget_show((GtkWidget *)button);
- save_alignment = gtk_alignment_new(.5, .5, 0, 0);
- gtk_widget_show(save_alignment);
- gtk_signal_connect((GtkObject *)button, "clicked", search_save, fb);
- gtk_signal_connect((GtkObject *)searchbutton, "clicked", search_full, fb);
- gtk_container_add(GTK_CONTAINER(save_alignment), GTK_WIDGET(button));
- gtk_box_pack_end((GtkBox *)hbox, save_alignment, FALSE, FALSE, 3);
- gtk_box_pack_end((GtkBox *)hbox, fb->search_entry, FALSE, FALSE, 3);
- gtk_box_pack_end((GtkBox *)hbox, fb->search_menu, FALSE, FALSE, 3);
- gtk_box_pack_end((GtkBox *)hbox, label, FALSE, FALSE, 3);
- gtk_container_add(GTK_CONTAINER(search_alignment), GTK_WIDGET(searchbutton));
- gtk_box_pack_end((GtkBox *)hbox, search_alignment, FALSE, FALSE, 3);
- gtk_table_attach (
- GTK_TABLE (fb), hbox,
- 0, 1, 0, 1,
- GTK_FILL | GTK_EXPAND,
- 0,
- 0, 0);
-
+ fb->search = E_SEARCH_BAR (e_search_bar_new (folder_browser_search_menu_items,
+ folder_browser_search_option_items));
+ gtk_widget_show (GTK_WIDGET (fb->search));
+
+ gtk_signal_connect (GTK_OBJECT (fb->search), "query_changed",
+ GTK_SIGNAL_FUNC (folder_browser_search_query_changed), fb);
+ gtk_signal_connect (GTK_OBJECT (fb->search), "menu_activated",
+ GTK_SIGNAL_FUNC (folder_browser_search_menu_activated), fb);
+
+ gtk_table_attach (GTK_TABLE (fb), GTK_WIDGET (fb->search),
+ 0, 1, 0, 1,
+ GTK_FILL | GTK_EXPAND,
+ 0,
+ 0, 0);
+
fb->message_list_w = message_list_get_widget (fb->message_list);
e_paned_add1 (E_PANED (fb->vpaned), fb->message_list_w);
gtk_widget_show (fb->message_list_w);
-
+
gtk_signal_connect (GTK_OBJECT (fb->message_list_w), "size_allocate",
GTK_SIGNAL_FUNC (fb_resize_cb), NULL);
-
+
e_paned_add2 (E_PANED (fb->vpaned), GTK_WIDGET (fb->mail_display));
- e_paned_set_position (E_PANED (fb->vpaned), mail_config_paned_size());
+ e_paned_set_position (E_PANED (fb->vpaned), mail_config_paned_size ());
gtk_widget_show (GTK_WIDGET (fb->mail_display));
gtk_widget_show (GTK_WIDGET (fb));
}
@@ -747,10 +713,10 @@ mark_msg_seen (gpointer data)
}
static void
-on_message_selected(MessageList *ml, const char *uid, FolderBrowser *fb)
+on_message_selected (MessageList *ml, const char *uid, FolderBrowser *fb)
{
- printf("selecting uid %s\n", uid);
- mail_do_display_message(ml, fb->mail_display, uid, mark_msg_seen);
+ d(printf ("selecting uid %s\n", uid));
+ mail_do_display_message (ml, fb->mail_display, uid, mark_msg_seen);
}
static void
diff --git a/mail/folder-browser.h b/mail/folder-browser.h
index 6bddba18c5..7ddc9a1954 100644
--- a/mail/folder-browser.h
+++ b/mail/folder-browser.h
@@ -8,6 +8,7 @@
#include <gtk/gtktable.h>
#include "camel/camel-stream.h"
#include <bonobo/bonobo-property-bag.h>
+#include "filter/e-search-bar.h"
#include "filter/filter-rule.h"
#include "filter/filter-context.h" /*eek*/
#include "message-list.h"
@@ -41,8 +42,8 @@ struct _FolderBrowser {
GtkWidget *message_list_w;
MailDisplay *mail_display;
GtkWidget *vpaned;
- GtkWidget *search_menu;
- GtkWidget *search_entry;
+
+ ESearchBar *search;
FilterRule *search_full; /* if we have a full search active */
gboolean preview_shown;
diff --git a/mail/mail-ops.c b/mail/mail-ops.c
index f94d065b16..34afb6a130 100644
--- a/mail/mail-ops.c
+++ b/mail/mail-ops.c
@@ -1693,11 +1693,11 @@ cleanup_load_folder (gpointer in_data, gpointer op_data, CamelException *ex)
load_folder_input_t *input = (load_folder_input_t *) in_data;
if (input->fb->folder) {
- gtk_widget_set_sensitive (GTK_WIDGET (input->fb->search_entry),
+ gtk_widget_set_sensitive (GTK_WIDGET (input->fb->search->entry),
camel_folder_has_search_capability (input->
fb->
folder));
- gtk_widget_set_sensitive (GTK_WIDGET (input->fb->search_menu),
+ gtk_widget_set_sensitive (GTK_WIDGET (input->fb->search->option),
camel_folder_has_search_capability (input->
fb->
folder));