Enable live search in accounts window
authorJosé Dapena Paz <jdapena@igalia.com>
Tue, 2 Feb 2010 16:57:32 +0000 (17:57 +0100)
committerJosé Dapena Paz <jdapena@igalia.com>
Tue, 2 Feb 2010 17:03:12 +0000 (18:03 +0100)
src/hildon2/modest-accounts-window.c
src/modest-text-utils.c
src/modest-text-utils.h

index 03630da..aba2350 100644 (file)
@@ -36,8 +36,7 @@
 #include <modest-signal-mgr.h>
 #include <modest-runtime.h>
 #include <modest-platform.h>
-#include <hildon/hildon-program.h>
-#include <hildon/hildon-button.h>
+#include <hildon/hildon.h>
 #include <modest-maemo-utils.h>
 #include <modest-icon-names.h>
 #include <modest-defs.h>
@@ -48,6 +47,7 @@
 #include <modest-ui-constants.h>
 #include <modest-account-mgr-helpers.h>
 #include <modest-mailboxes-window.h>
+#include <modest-text-utils.h>
 
 
 /* 'private'/'protected' functions */
@@ -338,6 +338,26 @@ modest_accounts_window_new_real (void)
        return MODEST_WINDOW(self);
 }
 
+static gboolean
+live_search_visible_func (GtkTreeModel *model,
+                         GtkTreeIter  *iter,
+                         gchar        *text,
+                         gpointer      data)
+{
+       gchar *display_name;
+       gboolean result;
+       gtk_tree_model_get(model, iter, 
+                          1, 
+                          &display_name, -1);
+
+       result = modest_text_utils_live_search_find (display_name, text);
+
+       g_free (display_name);
+
+       return result;
+}
+
+
 ModestWindow *
 modest_accounts_window_new (void)
 {
@@ -345,6 +365,9 @@ modest_accounts_window_new (void)
        ModestWindow *self;
        ModestAccountsWindowPrivate *priv = NULL;
        HildonProgram *app;
+#ifdef MODEST_TOOLKIT_HILDON2
+       GtkWidget *live_search;
+#endif
 
        if (pre_created_accounts_window) {
                self = MODEST_WINDOW (pre_created_accounts_window);
@@ -354,6 +377,16 @@ modest_accounts_window_new (void)
        }
        priv = MODEST_ACCOUNTS_WINDOW_GET_PRIVATE(self);
        priv->account_view  = GTK_WIDGET (modest_account_view_new (modest_runtime_get_account_mgr ()));
+#ifdef MODEST_TOOLKIT_HILDON2
+       live_search = hildon_live_search_new ();
+       hildon_live_search_set_filter (HILDON_LIVE_SEARCH (live_search),
+                                      GTK_TREE_MODEL_FILTER (modest_account_view_get_filter (MODEST_ACCOUNT_VIEW (priv->account_view))));
+       hildon_live_search_set_visible_func (HILDON_LIVE_SEARCH (live_search), live_search_visible_func, self, NULL);
+       hildon_live_search_set_text_column (HILDON_LIVE_SEARCH (live_search),
+                                           1);
+       hildon_live_search_widget_hook (HILDON_LIVE_SEARCH (live_search), GTK_WIDGET (self), priv->account_view);
+       gtk_box_pack_start (GTK_BOX (priv->box), live_search, FALSE, FALSE, 0);
+#endif
 
        action_area_box = hildon_tree_view_get_action_area_box (GTK_TREE_VIEW (priv->account_view));
        gtk_box_pack_start (GTK_BOX (action_area_box), priv->new_message_button, TRUE, TRUE, 0);
index 820eee3..9c722ed 100644 (file)
@@ -2325,3 +2325,37 @@ modest_text_utils_create_colored_signature (const gchar *signature)
 
        return retval;
 }
+
+gboolean
+modest_text_utils_live_search_find (const gchar *haystack, const gchar *needles)
+{
+       gchar *haystack_fold;
+       gchar *needles_fold;
+       gchar **needle, **current;
+       gboolean match;
+
+       match = FALSE;
+
+       haystack_fold = g_utf8_casefold (haystack, -1);
+       needles_fold = g_utf8_casefold (needles, -1);
+
+       needle = g_strsplit (needles_fold, " ", -1);
+
+       current = needle;
+       while (current && *current != NULL) {
+
+               if (g_strstr_len (haystack_fold, -1, *current) != NULL) {
+                       match = TRUE;
+               } else {
+                       match = FALSE;
+                       break;
+               }
+               current++;
+       }
+
+       g_strfreev (needle);
+       g_free (needles_fold);
+       g_free (haystack_fold);
+       
+       return match;
+}
index 5568a1e..8b53188 100644 (file)
@@ -571,4 +571,6 @@ gboolean modest_text_utils_no_recipient (GtkTextBuffer *buffer);
 
 gchar * modest_text_utils_create_colored_signature (const gchar *signature);
 
+gboolean modest_text_utils_live_search_find (const gchar *haystack, const gchar *needles);
+
 #endif /* __MODEST_TEXT_UTILS_H__ */