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:17:23 +0000 (18:17 +0100)
src/modest-text-utils.c
src/modest-text-utils.h
src/widgets/modest-accounts-window.c

index 8306c60..ae759ea 100644 (file)
@@ -2329,3 +2329,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 b35e6b6..f0c685d 100644 (file)
@@ -697,4 +697,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__ */
index 0aef240..8569788 100644 (file)
@@ -359,6 +359,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)
 {
@@ -366,6 +386,7 @@ modest_accounts_window_new (void)
        ModestAccountsWindowPrivate *priv = NULL;
 #ifdef MODEST_TOOLKIT_HILDON2
        HildonProgram *app;
+       GtkWidget *live_search;
 #endif
 
        if (pre_created_accounts_window) {
@@ -376,6 +397,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
 
 #ifdef MODEST_TOOLKIT_HILDON2
        GtkWidget *action_area_box;