* src/modest-ui-dimming-rules.c:
[modest] / src / modest-ui-dimming-rules.c
index fac5d9d..fe4b4cc 100644 (file)
@@ -265,7 +265,12 @@ modest_ui_dimming_rules_on_sort (ModestWindow *win, gpointer user_data)
        /* Check dimmed rule */ 
        if (!dimmed) {
                dimmed = _selected_folder_is_root (MODEST_MAIN_WINDOW(win));
-               modest_dimming_rule_set_notification (rule, NULL);
+               modest_dimming_rule_set_notification (rule, _CS("ckdg_ib_nothing_to_sort"));
+       }
+
+       if (!dimmed) {
+               dimmed = _selected_folder_is_empty (MODEST_MAIN_WINDOW(win));
+               modest_dimming_rule_set_notification (rule, _CS("ckdg_ib_nothing_to_sort"));
        }
 
        return dimmed;
@@ -276,7 +281,7 @@ gboolean
 modest_ui_dimming_rules_on_rename_folder (ModestWindow *win, gpointer user_data)
 {
        ModestDimmingRule *rule = NULL;
-       TnyFolderType types[3];
+       TnyFolderType types[4];
        gboolean dimmed = FALSE;
 
        g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
@@ -286,6 +291,7 @@ modest_ui_dimming_rules_on_rename_folder (ModestWindow *win, gpointer user_data)
        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 */ 
        if (!dimmed) {
@@ -299,7 +305,7 @@ modest_ui_dimming_rules_on_rename_folder (ModestWindow *win, gpointer user_data)
                        modest_dimming_rule_set_notification (rule, "");
        }
        if (!dimmed) {
-               dimmed = _selected_folder_is_any_of_type (win, types, 3);
+               dimmed = _selected_folder_is_any_of_type (win, types, 4);
                if (dimmed)
                        modest_dimming_rule_set_notification (rule, "");
        }
@@ -463,7 +469,7 @@ modest_ui_dimming_rules_on_delete_msg (ModestWindow *win, gpointer user_data)
                if (!dimmed) {
                        dimmed = _selected_msg_sent_in_progress (win);
                        if (dimmed)
-                               modest_dimming_rule_set_notification (rule, _("ckct_ib_unable_to_delete"));
+                               modest_dimming_rule_set_notification (rule, _CS("ckct_ib_unable_to_delete"));
                }
        } 
        else if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
@@ -480,7 +486,7 @@ modest_ui_dimming_rules_on_delete_msg (ModestWindow *win, gpointer user_data)
                if (!dimmed) {
                        dimmed = !modest_msg_view_window_has_headers_model (MODEST_MSG_VIEW_WINDOW(win));
                        if (dimmed) {
-                               modest_dimming_rule_set_notification (rule, _("ckct_ib_unable_to_delete"));
+                               modest_dimming_rule_set_notification (rule, _CS("ckct_ib_unable_to_delete"));
                        }
                }
        }
@@ -1164,6 +1170,24 @@ _selected_folder_is_root (ModestMainWindow *win)
 
        g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
 
+       /* All accounts are root items: */
+       GtkWidget *folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
+                                                          MODEST_WIDGET_TYPE_FOLDER_VIEW);
+       if (folder_view) {                                      
+               gboolean is_account = FALSE;
+               TnyFolderStore *folder_store = 
+                       modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
+               if (folder_store) {
+                       is_account = TNY_IS_ACCOUNT (folder_store);
+                       g_object_unref (folder_store);
+                       folder_store = NULL;
+               }
+               
+               if (is_account)
+                       return TRUE;
+       }
+               
+       /* Try something more precise: */
        types[0] = TNY_FOLDER_TYPE_ROOT; 
 
        /* Check folder type */
@@ -1298,7 +1322,7 @@ _selected_folder_is_any_of_type (ModestWindow *win,
        guint i=0;
        gboolean result = FALSE;
 
-       /*Get curent folder */
+       /*Get current folder */
        if (MODEST_IS_MAIN_WINDOW(win)) {
 
                /* Get folder view */
@@ -1347,7 +1371,7 @@ _folder_is_any_of_type (TnyFolder *folder,
 
        /* Get folder type */
        folder_type = modest_tny_folder_guess_folder_type (folder);
-       
+               
        /* Check foler type */
        for (i=0; i < ntypes; i++) {
                result = result || folder_type == types[i];
@@ -1648,9 +1672,12 @@ _already_opened_msg (ModestWindow *win,
        found = FALSE;
        while (!tny_iterator_is_done (iter)) {
                header = TNY_HEADER (tny_iterator_get_current (iter));
-               found = modest_window_mgr_find_registered_header (mgr,header, NULL);
+               if (header) {
+                       found = modest_window_mgr_find_registered_header (mgr,header, NULL);
                
-               g_object_unref (header);
+                       g_object_unref (header);
+               }
+
                tny_iterator_next (iter);
 
                if (found)
@@ -1676,7 +1703,7 @@ _selected_msg_marked_as (ModestWindow *win,
        TnyList *selected_headers = NULL;
        TnyIterator *iter = NULL;
        TnyHeader *header = NULL;
-       TnyHeaderFlags flags;
+       TnyHeaderFlags flags = 0;
        gboolean result = FALSE;
 
        if (MODEST_IS_MAIN_WINDOW (win))
@@ -1704,14 +1731,16 @@ _selected_msg_marked_as (ModestWindow *win,
        iter = tny_list_create_iterator (selected_headers);
        while (!tny_iterator_is_done (iter) && !result) {
                header = TNY_HEADER (tny_iterator_get_current (iter));
+               if (header) {
+                       flags = tny_header_get_flags (header);
+                       if (opposite)
+                               result = (flags & mask) == 0; 
+                       else
+                               result = (flags & mask) != 0; 
 
-               flags = tny_header_get_flags (header);
-               if (opposite)
-                       result = (flags & mask) == 0; 
-               else
-                       result = (flags & mask) != 0; 
+                       g_object_unref (header);
+               }
 
-               g_object_unref (header);
                tny_iterator_next (iter);
        }
 
@@ -1743,7 +1772,7 @@ _msg_download_completed (ModestMainWindow *win)
        TnyList *selected_headers = NULL;
        TnyIterator *iter = NULL;
        TnyHeader *header = NULL;
-       TnyHeaderFlags flags;
+       TnyHeaderFlags flags = 0;
        gboolean result = FALSE;
 
        g_return_val_if_fail (MODEST_IS_MAIN_WINDOW (win), FALSE);
@@ -1767,14 +1796,16 @@ _msg_download_completed (ModestMainWindow *win)
        iter = tny_list_create_iterator (selected_headers);
        while (!tny_iterator_is_done (iter) && result) {
                header = TNY_HEADER (tny_iterator_get_current (iter));
-                       
-               flags = tny_header_get_flags (header);
-               /* TODO: is this the right flag?, it seems that some
-                  headers that have been previously downloaded do not
-                  come with it */
-               result = (flags & TNY_HEADER_FLAG_CACHED);
+               if (header) {
+                       flags = tny_header_get_flags (header);
+                       /* TODO: is this the right flag?, it seems that some
+                          headers that have been previously downloaded do not
+                          come with it */
+                       result = (flags & TNY_HEADER_FLAG_CACHED);
+
+                       g_object_unref (header);
+               }
 
-               g_object_unref (header);
                tny_iterator_next (iter);
        }
 
@@ -1827,17 +1858,22 @@ _selected_msg_sent_in_progress (ModestWindow *win)
                if (!header_list) return FALSE;
                iter = tny_list_create_iterator (header_list);
                header = TNY_HEADER (tny_iterator_get_current (iter));
-
-               /* Get message id */
-               id = g_strdup(tny_header_get_message_id (header));
+               if (header) {
+                       /* Get message id */
+                       id = g_strdup(tny_header_get_message_id (header));
+                       g_object_unref (header);
+               }
                
         } else if (MODEST_IS_MSG_VIEW_WINDOW(win)) {
                
                /* Get message header */
                header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW(win));
+               if (header) {
+                       /* Get message id */
+                       id = g_strdup(tny_header_get_message_id (header));
 
-               /* Get message id */
-               id = g_strdup(tny_header_get_message_id (header));
+                       g_object_unref (header);
+               }
        }
 
        /* Check if msg id is being processed inside send queue */
@@ -1845,7 +1881,6 @@ _selected_msg_sent_in_progress (ModestWindow *win)
 
        /* Free */
        g_free(id);
-       g_object_unref (header);
        g_object_unref(header_list);
        g_object_unref(iter);