GList *cols = NULL;
GList *colwidths = NULL;
GList *colsortables = NULL;
- GtkTreeModel *sortable;
+ GtkTreeModel *sortable, *filter;
cursor = data = modest_conf_get_string (conf, key, NULL);
while (cursor && sscanf (cursor, "%d:%d:%d ", &col, &width, &sort) == 3) {
if (cols) {
GList *viewcolumns, *colcursor, *widthcursor;
modest_header_view_set_columns (header_view, cols, type);
- sortable = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view));
+ filter = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view));
+ sortable = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (filter));
widthcursor = colwidths;
colcursor = viewcolumns = gtk_tree_view_get_columns (GTK_TREE_VIEW(header_view));
}
if (sort_colid >= 0) {
- GtkTreeModel *sortable = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view));
+ GtkTreeModel *filter_model = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view));
+ GtkTreeModel *sortable = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (filter_model));
if (sort_colid == TNY_GTK_HEADER_LIST_MODEL_FLAGS_COLUMN)
modest_header_view_sort_by_column_id (header_view, 0, sort_type);
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sortable),
gboolean
modest_header_view_set_columns (ModestHeaderView *self, const GList *columns, TnyFolderType type)
{
- GtkTreeModel *sortable;
+ GtkTreeModel *sortable, *filter_model;
GtkTreeViewColumn *column=NULL;
GtkTreeSelection *selection = NULL;
GtkCellRenderer *renderer_header,
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(self));
gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE);
- sortable = gtk_tree_view_get_model (GTK_TREE_VIEW (self));
+ sortable = NULL;
+ filter_model = gtk_tree_view_get_model (GTK_TREE_VIEW (self));
+ if (GTK_IS_TREE_MODEL_FILTER (filter_model)) {
+ sortable = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (filter_model));
+ }
/* Add new columns */
for (cursor = columns; cursor; cursor = g_list_next(cursor)) {
set_folder_intern_get_headers_async_cb,
NULL, self);
- /* Create a tree model filter to hide and show rows for cut operations */
- filter_model = gtk_tree_model_filter_new (GTK_TREE_MODEL (headers), NULL);
- gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter_model),
- filter_row, self, NULL);
- g_object_unref (headers);
-
/* Init filter_row function to examine empty status */
priv->status = HEADER_VIEW_INIT;
/* Create sortable model */
- sortable = gtk_tree_model_sort_new_with_model (filter_model);
- g_object_unref (filter_model);
+ sortable = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (headers));
+ g_object_unref (headers);
+
+ /* Create a tree model filter to hide and show rows for cut operations */
+ filter_model = gtk_tree_model_filter_new (GTK_TREE_MODEL (sortable), NULL);
+ gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter_model),
+ filter_row, self, NULL);
+ g_object_unref (sortable);
/* install our special sorting functions */
cursor = cols = gtk_tree_view_get_columns (GTK_TREE_VIEW(self));
}
/* Set new model */
- gtk_tree_view_set_model (GTK_TREE_VIEW (self), sortable);
+ gtk_tree_view_set_model (GTK_TREE_VIEW (self), filter_model);
modest_header_view_notify_observers (self, sortable, tny_folder_get_id (folder));
- g_object_unref (sortable);
+ g_object_unref (filter_model);
/* Free */
g_list_free (cols);
GtkSortType sort_type)
{
ModestHeaderViewPrivate *priv = NULL;
- GtkTreeModel *sortable = NULL;
+ GtkTreeModel *sortable = NULL, *filter_model = NULL;
TnyFolderType type;
g_return_if_fail (self && MODEST_IS_HEADER_VIEW(self));
/* Get model and private data */
priv = MODEST_HEADER_VIEW_GET_PRIVATE (self);
- sortable = gtk_tree_view_get_model (GTK_TREE_VIEW (self));
+ filter_model = gtk_tree_view_get_model (GTK_TREE_VIEW (self));
+ if (GTK_IS_TREE_MODEL_FILTER (filter_model)) {
+ sortable = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (filter_model));
+ }
/* Sort tree model */
type = modest_tny_folder_guess_folder_type (priv->folder);
void
modest_header_view_refilter (ModestHeaderView *header_view)
{
- GtkTreeModel *model, *sortable = NULL;
+ GtkTreeModel *filter_model = NULL;
ModestHeaderViewPrivate *priv = NULL;
g_return_if_fail (header_view && MODEST_IS_HEADER_VIEW (header_view));
priv = MODEST_HEADER_VIEW_GET_PRIVATE(header_view);
/* Hide cut headers */
- sortable = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view));
- if (GTK_IS_TREE_MODEL_SORT (sortable)) {
- model = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (sortable));
- if (GTK_IS_TREE_MODEL_FILTER (model)) {
- priv->status = HEADER_VIEW_INIT;
- gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (model));
- }
+ filter_model = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view));
+ if (GTK_IS_TREE_MODEL_FILTER (filter_model)) {
+ priv->status = HEADER_VIEW_INIT;
+ gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter_model));
}
}
} else {
modest_header_view_set_filter_string (MODEST_HEADER_VIEW (self), NULL);
}
-
+
+ priv->live_search_timeout = 0;
+
+ return FALSE;
+}
+
+static gboolean
+on_live_search_refilter (HildonLiveSearch *livesearch,
+ ModestHeaderView *self)
+{
+ ModestHeaderViewPrivate *priv;
+ GtkTreeModel *model, *sortable, *filter;
+
+ priv = MODEST_HEADER_VIEW_GET_PRIVATE (self);
+
+ if (priv->live_search_timeout > 0) {
+ g_source_remove (priv->live_search_timeout);
+ priv->live_search_timeout = 0;
+ }
+
+ model = NULL;
+ filter = gtk_tree_view_get_model (GTK_TREE_VIEW (self));
+ if (GTK_IS_TREE_MODEL_FILTER (filter)) {
+ sortable = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (filter));
+ if (GTK_IS_TREE_MODEL_SORT (sortable)) {
+ model = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (sortable));
+ }
+ }
+
+ if (model && tny_list_get_length (TNY_LIST (model)) > 250) {
+ priv->live_search_timeout = g_timeout_add (1000, (GSourceFunc) on_live_search_timeout, self);
+ } else {
+ on_live_search_timeout (self);
+ }
+
return TRUE;
}