From 84ec108299eafb88faf2b2cafad3f6eee9dae154 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Dapena=20Paz?= Date: Tue, 2 Feb 2010 17:57:32 +0100 Subject: [PATCH] Enable live search in accounts window --- src/hildon2/modest-accounts-window.c | 37 ++++++++++++++++++++++++++++++++-- src/modest-text-utils.c | 34 +++++++++++++++++++++++++++++++ src/modest-text-utils.h | 2 ++ 3 files changed, 71 insertions(+), 2 deletions(-) diff --git a/src/hildon2/modest-accounts-window.c b/src/hildon2/modest-accounts-window.c index 03630da..aba2350 100644 --- a/src/hildon2/modest-accounts-window.c +++ b/src/hildon2/modest-accounts-window.c @@ -36,8 +36,7 @@ #include #include #include -#include -#include +#include #include #include #include @@ -48,6 +47,7 @@ #include #include #include +#include /* '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); diff --git a/src/modest-text-utils.c b/src/modest-text-utils.c index 820eee3..9c722ed 100644 --- a/src/modest-text-utils.c +++ b/src/modest-text-utils.c @@ -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; +} diff --git a/src/modest-text-utils.h b/src/modest-text-utils.h index 5568a1e..8b53188 100644 --- a/src/modest-text-utils.h +++ b/src/modest-text-utils.h @@ -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__ */ -- 1.7.9.5