[anjal] Do most search using Evo.
- From: Srinivasa Ragavan <sragavan src gnome org>
- To: svn-commits-list gnome org
- Subject: [anjal] Do most search using Evo.
- Date: Fri, 15 May 2009 13:56:16 -0400 (EDT)
commit 8b5d62509cf053294c2846a24fab290ba27d0284
Author: Srinivasa Ragavan <sragavan novell com>
Date: Fri May 15 23:27:22 2009 +0530
Do most search using Evo.
---
src/mail-search.c | 109 +++++++++++++++++++++++++++++++++++------------------
src/mail-search.h | 4 +-
2 files changed, 75 insertions(+), 38 deletions(-)
diff --git a/src/mail-search.c b/src/mail-search.c
index 1cbfbbc..7cd0795 100644
--- a/src/mail-search.c
+++ b/src/mail-search.c
@@ -29,9 +29,9 @@
#include "mail-view.h"
#include "mail-component.h"
#include <gdk/gdkkeysyms.h>
-#include "misc/e-icon-entry.h"
-
+#include "misc/e-filter-bar.h"
#include "mail-search.h"
+#include <camel/camel-search-private.h>
enum {
SEARCH_ACTIVATE,
@@ -42,12 +42,7 @@ enum {
static guint mail_search_signals[LAST_SIGNAL];
struct _MailSearchPrivate {
- GtkWidget *entry;
- GtkWidget *entry_box;
- GtkWidget *icon_entry;
-
- GtkWidget *clear_button;
- GtkWidget *option_button;
+ EFilterBar *bar;
};
G_DEFINE_TYPE (MailSearch, mail_search, GTK_TYPE_HBOX)
@@ -94,46 +89,86 @@ mail_search_class_init (MailSearchClass *klass)
};
+static void
+mail_search_config_search(EFilterBar *efb, FilterRule *rule, int id, const char *query, void *data)
+{
+ GList *partl;
+ struct _camel_search_words *words;
+ int i;
+ GSList *strings = NULL;
+
+ /* we scan the parts of a rule, and set all the types we know about to the query string */
+ partl = rule->parts;
+ while (partl) {
+ FilterPart *part = partl->data;
+
+ if (!strcmp(part->name, "subject")) {
+ FilterInput *input = (FilterInput *)filter_part_find_element(part, "subject");
+ if (input)
+ filter_input_set_value(input, query);
+ } else if (!strcmp(part->name, "body")) {
+ FilterInput *input = (FilterInput *)filter_part_find_element(part, "word");
+ if (input)
+ filter_input_set_value(input, query);
+
+ words = camel_search_words_split((unsigned char *)query);
+ for (i=0;i<words->len;i++)
+ strings = g_slist_prepend(strings, g_strdup(words->words[i]->word));
+ camel_search_words_free (words);
+ } else if(!strcmp(part->name, "sender")) {
+ FilterInput *input = (FilterInput *)filter_part_find_element(part, "sender");
+ if (input)
+ filter_input_set_value(input, query);
+ } else if(!strcmp(part->name, "to")) {
+ FilterInput *input = (FilterInput *)filter_part_find_element(part, "recipient");
+ if (input)
+ filter_input_set_value(input, query);
+ }
+
+ partl = partl->next;
+ }
+
+ /*em_format_html_display_set_search(emfb->view.preview,
+ EM_FORMAT_HTML_DISPLAY_SEARCH_SECONDARY|EM_FORMAT_HTML_DISPLAY_SEARCH_ICASE,
+ strings);*/
+ while (strings) {
+ GSList *n = strings->next;
+ g_free(strings->data);
+ g_slist_free_1(strings);
+ strings = n;
+ }
+}
+
+static void
+mail_search_activate (EFilterBar *bar, MailSearch *search)
+{
+ char *word;
+ ESearchBar *esb = (ESearchBar *)bar;
+
+ g_object_get (esb, "query", &word, NULL);
+
+ mail_view_set_search (search->view, word);
+}
+
void
mail_search_construct (MailSearch *search_bar)
{
MailSearchPrivate *priv = search_bar->priv;
GtkWidget *tmp, *img, *box, *ar1, *ar2;
+ RuleContext *search_context = mail_component_peek_search_context (mail_component_peek ());
+ const char *systemrules = g_object_get_data (G_OBJECT (search_context), "system");
+ const char *userrules = g_object_get_data (G_OBJECT (search_context), "user");
+
+ priv->bar = e_filter_bar_lite_new (search_context, systemrules, userrules, mail_search_config_search, NULL);
gtk_box_set_spacing (GTK_BOX (search_bar), 3);
gtk_box_set_homogeneous (GTK_BOX (search_bar), FALSE);
- priv->entry_box = gtk_hbox_new (0, FALSE);
- priv->icon_entry = e_icon_entry_new ();
- priv->entry = e_icon_entry_get_entry (E_ICON_ENTRY (priv->icon_entry));
-
-/* g_signal_connect (priv->entry, "changed",
- G_CALLBACK (entry_changed_cb), search_bar);
- g_signal_connect (priv->entry, "activate",
- G_CALLBACK (entry_activated_cb), search_bar);
- g_signal_connect (priv->entry, "focus-in-event",
- G_CALLBACK (entry_focus_in_cb), search_bar);
- g_signal_connect (priv->entry, "focus-out-event",
- G_CALLBACK (entry_focus_out_cb), search_bar);
- g_signal_connect (priv->entry, "key-press-event",
- G_CALLBACK (entry_key_press_cb), search_bar);
-*/
- priv->clear_button = e_icon_entry_create_button ("gtk-clear");
-// g_signal_connect (G_OBJECT (search_bar->clear_button), "button-press-event", G_CALLBACK(clear_button_clicked_cb), search_bar);
- e_icon_entry_pack_widget (E_ICON_ENTRY (priv->icon_entry), priv->clear_button, FALSE);
-
- priv->option_button = e_icon_entry_create_button ("gtk-find");
-// g_signal_connect (G_OBJECT (search_bar->option_button), "button-press-event", G_CALLBACK(option_button_clicked_cb), search_bar);
- e_icon_entry_pack_widget (E_ICON_ENTRY (priv->icon_entry), priv->option_button, TRUE);
-
- gtk_box_pack_start (GTK_BOX(priv->entry_box), priv->icon_entry, TRUE, TRUE, 0);
-
- gtk_widget_show_all (priv->entry_box);
- gtk_widget_set_sensitive (priv->clear_button, FALSE);
- gtk_box_pack_start(search_bar, priv->entry_box, TRUE, TRUE, 0);
-
+ gtk_box_pack_start (search_bar, priv->bar, TRUE, TRUE, 0);
+ gtk_widget_show(priv->bar);
gtk_widget_show (search_bar);
+ g_signal_connect (priv->bar, "search_activated", G_CALLBACK(mail_search_activate), search_bar);
}
MailSearch *
diff --git a/src/mail-search.h b/src/mail-search.h
index f715631..6ad9d74 100644
--- a/src/mail-search.h
+++ b/src/mail-search.h
@@ -26,6 +26,7 @@
#include <gtk/gtk.h>
#include "mail-component.h"
#include "mail-view.h"
+#include "mail-shell.h"
#define MAIL_SEARCH_TYPE (mail_search_get_type ())
#define MAIL_SEARCH(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MAIL_SEARCH_TYPE, MailSearch))
@@ -38,7 +39,8 @@ typedef struct _MailSearchPrivate MailSearchPrivate;
typedef struct _MailSearch {
GtkHBox parent;
-
+ MailShell *shell;
+ MailView *view;
MailSearchPrivate *priv;
} MailSearch;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]