From ec27da3222537c88f6458f52b5a1e2f19bf01fcd Mon Sep 17 00:00:00 2001 From: Jose Dapena Paz Date: Mon, 22 Dec 2008 11:34:08 +0000 Subject: [PATCH] Make folder view of new folder dialog show only folders able to have children pmo-trunk-r6975 --- src/hildon2/modest-platform.c | 2 ++ src/widgets/modest-folder-view.c | 33 +++++++++++++++++++++++++++++++++ src/widgets/modest-folder-view.h | 16 ++++++++++++++++ 3 files changed, 51 insertions(+) diff --git a/src/hildon2/modest-platform.c b/src/hildon2/modest-platform.c index 61e40e2..26fa4ba 100644 --- a/src/hildon2/modest-platform.c +++ b/src/hildon2/modest-platform.c @@ -696,6 +696,8 @@ folder_chooser_dialog_run (ModestFolderView *original) userdata.dialog = hildon_dialog_new (); pannable = hildon_pannable_area_new (); folder_view = modest_platform_create_folder_view (NULL); + modest_folder_view_set_filter (MODEST_FOLDER_VIEW (folder_view), + MODEST_FOLDER_VIEW_FILTER_CAN_HAVE_FOLDERS); modest_folder_view_copy_model (MODEST_FOLDER_VIEW (original), MODEST_FOLDER_VIEW (folder_view)); diff --git a/src/widgets/modest-folder-view.c b/src/widgets/modest-folder-view.c index a882bf8..ff51e30 100644 --- a/src/widgets/modest-folder-view.c +++ b/src/widgets/modest-folder-view.c @@ -220,6 +220,7 @@ struct _ModestFolderViewPrivate { /* Filter tree model */ gchar **hidding_ids; guint n_selected; + ModestFolderViewFilter filter; TnyFolderStoreQuery *query; guint timer_expander; @@ -1028,6 +1029,7 @@ modest_folder_view_init (ModestFolderView *obj) priv->clipboard = modest_runtime_get_email_clipboard (); priv->hidding_ids = NULL; priv->n_selected = 0; + priv->filter = MODEST_FOLDER_VIEW_FILTER_NONE; priv->reselect = FALSE; priv->show_non_move = TRUE; @@ -1658,6 +1660,18 @@ filter_row (GtkTreeModel *model, GtkTreeIter *iter, gpointer data) } } + /* apply special filters */ + if (retval && (priv->filter & MODEST_FOLDER_VIEW_FILTER_CAN_HAVE_FOLDERS)) { + if (TNY_IS_FOLDER (instance)) { + TnyFolderCaps capabilities; + + capabilities = tny_folder_get_caps (TNY_FOLDER (instance)); + retval = !(capabilities & TNY_FOLDER_CAPS_NOCHILDREN); + } else if (TNY_IS_ACCOUNT (instance)) { + retval = FALSE; + } + } + /* Free */ g_object_unref (instance); @@ -3292,3 +3306,22 @@ on_notify_style (GObject *obj, GParamSpec *spec, gpointer userdata) } } +void +modest_folder_view_set_filter (ModestFolderView *self, + ModestFolderViewFilter filter) +{ + ModestFolderViewPrivate *priv; + GtkTreeModel *filter_model; + + g_return_if_fail (MODEST_IS_FOLDER_VIEW (self)); + priv = MODEST_FOLDER_VIEW_GET_PRIVATE (self); + + priv->filter = filter; + + filter_model = gtk_tree_view_get_model (GTK_TREE_VIEW (self)); + if (!GTK_IS_TREE_MODEL_FILTER(filter_model)) { + g_warning ("BUG: %s: not a valid filter model", __FUNCTION__); + return; + } + gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter_model)); +} diff --git a/src/widgets/modest-folder-view.h b/src/widgets/modest-folder-view.h index 13d5701..5c5ae4a 100644 --- a/src/widgets/modest-folder-view.h +++ b/src/widgets/modest-folder-view.h @@ -55,6 +55,11 @@ typedef enum _ModestFolderViewCellStyle { MODEST_FOLDER_VIEW_CELL_STYLE_COMPACT } ModestFolderViewCellStyle; +typedef enum _ModestFolderViewFilter { + MODEST_FOLDER_VIEW_FILTER_NONE = 0, + MODEST_FOLDER_VIEW_FILTER_CAN_HAVE_FOLDERS = 1 << 0, +} ModestFolderViewFilter; + typedef struct _ModestFolderView ModestFolderView; typedef struct _ModestFolderViewClass ModestFolderViewClass; @@ -261,6 +266,17 @@ void modest_folder_view_disable_next_folder_selection (ModestFolderView *self); void modest_folder_view_set_cell_style (ModestFolderView *self, ModestFolderViewCellStyle cell_style); +/** + * modest_folder_view_filter: + * @self: a #ModestFolderView + * @filter: a filter mask to be applied to files + * + * sets the special filter to be applied (affects visibility of items). + * It's a mask, and filters applied are applied with an AND. + */ +void modest_folder_view_set_filter (ModestFolderView *self, + ModestFolderViewFilter filter); + G_END_DECLS #endif /* __MODEST_FOLDER_VIEW_H__ */ -- 1.7.9.5