From 80b04cfd3d665ac19e5e4870f68a7a6e437f97a2 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/modest-text-utils.c | 34 ++++++++++++++++++++++++++++++++++ src/modest-text-utils.h | 2 ++ src/widgets/modest-accounts-window.c | 31 +++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+) diff --git a/src/modest-text-utils.c b/src/modest-text-utils.c index 8306c60..ae759ea 100644 --- a/src/modest-text-utils.c +++ b/src/modest-text-utils.c @@ -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; +} diff --git a/src/modest-text-utils.h b/src/modest-text-utils.h index b35e6b6..f0c685d 100644 --- a/src/modest-text-utils.h +++ b/src/modest-text-utils.h @@ -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__ */ diff --git a/src/widgets/modest-accounts-window.c b/src/widgets/modest-accounts-window.c index 0aef240..8569788 100644 --- a/src/widgets/modest-accounts-window.c +++ b/src/widgets/modest-accounts-window.c @@ -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; -- 1.7.9.5