From: Sergio Villar Senin Date: Tue, 17 Feb 2009 10:45:02 +0000 (+0000) Subject: * Fixes NB#101681, do not show move/delete/rename folder options if there are not... X-Git-Tag: git_migration_finished~584 X-Git-Url: http://vcs.maemo.org/git/?a=commitdiff_plain;h=9d1e73f74e3c00f79daefb83ed42e9d65aa2f1fe;hp=349e76f570b972d7a499eafba7696ddd8dacacff;p=modest * Fixes NB#101681, do not show move/delete/rename folder options if there are not folders to delete/move ... pmo-trunk-r7504 --- diff --git a/src/hildon2/modest-folder-window.c b/src/hildon2/modest-folder-window.c index 886c26a..d421ceb 100644 --- a/src/hildon2/modest-folder-window.c +++ b/src/hildon2/modest-folder-window.c @@ -387,7 +387,7 @@ static void setup_menu (ModestFolderWindow *self) NULL); modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_rename_folder"), NULL, APP_MENU_CALLBACK (set_rename_edit_mode), - NULL); + MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_rename_folder)); modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_move_folder"), NULL, APP_MENU_CALLBACK (set_moveto_edit_mode), MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_folder_window_move_to)); diff --git a/src/modest-ui-dimming-rules.c b/src/modest-ui-dimming-rules.c index 23a9254..02a7353 100644 --- a/src/modest-ui-dimming-rules.c +++ b/src/modest-ui-dimming-rules.c @@ -41,6 +41,7 @@ #include "modest-tny-msg.h" #include "modest-tny-mime-part.h" #include "modest-text-utils.h" +#include "widgets/modest-folder-view.h" #include "modest-address-book.h" #include #include @@ -83,7 +84,6 @@ static void fill_list_of_caches (gpointer key, gpointer value, gpointer userdata static gboolean _send_receive_in_progress (ModestWindow *win); static gboolean _msgs_send_in_progress (void); - static DimmedState * _define_main_window_dimming_state (ModestMainWindow *window) { @@ -578,24 +578,35 @@ modest_ui_dimming_rules_on_rename_folder (ModestWindow *win, gpointer user_data) TnyFolderType types[4]; gboolean dimmed = FALSE; - g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE); g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE); rule = MODEST_DIMMING_RULE (user_data); - types[0] = TNY_FOLDER_TYPE_DRAFTS; + types[0] = TNY_FOLDER_TYPE_DRAFTS; types[1] = TNY_FOLDER_TYPE_OUTBOX; types[2] = TNY_FOLDER_TYPE_SENT; types[3] = TNY_FOLDER_TYPE_ARCHIVE; - - /* Check dimmed rule */ - dimmed = _selected_folder_not_renameable (MODEST_MAIN_WINDOW(win)); - if (dimmed) - modest_dimming_rule_set_notification (rule, ""); - if (!dimmed) { - dimmed = _selected_folder_is_root_or_inbox (MODEST_MAIN_WINDOW(win)); + + /* Check dimmed rule */ + if (MODEST_IS_MAIN_WINDOW (win)) { + dimmed = _selected_folder_not_renameable (MODEST_MAIN_WINDOW(win)); if (dimmed) modest_dimming_rule_set_notification (rule, ""); + if (!dimmed) { + dimmed = _selected_folder_is_root_or_inbox (MODEST_MAIN_WINDOW(win)); + if (dimmed) + modest_dimming_rule_set_notification (rule, ""); + } } + +#ifdef MODEST_TOOLKIT_HILDON2 + if (MODEST_IS_FOLDER_WINDOW (win)) { + ModestFolderView *folder_view; + folder_view = modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (win)); + dimmed = !modest_folder_view_any_folder_fulfils_rules (folder_view, + MODEST_FOLDER_RULES_FOLDER_NON_RENAMEABLE); + } +#endif + if (!dimmed) { dimmed = _selected_folder_is_any_of_type (win, types, 4); if (dimmed) @@ -1243,6 +1254,15 @@ modest_ui_dimming_rules_on_folder_window_move_to (ModestWindow *win, gpointer us if (dimmed) modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading")); +#ifdef MODEST_TOOLKIT_HILDON2 + if (MODEST_IS_FOLDER_WINDOW (win)) { + ModestFolderView *folder_view; + folder_view = modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (win)); + dimmed = !modest_folder_view_any_folder_fulfils_rules (folder_view, + MODEST_FOLDER_RULES_FOLDER_NON_MOVEABLE); + } +#endif + return dimmed; } @@ -1259,7 +1279,16 @@ modest_ui_dimming_rules_on_folder_window_delete (ModestWindow *win, gpointer use /* Check dimmed rule */ dimmed = _transfer_mode_enabled (win); if (dimmed) - modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading")); + modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading")); + +#ifdef MODEST_TOOLKIT_HILDON2 + if (MODEST_IS_FOLDER_WINDOW (win)) { + ModestFolderView *folder_view; + folder_view = modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (win)); + dimmed = !modest_folder_view_any_folder_fulfils_rules (folder_view, + MODEST_FOLDER_RULES_FOLDER_NON_DELETABLE); + } +#endif return dimmed; } diff --git a/src/widgets/modest-folder-view.c b/src/widgets/modest-folder-view.c index 51c67a2..2a956e2 100644 --- a/src/widgets/modest-folder-view.c +++ b/src/widgets/modest-folder-view.c @@ -3635,3 +3635,36 @@ modest_folder_view_unset_filter (ModestFolderView *self, gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter_model)); } } + +gboolean +modest_folder_view_any_folder_fulfils_rules (ModestFolderView *self, + ModestTnyFolderRules rules) +{ + GtkTreeModel *filter_model; + GtkTreeIter iter; + gboolean fulfil = FALSE; + + if (!get_inner_models (self, &filter_model, NULL, NULL)) + return FALSE; + + if (!gtk_tree_model_get_iter_first (filter_model, &iter)) + return FALSE; + + do { + TnyFolderStore *folder; + + gtk_tree_model_get (filter_model, &iter, INSTANCE_COLUMN, &folder, -1); + if (folder) { + if (TNY_IS_FOLDER (folder)) { + ModestTnyFolderRules folder_rules = modest_tny_folder_get_rules (TNY_FOLDER (folder)); + /* Folder rules are negative: non_writable, non_deletable... */ + if (!(folder_rules & rules)) + fulfil = TRUE; + } + g_object_unref (folder); + } + + } while (gtk_tree_model_iter_next (filter_model, &iter) && !fulfil); + + return fulfil; +} diff --git a/src/widgets/modest-folder-view.h b/src/widgets/modest-folder-view.h index b1cb67d..5ecd1ad 100644 --- a/src/widgets/modest-folder-view.h +++ b/src/widgets/modest-folder-view.h @@ -34,6 +34,7 @@ #include #include #include +#include G_BEGIN_DECLS @@ -293,6 +294,8 @@ void modest_folder_view_set_filter (ModestFolderView *self, void modest_folder_view_unset_filter (ModestFolderView *self, ModestFolderViewFilter filter); +gboolean modest_folder_view_any_folder_fulfils_rules (ModestFolderView *self, + ModestTnyFolderRules rules); G_END_DECLS