X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fwidgets%2Fmodest-folder-view.c;h=21aa2314fab8d21956d250d54360c3d3aff4df95;hp=8c3f8a4bf957e90e7f689ce0f4f4e69c957fdf84;hb=HEAD;hpb=a2a2d299dc36c0533a273a40429c3ff884b5adf5 diff --git a/src/widgets/modest-folder-view.c b/src/widgets/modest-folder-view.c index 8c3f8a4..21aa231 100644 --- a/src/widgets/modest-folder-view.c +++ b/src/widgets/modest-folder-view.c @@ -63,6 +63,9 @@ #include "modest-ui-constants.h" #include "widgets/modest-window.h" #include +#ifdef MODEST_TOOLKIT_HILDON2 +#include +#endif /* Folder view drag types */ const GtkTargetEntry folder_view_drag_types[] = @@ -122,10 +125,6 @@ static gboolean filter_row (GtkTreeModel *model, GtkTreeIter *iter, gpointer data); -static gboolean on_key_pressed (GtkWidget *self, - GdkEventKey *event, - gpointer user_data); - static void on_configuration_key_changed (ModestConf* conf, const gchar *key, ModestConfEvent event, @@ -185,6 +184,9 @@ struct _ModestFolderViewPrivate { gchar **hidding_ids; guint n_selected; ModestFolderViewFilter filter; +#ifdef MODEST_TOOLKIT_HILDON2 + GtkWidget *live_search; +#endif TnyFolderStoreQuery *query; gboolean do_refresh; @@ -518,6 +520,7 @@ format_compact_style (gchar **item_name, TnyFolder *folder; gboolean is_special; TnyFolderType folder_type; + gboolean l_use_markup; if (!TNY_IS_FOLDER (instance)) return; @@ -574,10 +577,58 @@ format_compact_style (gchar **item_name, g_object_unref (account); *item_name = g_string_free (buffer, FALSE); - *use_markup = FALSE; + l_use_markup = FALSE; } else { - *use_markup = FALSE; + l_use_markup = FALSE; } + if (use_markup) + *use_markup = l_use_markup; +} + +static void +replace_special_folder_prefix (gchar **item_name) +{ + const gchar *separator; + gchar *prefix; + + if (item_name == NULL || *item_name == NULL || **item_name == '\0') + return; + separator = g_strstr_len (*item_name, -1, MODEST_FOLDER_PATH_SEPARATOR); + if (separator == NULL) + return; + + prefix = g_strndup (*item_name, separator - *item_name); + g_strstrip (prefix); + + if (prefix && *prefix != '\0') { + TnyFolderType folder_type; + gchar *new_name; + gchar *downcase; + + downcase = g_utf8_strdown (prefix, -1); + g_free (prefix); + prefix = downcase; + + if (strcmp (downcase, "inbox") == 0) { + folder_type = TNY_FOLDER_TYPE_INBOX; + new_name = g_strconcat (_("mcen_me_folder_inbox"), separator, NULL); + g_free (*item_name); + *item_name = new_name; + } else { + folder_type = modest_local_folder_info_get_type (prefix); + switch (folder_type) { + case TNY_FOLDER_TYPE_INBOX: + case TNY_FOLDER_TYPE_ARCHIVE: + new_name = g_strconcat (modest_local_folder_info_get_type_display_name (folder_type), separator, NULL); + g_free (*item_name); + *item_name = new_name; + break; + default: + break; + } + } + } + g_free (prefix); } static void @@ -704,6 +755,8 @@ text_cell_data (GtkTreeViewColumn *column, format_compact_style (&item_name, instance, priv->mailbox, item_weight == 800, multiaccount, &use_markup); + } else { + replace_special_folder_prefix (&item_name); } if (item_name && item_weight) { @@ -1215,6 +1268,7 @@ add_columns (GtkWidget *treeview) gtk_tree_view_column_set_fixed_width (column, TRUE); gtk_tree_view_set_headers_clickable (GTK_TREE_VIEW(treeview), FALSE); gtk_tree_view_set_enable_search (GTK_TREE_VIEW(treeview), FALSE); + gtk_tree_view_set_rules_hint ((GtkTreeView *) treeview, TRUE); /* Add column */ gtk_tree_view_append_column (GTK_TREE_VIEW(treeview),column); @@ -1240,6 +1294,9 @@ modest_folder_view_init (ModestFolderView *obj) priv->outbox_deleted_handler = 0; priv->reexpand = TRUE; priv->signal_handlers = 0; +#ifdef MODEST_TOOLKIT_HILDON2 + priv->live_search = NULL; +#endif /* Initialize the local account name */ conf = modest_runtime_get_conf(); @@ -1258,11 +1315,6 @@ modest_folder_view_init (ModestFolderView *obj) /* Build treeview */ add_columns (GTK_WIDGET (obj)); - /* Connect signals */ - g_signal_connect (G_OBJECT (obj), - "key-press-event", - G_CALLBACK (on_key_pressed), NULL); - priv->display_name_changed_signal = g_signal_connect (modest_runtime_get_account_mgr (), "display_name_changed", @@ -1759,6 +1811,9 @@ modest_folder_view_new_full (TnyFolderStoreQuery *query, gboolean do_refresh) g_signal_connect (self, "expose-event", G_CALLBACK (modest_folder_view_on_map), NULL); + /* Hide headers by default */ + gtk_tree_view_set_headers_visible ((GtkTreeView *)self, FALSE); + return GTK_WIDGET(self); } @@ -2067,31 +2122,31 @@ filter_row (GtkTreeModel *model, GtkTreeIter *iter, gpointer data) /* apply special filters */ if (retval && (priv->filter & MODEST_FOLDER_VIEW_FILTER_HIDE_ACCOUNTS)) { if (TNY_IS_ACCOUNT (instance)) - return FALSE; + retval = FALSE; } if (retval && (priv->filter & MODEST_FOLDER_VIEW_FILTER_HIDE_FOLDERS)) { if (TNY_IS_FOLDER (instance)) - return FALSE; + retval = FALSE; } if (retval && (priv->filter & MODEST_FOLDER_VIEW_FILTER_HIDE_LOCAL_FOLDERS)) { if (TNY_IS_ACCOUNT (instance)) { if (modest_tny_account_is_virtual_local_folders (TNY_ACCOUNT (instance))) - return FALSE; + retval = FALSE; } else if (TNY_IS_FOLDER (instance)) { if (modest_tny_folder_is_local_folder (TNY_FOLDER (instance))) - return FALSE; + retval = FALSE; } } if (retval && (priv->filter & MODEST_FOLDER_VIEW_FILTER_HIDE_MCC_FOLDERS)) { if (TNY_IS_ACCOUNT (instance)) { if (modest_tny_account_is_memory_card_account (TNY_ACCOUNT (instance))) - return FALSE; + retval = FALSE; } else if (TNY_IS_FOLDER (instance)) { if (modest_tny_folder_is_memory_card_folder (TNY_FOLDER (instance))) - return FALSE; + retval = FALSE; } } @@ -2099,12 +2154,12 @@ filter_row (GtkTreeModel *model, GtkTreeIter *iter, gpointer data) /* A mailbox is a fake folder with an @ in the middle of the name */ if (!TNY_IS_FOLDER (instance) || !(tny_folder_get_caps (TNY_FOLDER (instance)) & TNY_FOLDER_CAPS_NOSELECT)) { - return FALSE; + retval = FALSE; } else { const gchar *folder_name; folder_name = tny_folder_get_name (TNY_FOLDER (instance)); if (!folder_name || strchr (folder_name, '@') == NULL) - return FALSE; + retval = FALSE; } } @@ -2183,6 +2238,50 @@ filter_row (GtkTreeModel *model, GtkTreeIter *iter, gpointer data) } } +#ifdef MODEST_TOOLKIT_HILDON2 + if (retval && (priv->live_search)) { + const gchar *needle; + needle = hildon_live_search_get_text (HILDON_LIVE_SEARCH (priv->live_search)); + if (needle && needle[0] != '\0') { + gchar *haystack; + gboolean is_local; + + haystack = g_strdup (fname); + if (type != TNY_FOLDER_TYPE_ROOT) { + is_local = modest_tny_folder_is_local_folder (TNY_FOLDER (instance)) || + modest_tny_folder_is_memory_card_folder (TNY_FOLDER (instance)); + if (is_local) { + TnyFolderType type = TNY_FOLDER_TYPE_UNKNOWN; + type = modest_tny_folder_get_local_or_mmc_folder_type (TNY_FOLDER (instance)); + if (type != TNY_FOLDER_TYPE_UNKNOWN) { + g_free (haystack); + haystack = g_strdup (modest_local_folder_info_get_type_display_name (type)); + } + } else { + } + } else { + if (modest_tny_account_is_virtual_local_folders (TNY_ACCOUNT (instance))) { + g_free (haystack); + haystack = g_strdup (priv->local_account_name); + } else if (modest_tny_account_is_memory_card_account (TNY_ACCOUNT (instance))) { + g_free (haystack); + haystack = g_strdup (tny_account_get_name (TNY_ACCOUNT (instance))); + } + } + + if (type == TNY_FOLDER_TYPE_INBOX && + g_str_has_suffix (haystack, "Inbox")) { + g_free (haystack); + haystack = g_strdup (_("mcen_me_folder_inbox")); + } + format_compact_style (&haystack, instance, priv->mailbox, FALSE, + priv->style == MODEST_FOLDER_VIEW_STYLE_SHOW_ALL, NULL); + retval = modest_text_utils_live_search_find (haystack, needle); + g_free (haystack); + } + } +#endif + /* Free */ g_object_unref (instance); g_free (fname); @@ -2740,42 +2839,6 @@ cmp_rows (GtkTreeModel *tree_model, GtkTreeIter *iter1, GtkTreeIter *iter2, /* - * This function manages the navigation through the folders using the - * keyboard or the hardware keys in the device - */ -static gboolean -on_key_pressed (GtkWidget *self, - GdkEventKey *event, - gpointer user_data) -{ - GtkTreeSelection *selection; - GtkTreeIter iter; - GtkTreeModel *model; - gboolean retval = FALSE; - - /* Up and Down are automatically managed by the treeview */ - if (event->keyval == GDK_Return) { - /* Expand/Collapse the selected row */ - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (self)); - if (gtk_tree_selection_get_selected (selection, &model, &iter)) { - GtkTreePath *path; - - path = gtk_tree_model_get_path (model, &iter); - - if (gtk_tree_view_row_expanded (GTK_TREE_VIEW (self), path)) - gtk_tree_view_collapse_row (GTK_TREE_VIEW (self), path); - else - gtk_tree_view_expand_row (GTK_TREE_VIEW (self), path, FALSE); - gtk_tree_path_free (path); - } - /* No further processing */ - retval = TRUE; - } - - return retval; -} - -/* * We listen to the changes in the local folder account name key, * because we want to show the right name in the view. The local * folder account name corresponds to the device name in the Maemo @@ -2884,36 +2947,6 @@ modest_folder_view_get_account_id_of_visible_server_account (ModestFolderView *s return (const gchar *) priv->visible_account_id; } -static gboolean -find_inbox_iter (GtkTreeModel *model, GtkTreeIter *iter, GtkTreeIter *inbox_iter) -{ - do { - GtkTreeIter child; - TnyFolderType type = TNY_FOLDER_TYPE_UNKNOWN; - - gtk_tree_model_get (model, iter, - TYPE_COLUMN, - &type, -1); - - gboolean result = FALSE; - if (type == TNY_FOLDER_TYPE_INBOX) { - result = TRUE; - } - if (result) { - *inbox_iter = *iter; - return TRUE; - } - - if (gtk_tree_model_iter_children (model, &child, iter)) { - if (find_inbox_iter (model, &child, inbox_iter)) - return TRUE; - } - - } while (gtk_tree_model_iter_next (model, iter)); - - return FALSE; -} - /* recursive */ static gboolean find_folder_iter (GtkTreeModel *model, GtkTreeIter *iter, GtkTreeIter *folder_iter, @@ -3248,7 +3281,7 @@ update_style (ModestFolderView *self) attr_list = pango_attr_list_new (); if (!gtk_style_lookup_color (gtk_widget_get_style (GTK_WIDGET (self)), "SecondaryTextColor", &style_color)) { - gdk_color_parse ("grey", &style_color); + gdk_color_parse (MODEST_SECONDARY_COLOR, &style_color); } attr = pango_attr_foreground_new (style_color.red, style_color.green, style_color.blue); pango_attr_list_insert (attr_list, attr); @@ -3412,7 +3445,9 @@ modest_folder_view_get_activity (ModestFolderView *self) g_return_val_if_fail (MODEST_IS_FOLDER_VIEW (self), FALSE); priv = MODEST_FOLDER_VIEW_GET_PRIVATE (self); - g_return_val_if_fail (get_inner_models (self, NULL, NULL, &inner_model), FALSE); + + if (!get_inner_models (self, NULL, NULL, &inner_model)) + return FALSE; if (TNY_IS_GTK_FOLDER_LIST_STORE (inner_model)) { return tny_gtk_folder_list_store_get_activity (TNY_GTK_FOLDER_LIST_STORE (inner_model)); @@ -3453,3 +3488,31 @@ modest_folder_view_get_model_tny_list (ModestFolderView *self) return ret_value; } + +#ifdef MODEST_TOOLKIT_HILDON2 +static gboolean +on_live_search_refilter (HildonLiveSearch *livesearch, + ModestFolderView *self) +{ + GtkTreeModel *filter_model; + + if (get_inner_models (self, &filter_model, NULL, NULL)) + gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter_model)); + + return TRUE; +} + +GtkWidget * +modest_folder_view_setup_live_search (ModestFolderView *self) +{ + ModestFolderViewPrivate *priv; + + g_return_val_if_fail (MODEST_IS_FOLDER_VIEW (self), NULL); + priv = MODEST_FOLDER_VIEW_GET_PRIVATE (self); + priv->live_search = hildon_live_search_new (); + + g_signal_connect (G_OBJECT (priv->live_search), "refilter", G_CALLBACK (on_live_search_refilter), self); + + return priv->live_search; +} +#endif