[anjal] Support to search in folder view.



commit e4aed60091620648cad10c9656118f7e5f553718
Author: Srinivasa Ragavan <sragavan novell com>
Date:   Fri May 15 23:28:19 2009 +0530

    Support to search in folder view.
---
 src/mail-folder-view.c |   62 +++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 56 insertions(+), 6 deletions(-)

diff --git a/src/mail-folder-view.c b/src/mail-folder-view.c
index ac82d89..205d68d 100644
--- a/src/mail-folder-view.c
+++ b/src/mail-folder-view.c
@@ -57,6 +57,7 @@ struct  _MailFolderViewPrivate {
 
 	CamelFolder *folder;
 	char *uid;
+	char *search;
 
 	int sort_selected;
 	gboolean sort_ascending;
@@ -222,6 +223,7 @@ mail_folder_view_init (MailFolderView  *shell)
 	shell->priv->show_thread = g_getenv("ANJAL_THREAD") != NULL; 
 	shell->priv->show_children = g_getenv("ANJAL_CHILDREN") != NULL;
 	shell->priv->folder = NULL;
+	shell->priv->search = NULL;
 	if (shell->priv->light) 
 		shell->model = mail_sqlite_store_new ();
 	else {
@@ -270,8 +272,9 @@ struct _db_read_msg {
 	MailFolderView *mfv;
 	CamelFolder *folder;
 	const char *uri;
-	
-	void (*done) (char *uri, CamelFolder *folder, void *data);	
+	gboolean load;
+
+	void (*done) (char *uri, CamelFolder *folder, void *data);
 };
 
 static void
@@ -286,8 +289,22 @@ db_read_exec (struct _db_read_msg *m)
 
 		if (mfv->priv->light)
 			mail_sqlite_store_set_folder (mfv->model, folder, NULL);
-		else
-			em_tree_store_add_folder (mfv->model, folder, mfv->priv->expr, TRUE);
+		else {
+			char *str;
+
+			if (!mfv->priv->search && m->load)
+				em_tree_store_add_folder (mfv->model, folder, mfv->priv->expr, TRUE);
+			else {
+
+				str = g_strdup_printf("(and %s %s)", mfv->priv->expr, mfv->priv->search);
+				if (m->load)
+					em_tree_store_add_folder (mfv->model, folder, str, TRUE);
+				else
+					em_tree_store_search_folder (mfv->model, folder, mfv->priv->search ? str : mfv->priv->expr, TRUE);
+
+				g_free(str);
+			}
+		}
 
 		/* FIXME: Set a signal emit and listen for it at note book and set the title appropriately */
 	}
@@ -296,7 +313,8 @@ db_read_exec (struct _db_read_msg *m)
 static void
 db_read_done (struct _db_read_msg *m)
 {
-	m->done (m->mfv, m->folder, m->uri);
+	if (m->done)
+		m->done (m->mfv, m->folder, m->uri);
 	
 }
 
@@ -321,6 +339,7 @@ mfv_db_load (MailFolderView *mfv, const char *uri, CamelFolder *folder)
 
 	m = mail_msg_new (&db_read_info);
 	m->mfv = mfv;
+	m->load = TRUE;
 	m->uri = g_strdup(uri);
 	m->folder = folder;
 	m->done = mail_folder_view_set_folder;
@@ -1293,7 +1312,7 @@ mail_folder_view_construct (MailFolderView *shell)
 	   the first up-arrow. I takes ~2 secs to respond. I bypass it by this.*/
 	column->editable_widget = (gpointer)0xdeadbeef;
 	
-	gtk_tree_view_column_set_fixed_width (column, 750);
+	gtk_tree_view_column_set_fixed_width (column, 720);
 	gtk_tree_view_column_set_sizing  (column, GTK_TREE_VIEW_COLUMN_FIXED);	
 	gtk_tree_view_column_set_title (column, _("Messages"));
 	gtk_tree_view_append_column (GTK_TREE_VIEW (shell->tree), column);
@@ -1561,3 +1580,34 @@ mail_folder_view_save (MailFolderView *mfv)
 {
 	 mfv_save(mfv);
 }
+
+static void
+mail_folder_view_search_done (MailFolderView *mfv, CamelFolder *folder, const char *uri)
+{
+		gtk_tree_view_set_model (GTK_TREE_VIEW (mfv->tree), mfv->model);	
+}
+
+void
+mail_folder_view_set_search (MailFolderView *mfv, const char *search)
+{
+	if (mfv->priv->search) {
+		g_free (mfv->priv->search);
+		mfv->priv->search = NULL;
+	}
+
+	if (search|| 1) {
+		struct _db_read_msg *m;
+
+		mfv->priv->search = search ? g_strdup(search) : NULL;
+
+		gtk_tree_view_set_model (GTK_TREE_VIEW (mfv->tree), NULL);
+		m = mail_msg_new (&db_read_info);
+		m->mfv = mfv;
+		m->load = FALSE;
+		m->uri = g_strdup(mfv->uri);
+		m->folder = mfv->priv->folder;
+		m->done = mail_folder_view_search_done;
+		mail_msg_unordered_push (m);		
+	}
+
+}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]