* src/modest-ui-dimming-rules.c:
[modest] / src / modest-ui-dimming-rules.c
index 37042ff..fe4b4cc 100644 (file)
@@ -78,7 +78,8 @@ modest_ui_dimming_rules_on_new_msg (ModestWindow *win, gpointer user_data)
                
        /* Check dimmed rule */ 
        if (!dimmed) {
-               dimmed = _msg_download_in_progress (MODEST_MSG_VIEW_WINDOW(win));
+               if (MODEST_IS_MSG_VIEW_WINDOW (win))
+                       dimmed = _msg_download_in_progress (MODEST_MSG_VIEW_WINDOW(win));
                if (dimmed)
                        modest_dimming_rule_set_notification (rule, "");
        }
@@ -191,6 +192,13 @@ modest_ui_dimming_rules_on_delete (ModestWindow *win, gpointer user_data)
 
                if (folder_view && gtk_widget_is_focus (folder_view)) 
                        dimmed = modest_ui_dimming_rules_on_delete_folder (win, rule);
+
+               if (header_view && folder_view &&
+                   !gtk_widget_is_focus (header_view) &&
+                   !gtk_widget_is_focus (folder_view)) {
+                       dimmed = TRUE;
+                       modest_dimming_rule_set_notification (rule, dgettext("hildon-common-strings", "ckct_ib_nothing_to_delete"));                    
+               }
        } else {
                dimmed = modest_ui_dimming_rules_on_delete_folder (win, rule);
        }
@@ -204,7 +212,7 @@ gboolean
 modest_ui_dimming_rules_on_delete_folder (ModestWindow *win, gpointer user_data)
 {
        ModestDimmingRule *rule = NULL;
-       TnyFolderType types[5];
+       TnyFolderType types[6];
        gboolean dimmed = FALSE;
 
        g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
@@ -216,6 +224,7 @@ modest_ui_dimming_rules_on_delete_folder (ModestWindow *win, gpointer user_data)
        types[2] = TNY_FOLDER_TYPE_SENT;
        types[3] = TNY_FOLDER_TYPE_INBOX;
        types[4] = TNY_FOLDER_TYPE_ROOT;
+       types[5] = TNY_FOLDER_TYPE_ARCHIVE;
 
                
        /* Check dimmed rule */ 
@@ -225,7 +234,7 @@ modest_ui_dimming_rules_on_delete_folder (ModestWindow *win, gpointer user_data)
                        modest_dimming_rule_set_notification (rule, _("mail_in_ui_folder_delete_error"));
        }
        if (!dimmed) {
-               dimmed = _selected_folder_is_any_of_type (win, types, 5);
+               dimmed = _selected_folder_is_any_of_type (win, types, 6);
                if (dimmed)
                        modest_dimming_rule_set_notification (rule, _("mail_in_ui_folder_delete_error"));
        }
@@ -256,8 +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));
-               if (dimmed)
-                       modest_dimming_rule_set_notification (rule, "");
+               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;
@@ -268,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);
@@ -278,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) {
@@ -291,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, "");
        }
@@ -368,9 +382,10 @@ modest_ui_dimming_rules_on_reply_msg (ModestWindow *win, gpointer user_data)
                                modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading"));
                }
                if (!dimmed) {
-                       dimmed = _msg_download_in_progress (MODEST_MSG_VIEW_WINDOW(win));
+                       if (MODEST_IS_MSG_VIEW_WINDOW (win))
+                               dimmed = _msg_download_in_progress (MODEST_MSG_VIEW_WINDOW (win));
                        if (dimmed)
-                               modest_dimming_rule_set_notification (rule, "");
+                               modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_reply"));
                }
        }
        
@@ -454,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)) {
@@ -464,14 +479,14 @@ modest_ui_dimming_rules_on_delete_msg (ModestWindow *win, gpointer user_data)
                                modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading"));
                }
                if (!dimmed) {
+                       dimmed = _marked_as_deleted (win);
+                       if (dimmed)
+                               modest_dimming_rule_set_notification (rule, _("mcen_ib_message_already_deleted"));
+               }
+               if (!dimmed) {
                        dimmed = !modest_msg_view_window_has_headers_model (MODEST_MSG_VIEW_WINDOW(win));
                        if (dimmed) {
-                               gchar *num = g_strdup("1");
-                               gchar *message = g_strdup_printf(_("mcen_nc_unable_to_delete_n_messages"), num);
-/*                             modest_dimming_rule_set_notification (rule, _("mcen_nc_unable_to_delete_n_messages")); */
-                               modest_dimming_rule_set_notification (rule, message);
-                               g_free(message);
-                               g_free(num);
+                               modest_dimming_rule_set_notification (rule, _CS("ckct_ib_unable_to_delete"));
                        }
                }
        }
@@ -530,7 +545,8 @@ modest_ui_dimming_rules_on_details (ModestWindow *win, gpointer user_data)
 
                /* Check dimmed rule */ 
                if (!dimmed) {
-                       dimmed = _msg_download_in_progress (MODEST_MSG_VIEW_WINDOW(win));
+                       if (MODEST_IS_MSG_VIEW_WINDOW (win))
+                               dimmed = _msg_download_in_progress (MODEST_MSG_VIEW_WINDOW (win));
                        if (dimmed)
                                modest_dimming_rule_set_notification (rule, "");
                }
@@ -665,7 +681,8 @@ modest_ui_dimming_rules_on_view_window_move_to (ModestWindow *win, gpointer user
                        modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading"));
        }
        if (!dimmed) {
-               dimmed = !modest_msg_view_window_has_headers_model (MODEST_MSG_VIEW_WINDOW(win));
+               if (MODEST_IS_MSG_VIEW_WINDOW (win))
+                       dimmed = !modest_msg_view_window_has_headers_model (MODEST_MSG_VIEW_WINDOW (win));
                if (dimmed) 
                        modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_move_mail_attachment"));
        }
@@ -952,9 +969,9 @@ modest_ui_dimming_rules_on_view_previous (ModestWindow *win, gpointer user_data)
                        modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading"));
        }
        if (!dimmed) {
-               dimmed = modest_msg_view_window_first_message_selected (MODEST_MSG_VIEW_WINDOW(win));
-               if (dimmed)
-                       modest_dimming_rule_set_notification (rule, "");
+               if (MODEST_IS_MSG_VIEW_WINDOW (win))
+                       dimmed = modest_msg_view_window_first_message_selected (MODEST_MSG_VIEW_WINDOW(win));
+               modest_dimming_rule_set_notification (rule, NULL);
        }               
 
        return dimmed;
@@ -977,9 +994,9 @@ modest_ui_dimming_rules_on_view_next (ModestWindow *win, gpointer user_data)
                        modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading"));
        }
        if (!dimmed) {
-               dimmed = modest_msg_view_window_last_message_selected (MODEST_MSG_VIEW_WINDOW(win));
-               if (dimmed)
-                       modest_dimming_rule_set_notification (rule, "");
+               if (MODEST_IS_MSG_VIEW_WINDOW (win))
+                       dimmed = modest_msg_view_window_last_message_selected (MODEST_MSG_VIEW_WINDOW (win));
+               modest_dimming_rule_set_notification (rule, NULL);
        }               
 
        return dimmed;
@@ -1023,7 +1040,7 @@ modest_ui_dimming_rules_on_cancel_sending (ModestWindow *win, gpointer user_data
        }
        if (!dimmed) {
                dimmed = !_sending_in_progress (win);
-               if (dimmed) 
+               if (dimmed)
                        modest_dimming_rule_set_notification (rule, "");
        }
 
@@ -1079,8 +1096,6 @@ _marked_as_deleted (ModestWindow *win)
        gboolean result = FALSE;
        TnyHeaderFlags flags;
 
-       g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
-       
        flags = TNY_HEADER_FLAG_DELETED; 
 
        /* Check dimmed rule */ 
@@ -1155,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 */
@@ -1204,8 +1237,6 @@ _selected_folder_is_MMC_or_POP_root (ModestMainWindow *win)
 }
 
 
-
-
 static gboolean
 _selected_folder_is_empty (ModestMainWindow *win)
 {
@@ -1291,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 */
@@ -1339,11 +1370,8 @@ _folder_is_any_of_type (TnyFolder *folder,
        g_return_val_if_fail (TNY_IS_FOLDER(folder), FALSE);
 
        /* Get folder type */
-       if (modest_tny_folder_is_local_folder (folder))
-               folder_type = modest_tny_folder_get_local_folder_type (folder);         
-       else 
-               folder_type = modest_tny_folder_guess_folder_type (folder);             
-       
+       folder_type = modest_tny_folder_guess_folder_type (folder);
+               
        /* Check foler type */
        for (i=0; i < ntypes; i++) {
                result = result || folder_type == types[i];
@@ -1644,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)
@@ -1667,15 +1698,24 @@ _selected_msg_marked_as (ModestWindow *win,
                         TnyHeaderFlags mask, 
                         gboolean opposite)
 {
+       ModestWindow *main_window = NULL;
        GtkWidget *header_view = NULL;
        TnyList *selected_headers = NULL;
        TnyIterator *iter = NULL;
        TnyHeader *header = NULL;
-       TnyHeaderFlags flags;
+       TnyHeaderFlags flags = 0;
        gboolean result = FALSE;
 
+       if (MODEST_IS_MAIN_WINDOW (win))
+               main_window = win;
+       else {
+               main_window = 
+                       modest_window_mgr_get_main_window (modest_runtime_get_window_mgr ());           
+       }
+               
+
        /* Get header view to check selected messages */
-       header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
+       header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(main_window),
                                                           MODEST_WIDGET_TYPE_HEADER_VIEW);
 
        /* Check no selection */
@@ -1691,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);
        }
 
@@ -1730,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);
@@ -1754,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);
        }
 
@@ -1814,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 */
@@ -1832,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);
 
@@ -1867,10 +1915,10 @@ _invalid_folder_for_purge (ModestWindow *win,
                /* Get folder and account of message */
                msg = modest_msg_view_window_get_message (MODEST_MSG_VIEW_WINDOW (win));
                g_return_val_if_fail(msg != NULL, TRUE);                        
-               folder = tny_msg_get_folder (msg);              
+               folder = tny_msg_get_folder (msg);      
                if (folder == NULL) {
                        modest_dimming_rule_set_notification (rule, _("mail_ib_unable_to_purge_attachments"));
-                       goto frees;                     
+                       goto frees;
                }
                g_object_unref (msg);
        } else if (MODEST_IS_MAIN_WINDOW (win)) {
@@ -1880,9 +1928,7 @@ _invalid_folder_for_purge (ModestWindow *win,
                        return FALSE;
                folder = TNY_FOLDER (modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view)));
                if (folder == NULL || ! TNY_IS_FOLDER (folder))
-                       return FALSE;
-               g_object_ref (folder);
-               
+                       goto frees;             
        } else {
                g_return_val_if_reached (FALSE);
        }
@@ -1908,12 +1954,17 @@ _invalid_folder_for_purge (ModestWindow *win,
                /* If it's POP then dim */
                if (modest_protocol_info_get_transport_store_protocol (proto_str) == 
                    MODEST_PROTOCOL_STORE_POP) {
-                       GList *attachments;
-                       gint n_selected;
+                       GList *attachments = NULL;
+                       gint n_selected = 0;
                        result = TRUE;
-                       attachments = modest_msg_view_window_get_attachments (MODEST_MSG_VIEW_WINDOW(win));
-                       n_selected = g_list_length (attachments);
-                       g_list_free (attachments);
+                       
+                       /* TODO: This check is here to prevent a gwarning, but this looks like a logic error.
+                        * murrayc */
+                       if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
+                               attachments = modest_msg_view_window_get_attachments (MODEST_MSG_VIEW_WINDOW(win));
+                               n_selected = g_list_length (attachments);
+                               g_list_free (attachments);
+                       }
                        
                        modest_dimming_rule_set_notification (rule, 
                                                              ngettext ("mail_ib_unable_to_pure_attach_pop_mail_singular",