From: Jose Dapena Paz Date: Wed, 14 Jan 2009 09:48:39 +0000 (+0000) Subject: Added ModestFolderView filters based on folder rules X-Git-Tag: git_migration_finished~807 X-Git-Url: http://git.maemo.org/git/?p=modest;a=commitdiff_plain;h=fbbf52207a13eb7ac6f27180359916856d45978c Added ModestFolderView filters based on folder rules pmo-trunk-r7139 --- diff --git a/src/hildon2/modest-folder-window.c b/src/hildon2/modest-folder-window.c index 11aa375..a1bd524 100644 --- a/src/hildon2/modest-folder-window.c +++ b/src/hildon2/modest-folder-window.c @@ -454,3 +454,32 @@ modest_folder_window_pack_toolbar (ModestHildon2Window *self, gtk_box_pack_end (GTK_BOX (priv->top_vbox), toolbar, FALSE, FALSE, 0); } } + +static void +edit_mode_changed (ModestFolderWindow *folder_window, + gint edit_mode_id, + ModestFolderWindow *self) +{ + ModestFolderWindowPrivate *priv; + ModestFolderViewFilter filter = MODEST_FOLDER_VIEW_FILTER_NONE; + + g_return_if_fail (MODEST_IS_FOLDER_WINDOW (self)); + priv = MODEST_FOLDER_WINDOW_GET_PRIVATE (self); + + switch (edit_mode_id) { + case EDIT_MODE_COMMAND_MOVE: + filter = MODEST_FOLDER_VIEW_FILTER_MOVEABLE; + break; + case EDIT_MODE_COMMAND_DELETE: + filter = MODEST_FOLDER_VIEW_FILTER_DELETABLE; + break; + case EDIT_MODE_COMMAND_RENAME: + filter = MODEST_FOLDER_VIEW_FILTER_RENAMEABLE; + break; + case MODEST_HILDON2_WINDOW_EDIT_MODE_NONE: + filter = MODEST_FOLDER_VIEW_FILTER_NONE; + break; + } + + modest_folder_view_set_filter (MODEST_FOLDER_VIEW (priv->folder_view), filter); +} diff --git a/src/widgets/modest-folder-view.c b/src/widgets/modest-folder-view.c index 810976f..e813583 100644 --- a/src/widgets/modest-folder-view.c +++ b/src/widgets/modest-folder-view.c @@ -1561,6 +1561,7 @@ filter_row (GtkTreeModel *model, GtkTreeIter *iter, gpointer data) guint i; gboolean found = FALSE; gboolean cleared = FALSE; + ModestTnyFolderRules rules = 0; g_return_val_if_fail (MODEST_IS_FOLDER_VIEW (data), FALSE); priv = MODEST_FOLDER_VIEW_GET_PRIVATE (data); @@ -1716,6 +1717,34 @@ filter_row (GtkTreeModel *model, GtkTreeIter *iter, gpointer data) } } + if (retval && TNY_IS_FOLDER (instance)) { + rules = modest_tny_folder_get_rules (TNY_FOLDER (instance)); + } + + if (retval && (priv->filter & MODEST_FOLDER_VIEW_FILTER_DELETABLE)) { + if (TNY_IS_FOLDER (instance)) { + retval = !(rules & MODEST_FOLDER_RULES_FOLDER_NON_DELETABLE); + } else if (TNY_IS_ACCOUNT (instance)) { + retval = FALSE; + } + } + + if (retval && (priv->filter & MODEST_FOLDER_VIEW_FILTER_RENAMEABLE)) { + if (TNY_IS_FOLDER (instance)) { + retval = !(rules & MODEST_FOLDER_RULES_FOLDER_NON_RENAMEABLE); + } else if (TNY_IS_ACCOUNT (instance)) { + retval = FALSE; + } + } + + if (retval && (priv->filter & MODEST_FOLDER_VIEW_FILTER_MOVEABLE)) { + if (TNY_IS_FOLDER (instance)) { + retval = !(rules & MODEST_FOLDER_RULES_FOLDER_NON_MOVEABLE); + } else if (TNY_IS_ACCOUNT (instance)) { + retval = FALSE; + } + } + /* Free */ g_object_unref (instance); diff --git a/src/widgets/modest-folder-view.h b/src/widgets/modest-folder-view.h index 211b7a5..2748512 100644 --- a/src/widgets/modest-folder-view.h +++ b/src/widgets/modest-folder-view.h @@ -59,6 +59,9 @@ typedef enum _ModestFolderViewFilter { MODEST_FOLDER_VIEW_FILTER_NONE = 0, MODEST_FOLDER_VIEW_FILTER_CAN_HAVE_FOLDERS = 1 << 0, MODEST_FOLDER_VIEW_FILTER_HIDE_MANDATORY_FOLDERS = 1 << 1, + MODEST_FOLDER_VIEW_FILTER_RENAMEABLE = 1 << 2, + MODEST_FOLDER_VIEW_FILTER_MOVEABLE = 1 << 3, + MODEST_FOLDER_VIEW_FILTER_DELETABLE = 1 << 4, } ModestFolderViewFilter; typedef struct _ModestFolderView ModestFolderView;