* Add new dimming rules for copy,cut and paste operations.
[modest] / src / modest-ui-actions.c
index 7326caa..93e78f8 100644 (file)
@@ -695,58 +695,98 @@ modest_ui_actions_get_msgs_full_error_handler (ModestMailOperation *mail_op,
 static void
 _modest_ui_actions_open (TnyList *headers, ModestWindow *win)
 {
-       ModestWindowMgr *mgr;
-       TnyIterator *iter;
-       ModestMailOperation *mail_op;
-       TnyList *not_opened_headers;
-
+       ModestWindowMgr *mgr = NULL;
+       TnyIterator *iter = NULL;
+       ModestMailOperation *mail_op1 = NULL;
+       ModestMailOperation *mail_op2 = NULL;
+       TnyList *not_opened_headers = NULL;
+       TnyList *not_opened_cached_headers = NULL;
+       TnyHeaderFlags flags;
+               
        /* Look if we already have a message view for each header. If
           true, then remove the header from the list of headers to
           open */
        mgr = modest_runtime_get_window_mgr ();
        iter = tny_list_create_iterator (headers);
        not_opened_headers = tny_simple_list_new ();
+       not_opened_cached_headers = tny_simple_list_new ();
        while (!tny_iterator_is_done (iter)) {
                ModestWindow *window;
                TnyHeader *header;
                
                header = TNY_HEADER (tny_iterator_get_current (iter));
+               flags = tny_header_get_flags (header);
                window = modest_window_mgr_find_window_by_header (mgr, header);
+
                /* Do not open again the message and present the
                   window to the user */
                if (window)
                        gtk_window_present (GTK_WINDOW (window));
-               else
+               else if (!(flags & TNY_HEADER_FLAG_CACHED))
                        tny_list_append (not_opened_headers, G_OBJECT (header));
-
+               /* Check if msg has already been retreived */
+               else
+                       tny_list_append (not_opened_cached_headers, G_OBJECT (header));
+               
                g_object_unref (header);
                tny_iterator_next (iter);
        }
        
-       /* Open each message */
-       mail_op = modest_mail_operation_new_with_error_handling (MODEST_MAIL_OPERATION_TYPE_RECEIVE, 
-                                                                G_OBJECT (win), 
-                                                                modest_ui_actions_get_msgs_full_error_handler, 
-                                                                NULL);
-       modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
-       if (tny_list_get_length (not_opened_headers) > 1) {
-               modest_mail_operation_get_msgs_full (mail_op, 
-                                                    not_opened_headers, 
-                                                    open_msg_cb, 
-                                                    NULL, 
-                                                    NULL);
-       } else {
-               TnyIterator *iter = tny_list_create_iterator (not_opened_headers);
-               TnyHeader *header = TNY_HEADER (tny_iterator_get_current (iter));
-               modest_mail_operation_get_msg (mail_op, header, open_msg_cb, NULL);
-               g_object_unref (header);
-               g_object_unref (iter);
+       /* Open each uncached message */
+       if (tny_list_get_length (not_opened_headers) > 0) {
+               mail_op1 = modest_mail_operation_new_with_error_handling (MODEST_MAIL_OPERATION_TYPE_RECEIVE, 
+                                                                        G_OBJECT (win), 
+                                                                        modest_ui_actions_get_msgs_full_error_handler, 
+                                                                        NULL);
+               modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op1);
+               if (tny_list_get_length (not_opened_headers) > 1) {
+                       modest_mail_operation_get_msgs_full (mail_op1, 
+                                                            not_opened_headers, 
+                                                            open_msg_cb, 
+                                                            NULL, 
+                                                            NULL);
+               } else {
+                       TnyIterator *iter = tny_list_create_iterator (not_opened_headers);
+                       TnyHeader *header = TNY_HEADER (tny_iterator_get_current (iter));
+                       modest_mail_operation_get_msg (mail_op1, header, open_msg_cb, NULL);
+                       g_object_unref (header);
+                       g_object_unref (iter);
+               }
+       }
+
+       /* Open each cached message */
+       if (tny_list_get_length (not_opened_cached_headers) > 0) {
+               mail_op2 = modest_mail_operation_new_with_error_handling (MODEST_MAIL_OPERATION_TYPE_OPEN, 
+                                                                        G_OBJECT (win), 
+                                                                        modest_ui_actions_get_msgs_full_error_handler, 
+                                                                        NULL);
+               modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op2);
+               if (tny_list_get_length (not_opened_cached_headers) > 1) {
+                       modest_mail_operation_get_msgs_full (mail_op2, 
+                                                            not_opened_headers, 
+                                                            open_msg_cb, 
+                                                            NULL, 
+                                                            NULL);
+               } else {
+                       TnyIterator *iter = tny_list_create_iterator (not_opened_cached_headers);
+                       TnyHeader *header = TNY_HEADER (tny_iterator_get_current (iter));
+                       modest_mail_operation_get_msg (mail_op2, header, open_msg_cb, NULL);
+                       g_object_unref (header);
+                       g_object_unref (iter);
+               }
        }
 
        /* Clean */
-       g_object_unref (not_opened_headers);
-       g_object_unref (iter);
-       g_object_unref (mail_op);
+       if (not_opened_headers != NULL)
+               g_object_unref (not_opened_headers);
+       if (not_opened_cached_headers != NULL)
+               g_object_unref (not_opened_cached_headers);
+       if (iter != NULL) 
+               g_object_unref (iter);
+       if (mail_op1 != NULL)
+               g_object_unref (mail_op1);
+       if (mail_op2 != NULL) 
+               g_object_unref (mail_op2);
 }
 
 void
@@ -1643,6 +1683,7 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
        g_object_unref (G_OBJECT (mail_operation));
 
        modest_msg_edit_window_free_msg_data (edit_window, data);
+       modest_msg_edit_window_set_sent (edit_window, TRUE);
 
        /* Save settings and close the window: */
        gtk_widget_destroy (GTK_WIDGET (edit_window));
@@ -2230,9 +2271,16 @@ void
 modest_ui_actions_on_undo (GtkAction *action,
                           ModestWindow *window)
 {
+       ModestEmailClipboard *clipboard = NULL;
+
        if (MODEST_IS_MSG_EDIT_WINDOW (window)) {
                modest_msg_edit_window_undo (MODEST_MSG_EDIT_WINDOW (window));
-       } else {
+       } if (MODEST_IS_MAIN_WINDOW (window)) {
+               /* Clear clipboard source */
+               clipboard = modest_runtime_get_email_clipboard ();
+               modest_email_clipboard_clear (clipboard);               
+       }
+       else {
                g_return_if_reached ();
        }
 }
@@ -2324,28 +2372,24 @@ modest_ui_actions_on_select_all (GtkAction *action,
                gtk_text_buffer_get_start_iter (buffer, &start);
                gtk_text_buffer_get_end_iter (buffer, &end);
                gtk_text_buffer_select_range (buffer, &start, &end);
-       }
-       else if ((MODEST_IS_FOLDER_VIEW (focused_widget)) ||
-                (MODEST_IS_HEADER_VIEW (focused_widget))) {
-               
-               GtkTreeSelection *selection = NULL;
-
-               /* Get header view */           
+       } else if (GTK_IS_HTML (focused_widget)) {
+               gtk_html_select_all (GTK_HTML (focused_widget));
+       } else if (MODEST_IS_MAIN_WINDOW (window)) {
                GtkWidget *header_view = focused_widget;
-               if (MODEST_IS_FOLDER_VIEW (focused_widget))
+               GtkTreeSelection *selection = NULL;
+               
+               if (!(MODEST_IS_HEADER_VIEW (focused_widget)))
                        header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (window),
                                                                           MODEST_WIDGET_TYPE_HEADER_VIEW);
-
+                               
                /* Select all messages */
                selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(header_view));
                gtk_tree_selection_select_all (selection);
 
                /* Set focuse on header view */
                gtk_widget_grab_focus (header_view);
-
-       } else if (GTK_IS_HTML (focused_widget)) {
-               gtk_html_select_all (GTK_HTML (focused_widget));
        }
+
 }
 
 void