Added bug 90185 to changelog
[modest] / src / modest-ui-dimming-rules.c
index ffd97f6..960840a 100644 (file)
@@ -99,6 +99,7 @@ _define_main_window_dimming_state (ModestMainWindow *window)
        gboolean all_seen = TRUE;
        gboolean all_cached = TRUE;
        gboolean all_has_attach = TRUE;
+       TnyFolder *folder = NULL;
 
        g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(window), NULL);
 
@@ -173,23 +174,28 @@ _define_main_window_dimming_state (ModestMainWindow *window)
                        state->any_has_attachments = flags & TNY_HEADER_FLAG_ATTACHMENTS;
        
                /* sent in progress */
-               msg_uid = modest_tny_send_queue_get_msg_id (header);
-               if (!state->sent_in_progress) {
-                       cache_mgr = modest_runtime_get_cache_mgr ();
-                       send_queue_cache = modest_cache_mgr_get_cache (cache_mgr,
-                                                                      MODEST_CACHE_MGR_CACHE_TYPE_SEND_QUEUE);
-                       
-                       g_hash_table_foreach (send_queue_cache, (GHFunc) fill_list_of_caches, &send_queues);
+               folder = tny_header_get_folder (header);
+               if (folder) {
+                       if (modest_tny_folder_guess_folder_type (folder) == TNY_FOLDER_TYPE_OUTBOX) {
+                               msg_uid = modest_tny_send_queue_get_msg_id (header);
+                               if (!state->sent_in_progress) {
+                                       cache_mgr = modest_runtime_get_cache_mgr ();
+                                       send_queue_cache = modest_cache_mgr_get_cache (cache_mgr,
+                                                                                      MODEST_CACHE_MGR_CACHE_TYPE_SEND_QUEUE);
                        
-                       for (node = send_queues; node != NULL && !found; node = g_slist_next (node)) {
-                               send_queue = MODEST_TNY_SEND_QUEUE (node->data);
-                               
-                               /* Check if msg uid is being processed inside send queue */
-                               found = modest_tny_send_queue_msg_is_being_sent (send_queue, msg_uid);          
+                                       g_hash_table_foreach (send_queue_cache, (GHFunc) fill_list_of_caches, &send_queues);
+                                       
+                                       for (node = send_queues; node != NULL && !found; node = g_slist_next (node)) {
+                                               send_queue = MODEST_TNY_SEND_QUEUE (node->data);
+                                               
+                                               /* Check if msg uid is being processed inside send queue */
+                                               found = modest_tny_send_queue_msg_is_being_sent (send_queue, msg_uid);          
+                                       }
+                                       state->sent_in_progress = found;
+                               }
                        }
-                       state->sent_in_progress = found;
+                       g_object_unref (folder);
                }
-
                tny_iterator_next (iter);
                g_object_unref (header);
        }
@@ -705,6 +711,33 @@ modest_ui_dimming_rules_always_dimmed (ModestWindow *win, gpointer user_data)
        return dimmed;
 }
 
+static gboolean
+_message_already_sent (ModestMsgViewWindow *view_window)
+{
+       TnyHeader *header;
+       TnyFolder *folder;
+       gboolean already_sent = FALSE;
+
+       header = modest_msg_view_window_get_header (view_window);
+       if (header) {
+               folder = tny_header_get_folder (header);
+               if (folder) {
+                       if (modest_tny_folder_guess_folder_type (folder) ==
+                           TNY_FOLDER_TYPE_OUTBOX) {                           
+                               ModestTnySendQueueStatus status = 
+                                       modest_tny_all_send_queues_get_msg_status (header);
+                               if (status == MODEST_TNY_SEND_QUEUE_UNKNOWN ||
+                                   status == MODEST_TNY_SEND_QUEUE_SENDING)
+                                       already_sent = TRUE;
+                       }
+                       g_object_unref (folder);
+               }
+               g_object_unref (header);
+       }
+       return already_sent;
+}
+
+
 gboolean 
 modest_ui_dimming_rules_on_delete_msg (ModestWindow *win, gpointer user_data)
 {
@@ -771,6 +804,11 @@ modest_ui_dimming_rules_on_delete_msg (ModestWindow *win, gpointer user_data)
                        if (dimmed)
                                modest_dimming_rule_set_notification (rule, _CS("ckct_ib_unable_to_delete"));
                }
+
+               /* This could happen if we're viewing a message of the
+                  outbox that has been already sent */
+               if (!dimmed)
+                       dimmed = _message_already_sent (MODEST_MSG_VIEW_WINDOW(win));
                
                /* The delete button should be dimmed when viewing an attachment,
                 * but should be enabled when viewing a message from the list, 
@@ -1035,6 +1073,12 @@ modest_ui_dimming_rules_on_view_window_move_to (ModestWindow *win, gpointer user
                if (dimmed)
                        modest_dimming_rule_set_notification (rule, _("emev_nc_unabletomove_item"));
        }
+
+       /* This could happen if we're viewing a message of the outbox
+          that has been already sent */
+       if (!dimmed)
+               dimmed = _message_already_sent (MODEST_MSG_VIEW_WINDOW(win));
+
        if (!dimmed) {
                if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
                        /* The move_to button should be dimmed when viewing an attachment,