r3660 - in trunk/src/target/OM-2007.2/applications/openmoko-messages2: . src

chris at sita.openmoko.org chris at sita.openmoko.org
Mon Dec 17 15:15:44 CET 2007


Author: chris
Date: 2007-12-17 15:15:42 +0100 (Mon, 17 Dec 2007)
New Revision: 3660

Modified:
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/ChangeLog
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-contacts.c
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms.h
Log:
        * src/sms-contacts.c: (search_toggled_cb),
        (search_text_changed_cb), (search_combo_changed_cb),
        (contacts_visible_func), (sms_contacts_page_new):
        * src/sms.h:
        Add contacts filtering via search string


Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/ChangeLog	2007-12-17 13:27:38 UTC (rev 3659)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/ChangeLog	2007-12-17 14:15:42 UTC (rev 3660)
@@ -1,5 +1,13 @@
 2007-12-17  Chris Lord  <chris at openedhand.com>
 
+	* src/sms-contacts.c: (search_toggled_cb),
+	(search_text_changed_cb), (search_combo_changed_cb),
+	(contacts_visible_func), (sms_contacts_page_new):
+	* src/sms.h:
+	Add contacts filtering via search string
+
+2007-12-17  Chris Lord  <chris at openedhand.com>
+
 	* src/sms-notes.c: (delete_clicked_cb):
 	Implement delete functionality in notes view (allows deleting of
 	individual messages)

Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-contacts.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-contacts.c	2007-12-17 13:27:38 UTC (rev 3659)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-contacts.c	2007-12-17 14:15:42 UTC (rev 3660)
@@ -299,11 +299,64 @@
 	jana_store_view_start (notes_view);
 }
 
+static void
+search_toggled_cb (MokoSearchBar *bar, gboolean search_visible, SmsData *data)
+{
+	gtk_tree_model_filter_refilter (
+		GTK_TREE_MODEL_FILTER (data->contacts_filter));
+}
+
+static void
+search_text_changed_cb (MokoSearchBar *bar, GtkEditable *editable,
+			SmsData *data)
+{
+	gtk_tree_model_filter_refilter (
+		GTK_TREE_MODEL_FILTER (data->contacts_filter));
+}
+
+static void
+search_combo_changed_cb (MokoSearchBar *bar, GtkComboBox *combo_box,
+			 SmsData *data)
+{
+	gtk_tree_model_filter_refilter (
+		GTK_TREE_MODEL_FILTER (data->contacts_filter));
+}
+
+static
+gboolean contacts_visible_func (GtkTreeModel *model, GtkTreeIter *iter,
+				SmsData *data)
+{
+	if (moko_search_bar_search_visible (
+	    MOKO_SEARCH_BAR (data->contacts_search))) {
+		const gchar *search;
+		gboolean result;
+		gchar *name;
+
+		search = gtk_entry_get_text (moko_search_bar_get_entry (
+			MOKO_SEARCH_BAR (data->contacts_search)));
+		
+		if ((!search) || (search[0] == '\0')) return TRUE;
+		
+		/* Filter on search query */
+		gtk_tree_model_get (model, iter, COL_NAME, &name, -1);
+		if (!name) return FALSE;
+		
+		/* FIXME: Use a proper UTF-8 casefold comparison here */
+		result = strcasestr (name, search) ? TRUE : FALSE;
+		g_free (name);
+		
+		return result;
+	} else {
+		/* Filter on selected category */
+		return TRUE;
+	}
+}
+
 GtkWidget *
 sms_contacts_page_new (SmsData *data)
 {
 	EBookQuery *qrys[(E_CONTACT_LAST_PHONE_ID-E_CONTACT_FIRST_PHONE_ID)+1];
-	GtkWidget *searchbar, *scroll, *vbox;
+	GtkWidget *contacts_combo, *scroll, *vbox;
 	GtkCellRenderer *renderer;
 	EBookQuery *tel_query;
 	EBookView *view;
@@ -383,13 +436,22 @@
 		(GType []){G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
 			GDK_TYPE_PIXBUF, G_TYPE_INT, G_TYPE_BOOLEAN },
 		(GtkTreeModelFilterModifyFunc)nophoto_filter_func, data, NULL);
+	gtk_tree_model_filter_set_visible_func ((GtkTreeModelFilter *)
+		data->contacts_filter, (GtkTreeModelFilterVisibleFunc)
+		contacts_visible_func, data, NULL);
 	
 	/* Create groups model */
-	data->contacts_combo = gtk_combo_box_new_text ();
+	contacts_combo = gtk_combo_box_new_text ();
 	
 	/* Create search box */
-	searchbar = moko_search_bar_new_with_combo (
-		GTK_COMBO_BOX (data->contacts_combo));
+	data->contacts_search = moko_search_bar_new_with_combo (
+		GTK_COMBO_BOX (contacts_combo));
+	g_signal_connect (data->contacts_search, "toggled",
+		G_CALLBACK (search_toggled_cb), data);
+	g_signal_connect (data->contacts_search, "text_changed",
+		G_CALLBACK (search_text_changed_cb), data);
+	g_signal_connect (data->contacts_search, "combo_changed",
+		G_CALLBACK (search_combo_changed_cb), data);
 	
 	/* Create tree view */
 	data->contacts_treeview = gtk_tree_view_new_with_model (
@@ -419,7 +481,7 @@
 	
 	/* Pack widgets into vbox and return */
 	vbox = gtk_vbox_new (FALSE, 0);
-	gtk_box_pack_start (GTK_BOX (vbox), searchbar, FALSE, TRUE, 0);
+	gtk_box_pack_start (GTK_BOX (vbox), data->contacts_search, FALSE, TRUE, 0);
 	gtk_box_pack_start (GTK_BOX (vbox), scroll, TRUE, TRUE, 0);
 	gtk_widget_show_all (vbox);
 	

Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms.h
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms.h	2007-12-17 13:27:38 UTC (rev 3659)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms.h	2007-12-17 14:15:42 UTC (rev 3660)
@@ -62,7 +62,7 @@
 	guint notes_scroll_idle;
 
 	GtkWidget *contacts_treeview;
-	GtkWidget *contacts_combo;
+	GtkWidget *contacts_search;
 	GdkPixbuf *no_photo;
 	
 	GtkWidget *sms_textview;





More information about the commitlog mailing list