* Fixes NB#101681, do not show move/delete/rename folder options if there are not...
authorSergio Villar Senin <svillar@igalia.com>
Tue, 17 Feb 2009 10:45:02 +0000 (10:45 +0000)
committerSergio Villar Senin <svillar@igalia.com>
Tue, 17 Feb 2009 10:45:02 +0000 (10:45 +0000)
pmo-trunk-r7504

src/hildon2/modest-folder-window.c
src/modest-ui-dimming-rules.c
src/widgets/modest-folder-view.c
src/widgets/modest-folder-view.h

index 886c26a..d421ceb 100644 (file)
@@ -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_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));
        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));
index 23a9254..02a7353 100644 (file)
@@ -41,6 +41,7 @@
 #include "modest-tny-msg.h"
 #include "modest-tny-mime-part.h"
 #include "modest-text-utils.h"
 #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 <widgets/modest-attachments-view.h>
 #include <modest-runtime.h>
 #include "modest-address-book.h"
 #include <widgets/modest-attachments-view.h>
 #include <modest-runtime.h>
@@ -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 gboolean _send_receive_in_progress (ModestWindow *win);
 static gboolean _msgs_send_in_progress (void);
 
-
 static DimmedState *
 _define_main_window_dimming_state (ModestMainWindow *window)
 {
 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;
 
        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);
 
        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;
        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)
                        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)
        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"));     
 
        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;
 }
 
        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)
        /* 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;
 }
 
        return dimmed;
 }
index 51c67a2..2a956e2 100644 (file)
@@ -3635,3 +3635,36 @@ modest_folder_view_unset_filter (ModestFolderView *self,
                gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter_model));  
        }
 }
                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;
+}
index b1cb67d..5ecd1ad 100644 (file)
@@ -34,6 +34,7 @@
 #include <tny-gtk-account-list-model.h>
 #include <tny-account-store.h>
 #include <modest-tny-account-store.h>
 #include <tny-gtk-account-list-model.h>
 #include <tny-account-store.h>
 #include <modest-tny-account-store.h>
+#include <modest-tny-folder.h>
 
 G_BEGIN_DECLS
 
 
 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);
 
 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
 
 
 G_END_DECLS