* src/modest-ui-actions.c
[modest] / src / modest-ui-actions.c
index 976ea1f..d69a796 100644 (file)
@@ -45,6 +45,9 @@
 #include "modest-tny-platform-factory.h"
 #include "modest-platform.h"
 #include <tny-mime-part.h>
+#include <tny-camel-folder.h>
+#include <tny-camel-imap-folder.h>
+#include <tny-camel-pop-folder.h>
 
 #ifdef MODEST_PLATFORM_MAEMO
 #include "maemo/modest-osso-state-saving.h"
@@ -137,16 +140,29 @@ static void     _on_send_receive_progress_changed (ModestMailOperation  *mail_op
                                                   gpointer user_data);
 
 static gboolean
-download_uncached_messages (TnyList *header_list, GtkWindow *win,
-                           gboolean reply_fwd);
+download_uncached_messages (TnyList *header_list, GtkWindow *win);
 
 
-static void
-run_account_setup_wizard (ModestWindow *win)
+static gint
+msgs_move_to_confirmation (GtkWindow *win,
+                          TnyFolder *dest_folder,
+                          gboolean delete,
+                          TnyList *headers);
+
+
+/* Show the account creation wizard dialog.
+ * returns: TRUE if an account was created. FALSE if the user cancelled.
+ */
+gboolean
+modest_run_account_setup_wizard (ModestWindow *win)
 {
+       gboolean result = FALSE;
        ModestEasysetupWizardDialog *wizard;
        
-       g_return_if_fail (MODEST_IS_WINDOW(win));
+       if (!win)
+               win = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr ());
+               
+       g_return_val_if_fail (MODEST_IS_WINDOW(win), FALSE);
        
        wizard = modest_easysetup_wizard_dialog_new ();
        gtk_window_set_transient_for (GTK_WINDOW (wizard), GTK_WINDOW (win));
@@ -155,8 +171,17 @@ run_account_setup_wizard (ModestWindow *win)
         * be unusable, freezing the UI: */
        /* gtk_window_set_modal (GTK_WINDOW (wizard), TRUE); */
        
-       gtk_dialog_run (GTK_DIALOG (wizard));
+       gint dialog_response = gtk_dialog_run (GTK_DIALOG (wizard));
+       if (dialog_response == GTK_RESPONSE_CANCEL)
+               result = FALSE;
+       else {
+               /* Check whether an account was created: */
+               result = modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(), TRUE);
+       }
+       
        gtk_widget_destroy (GTK_WIDGET (wizard));
+
+       return result;
 }
 
 
@@ -318,9 +343,11 @@ modest_ui_actions_on_delete_message (GtkAction *action, ModestWindow *win)
                        return;
        }
        
+       /* Get the headers, either from the header view (if win is the main window),
+        * or from the message view window: */
        header_list = get_selected_headers (win);
        if (!header_list) return;
-
+                       
        /* Check if any of the headers are already opened, or in the process of being opened */
        if (MODEST_IS_MAIN_WINDOW (win)) {
                gboolean found;
@@ -381,6 +408,8 @@ modest_ui_actions_on_delete_message (GtkAction *action, ModestWindow *win)
                GList *sel_list = NULL, *tmp = NULL;
                GtkTreeRowReference *row_reference = NULL;
                GtkTreePath *next_path = NULL;
+               TnyFolder *folder = NULL;
+               GError *err = NULL;
 
                /* Find last selected row */                    
                if (MODEST_IS_MAIN_WINDOW (win)) {
@@ -424,6 +453,30 @@ modest_ui_actions_on_delete_message (GtkAction *action, ModestWindow *win)
                                gtk_tree_row_reference_free (row_reference);
                }
 
+               /* Get folder from first header and sync it */
+               iter = tny_list_create_iterator (header_list);
+               header = TNY_HEADER (tny_iterator_get_current (iter));
+               folder = tny_header_get_folder (header);
+               if (TNY_IS_CAMEL_IMAP_FOLDER (folder))
+/*                     tny_folder_sync_async(folder, FALSE, NULL, NULL, NULL); /\* FALSE --> don't expunge *\/ */
+                       tny_folder_sync (folder, FALSE, &err); /* FALSE --> don't expunge */
+               else if (TNY_IS_CAMEL_POP_FOLDER (folder))
+/*                     tny_folder_sync_async(folder, FALSE, NULL, NULL, NULL); /\* TRUE --> dont expunge *\/ */
+                       tny_folder_sync (folder, TRUE, &err); /* TRUE --> expunge */
+               else
+                       /* local folders */
+/*                     tny_folder_sync_async(folder, TRUE, NULL, NULL, NULL); /\* TRUE --> expunge *\/ */
+                       tny_folder_sync (folder, TRUE, &err); /* TRUE --> expunge */
+
+               if (err != NULL) {
+                       printf ("DEBUG: %s: Error: code=%d, text=%s\n", __FUNCTION__, err->code, err->message);
+                       g_error_free(err);
+               }
+
+               g_object_unref (header);
+               g_object_unref (iter);
+               g_object_unref (folder);
+               
                /* Update toolbar dimming state */
                modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (main_window));
 
@@ -530,7 +583,7 @@ modest_ui_actions_on_accounts (GtkAction *action, ModestWindow *win)
        /* This is currently only implemented for Maemo */
 #ifdef MODEST_PLATFORM_MAEMO /* Defined in config.h */
        if (!modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(), TRUE)) {
-               run_account_setup_wizard (win);
+               modest_run_account_setup_wizard (win);
                return;
        } else  {
                /* Show the list of accounts: */
@@ -636,8 +689,9 @@ modest_ui_actions_on_new_msg (GtkAction *action, ModestWindow *win)
 
        /* if there are no accounts yet, just show the wizard */
        if (!modest_account_mgr_has_accounts (modest_runtime_get_account_mgr(), TRUE)) {
-                       run_account_setup_wizard (win);
-                       return;
+                       const gboolean created = modest_run_account_setup_wizard (win);
+                       if (!created)
+                               return;
        }
        
        account_name = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr ());
@@ -662,16 +716,17 @@ modest_ui_actions_on_new_msg (GtkAction *action, ModestWindow *win)
                goto cleanup;
        }
 
-       if (modest_account_mgr_get_bool (modest_runtime_get_account_mgr (), account_name,
-                                        MODEST_ACCOUNT_USE_SIGNATURE, FALSE)) {
-               signature = modest_account_mgr_get_string (modest_runtime_get_account_mgr (), account_name,
-                                                          MODEST_ACCOUNT_SIGNATURE, FALSE);
+       gboolean use_signature = FALSE;
+       signature = modest_account_mgr_get_signature (modest_runtime_get_account_mgr (), account_name, &use_signature);
+
+       if (use_signature) {
                blank_and_signature = g_strconcat ("\n", signature, NULL);
-               g_free (signature);
        } else {
                blank_and_signature = g_strdup ("");
        }
 
+       g_free (signature);
+
        msg = modest_tny_msg_new ("", from_str, "", "", "", blank_and_signature, NULL);
        if (!msg) {
                g_printerr ("modest: failed to create new msg\n");
@@ -686,7 +741,7 @@ modest_ui_actions_on_new_msg (GtkAction *action, ModestWindow *win)
        
 
        /* Create and register edit window */
-       /* This is destroyed by TOOD. */
+       /* This is destroyed by TODO. */
        msg_win = modest_msg_edit_window_new (msg, account_name, FALSE);
        mgr = modest_runtime_get_window_mgr ();
        modest_window_mgr_register_window (mgr, msg_win);
@@ -772,8 +827,9 @@ open_msg_cb (ModestMailOperation *mail_op,
            (folder_type == TNY_FOLDER_TYPE_OUTBOX)) {
                /* we cannot edit without a valid account... */
                if (!modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(), TRUE)) {
-                       run_account_setup_wizard(parent_win);
-                       goto cleanup;
+                       const gboolean created = modest_run_account_setup_wizard(parent_win);
+                       if (!created)
+                               goto cleanup;
                }
                win = modest_msg_edit_window_new (msg, account, TRUE);
                
@@ -799,17 +855,15 @@ open_msg_cb (ModestMailOperation *mail_op,
                                g_list_foreach (sel_list, (GFunc) gtk_tree_path_free, NULL);
                                g_list_free (sel_list);
                                
-                               win = modest_msg_view_window_new_with_header_model (msg, 
-                                                                                   account,
-                                                                                   (const gchar*) uid,
-                                                                                   model, 
-                                                                                   row_reference);
+                               win = modest_msg_view_window_new_with_header_model (
+                                               msg, account, (const gchar*) uid,
+                                               model, row_reference);
                                gtk_tree_row_reference_free (row_reference);
                        } else {
-                               win = modest_msg_view_window_new (msg, account, (const gchar*) uid);
+                               win = modest_msg_view_window_new_for_attachment (msg, account, (const gchar*) uid);
                        }
                } else {
-                       win = modest_msg_view_window_new (msg, account, (const gchar*) uid);
+                       win = modest_msg_view_window_new_for_attachment (msg, account, (const gchar*) uid);
                }
                g_free (uid);
        }
@@ -1118,8 +1172,7 @@ cleanup:
  */
 static gboolean
 download_uncached_messages (TnyList *header_list, 
-                           GtkWindow *win,
-                           gboolean reply_fwd)
+                           GtkWindow *win)
 {
        TnyIterator *iter;
        gboolean retval;
@@ -1143,21 +1196,20 @@ download_uncached_messages (TnyList *header_list,
        /* Ask for user permission to download the messages */
        retval = TRUE;
        if (uncached_messages > 0) {
-               GtkResponseType response;
-               if (reply_fwd)
-                       response = modest_platform_run_confirmation_dialog (GTK_WINDOW (win),
-                                                                           _("emev_nc_include_original"));
-               else
-                       response =
+                gboolean download = TRUE;
+                if (!tny_device_is_online (modest_runtime_get_device())) {
+                       GtkResponseType response =
                                modest_platform_run_confirmation_dialog (GTK_WINDOW (win),
                                                                         ngettext("mcen_nc_get_msg",
                                                                                  "mcen_nc_get_msgs",
                                                                                  uncached_messages));
-               if (response == GTK_RESPONSE_CANCEL)
-                       retval = FALSE;
-               else {
+                        if (response == GTK_RESPONSE_CANCEL) download = FALSE;
+                }
+               if (download) {
                        /* If a download will be necessary, make sure that we have a connection: */
                        retval = modest_platform_connect_and_wait(win, NULL);   
+                } else {
+                       retval = FALSE;
                }
        }
        return retval;
@@ -1181,8 +1233,9 @@ reply_forward (ReplyForwardAction action, ModestWindow *win)
 
        /* we need an account when editing */
        if (!modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(), TRUE)) {
-               run_account_setup_wizard (win);
-               return;
+               const gboolean created = modest_run_account_setup_wizard (win);
+               if (!created)
+                       return;
        }
        
        header_list = get_selected_headers (win);
@@ -1197,7 +1250,7 @@ reply_forward (ReplyForwardAction action, ModestWindow *win)
        /* Check that the messages have been previously downloaded */
        do_retrieve = (action == ACTION_FORWARD) || (reply_forward_type != MODEST_TNY_MSG_REPLY_TYPE_CITE);
        if (do_retrieve)
-               continue_download = download_uncached_messages (header_list, GTK_WINDOW (win), TRUE);
+               continue_download = download_uncached_messages (header_list, GTK_WINDOW (win));
        if (!continue_download) {
                g_object_unref (header_list);
                return;
@@ -1310,14 +1363,17 @@ modest_ui_actions_on_next (GtkAction *action,
        if (MODEST_IS_MAIN_WINDOW (window)) {
                GtkWidget *header_view;
 
-               header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(window),
-                                                                  MODEST_WIDGET_TYPE_HEADER_VIEW);
+               header_view = modest_main_window_get_child_widget (
+                               MODEST_MAIN_WINDOW(window),
+                               MODEST_WIDGET_TYPE_HEADER_VIEW);
                if (!header_view)
                        return;
        
-               modest_header_view_select_next (MODEST_HEADER_VIEW(header_view)); 
+               modest_header_view_select_next (
+                               MODEST_HEADER_VIEW(header_view)); 
        } else if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
-               modest_msg_view_window_select_next_message (MODEST_MSG_VIEW_WINDOW (window));
+               modest_msg_view_window_select_next_message (
+                               MODEST_MSG_VIEW_WINDOW (window));
        } else {
                g_return_if_reached ();
        }
@@ -1370,10 +1426,31 @@ new_messages_arrived (ModestMailOperation *self,
                      gint new_messages,
                      gpointer user_data)
 {
-       if (new_messages == 0)
-               return;
+       ModestMainWindow *win = NULL;
+       GtkWidget *folder_view = NULL;
+       TnyFolderStore *folder = NULL;
+       gboolean folder_empty = FALSE;
+
+       g_return_if_fail (MODEST_IS_MAIN_WINDOW (user_data));
+       win = MODEST_MAIN_WINDOW (user_data);
+
+       /* Set contents style of headers view */
+       if (modest_main_window_get_contents_style (win) == MODEST_MAIN_WINDOW_CONTENTS_STYLE_EMPTY) {
+               folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win), 
+                                                                  MODEST_WIDGET_TYPE_FOLDER_VIEW);
+               folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));             
+               
 
-       modest_platform_on_new_msg ();
+               folder_empty = (tny_folder_get_all_count (TNY_FOLDER (folder)) == 0);
+               
+               if (!folder_empty)
+                       modest_main_window_set_contents_style (win,
+                                                      MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS);
+       }       
+
+       /* Notify new messages have been downloaded */
+       if (new_messages > 0)
+               modest_platform_on_new_msg ();
 }
 
 /*
@@ -1422,7 +1499,7 @@ modest_ui_actions_do_send_receive (const gchar *account_name, ModestWindow *win)
           internally, so the progress objects will receive the proper
           progress information */
        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
-       modest_mail_operation_update_account (mail_op, acc_name, new_messages_arrived, NULL);
+       modest_mail_operation_update_account (mail_op, acc_name, new_messages_arrived, win);
        g_object_unref (G_OBJECT (mail_op));
        
        /* Free */
@@ -1706,6 +1783,8 @@ folder_refreshed_cb (ModestMailOperation *mail_op,
        ModestMainWindow *win = NULL;
        GtkWidget *header_view;
        TnyFolder *current_folder;
+       gboolean folder_empty = TRUE;
+       gboolean all_marked_as_deleted = TRUE;
 
        g_return_if_fail (TNY_IS_FOLDER (folder));
 
@@ -1721,7 +1800,11 @@ folder_refreshed_cb (ModestMailOperation *mail_op,
        }
 
        /* Check if folder is empty and set headers view contents style */
-       if (tny_folder_get_all_count (folder) == 0) {
+       folder_empty = (tny_folder_get_all_count (folder) == 0);
+       all_marked_as_deleted = modest_header_view_is_empty (MODEST_HEADER_VIEW(header_view));
+       folder_empty = folder_empty || all_marked_as_deleted ;
+       if (folder_empty) {
+
        printf ("DEBUG: %s: tny_folder_get_all_count() returned 0.\n", __FUNCTION__);
                modest_main_window_set_contents_style (win,
                                                       MODEST_MAIN_WINDOW_CONTENTS_STYLE_EMPTY);
@@ -1982,8 +2065,9 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
                
        if (!account_name) {
                /* Run account setup wizard */
-               run_account_setup_wizard(MODEST_WINDOW(edit_window));
-               return;
+               const gboolean created = modest_run_account_setup_wizard(MODEST_WINDOW(edit_window));
+               if (!created)
+                       return;
        }
        
        MsgData *data = modest_msg_edit_window_get_msg_data (edit_window);
@@ -1999,23 +2083,13 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
                                       account_name));
        if (!transport_account) {
                /* Run account setup wizard */
-               run_account_setup_wizard(MODEST_WINDOW(edit_window));
-               return;
+               const gboolean created = modest_run_account_setup_wizard(MODEST_WINDOW(edit_window));
+               if (!created)
+                       return;
        }
        
        gchar *from = modest_account_mgr_get_from_string (account_mgr, account_name);
 
-       /* mail content checks and dialogs */
-       if (data->subject == NULL || data->subject[0] == '\0') {
-               GtkResponseType response;
-               response = modest_platform_run_confirmation_dialog (GTK_WINDOW (edit_window),
-                                                                   _("mcen_nc_subject_is_empty_send"));
-               if (response == GTK_RESPONSE_CANCEL) {
-                       g_free (account_name);
-                       return;
-               }
-       }
-
        if (data->plain_body == NULL || data->plain_body[0] == '\0') {
                GtkResponseType response;
                gchar *note_message;
@@ -2235,6 +2309,21 @@ modest_ui_actions_create_folder(GtkWidget *parent_window,
                gboolean finished = FALSE;
                gint result;
                gchar *folder_name = NULL, *suggested_name = NULL;
+               const gchar *proto_str = NULL;
+               TnyAccount *account;
+
+               if (TNY_IS_ACCOUNT (parent_folder))
+                       account = g_object_ref (parent_folder);
+               else
+                       account = tny_folder_get_account (TNY_FOLDER (parent_folder));
+               proto_str = tny_account_get_proto (TNY_ACCOUNT (account));
+
+               if (proto_str && modest_protocol_info_get_transport_store_protocol (proto_str) ==
+                   MODEST_PROTOCOL_STORE_POP) {
+                       finished = TRUE;
+                       hildon_banner_show_information (NULL, NULL, _("mail_in_ui_folder_create_error"));
+               }
+               g_object_unref (account);
 
                /* Run the new folder dialog */
                while (!finished) {
@@ -2299,7 +2388,7 @@ static void
 modest_ui_actions_rename_folder_error_handler (ModestMailOperation *mail_op,
                                               gpointer user_data)
 {
-       GObject *win = modest_mail_operation_get_source (mail_op);
+       ModestMainWindow *window = MODEST_MAIN_WINDOW (user_data);
        const GError *error = NULL;
        const gchar *message = NULL;
        
@@ -2311,9 +2400,8 @@ modest_ui_actions_rename_folder_error_handler (ModestMailOperation *mail_op,
                message = _("!!! FIXME: Unable to rename");
        }
        
-       /* Show notification dialog */
-       modest_platform_run_information_dialog ((win) ? GTK_WINDOW (win) : NULL, message);
-       g_object_unref (win);
+       modest_platform_information_banner (GTK_WIDGET (window), NULL,
+                                           message);
 }
 
 void 
@@ -2361,11 +2449,10 @@ modest_ui_actions_on_rename_folder (GtkAction *action,
                        ModestMailOperation *mail_op;
 
                        mail_op = 
-                               modest_mail_operation_new_with_error_handling (MODEST_MAIL_OPERATION_TYPE_INFO, 
+                               modest_mail_operation_new_with_error_handling (MODEST_MAIL_OPERATION_TYPE_INFO,
                                                                               G_OBJECT(main_window),
                                                                               modest_ui_actions_rename_folder_error_handler,
-                                                                              NULL);
-
+                                                                              main_window);
 
                        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
                                                         mail_op);
@@ -2375,7 +2462,6 @@ modest_ui_actions_on_rename_folder (GtkAction *action,
                        modest_folder_view_select_folder (MODEST_FOLDER_VIEW(folder_view),
                                                          TNY_FOLDER(folder), TRUE);
 
-
                        modest_header_view_clear ((ModestHeaderView *) header_view);
  
                        modest_mail_operation_rename_folder (mail_op,
@@ -2458,9 +2544,15 @@ void
 modest_ui_actions_on_delete_folder (GtkAction *action,
                                     ModestMainWindow *main_window)
 {
+       GtkWidget *folder_view;
        g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
 
        delete_folder (main_window, FALSE);
+       folder_view = modest_main_window_get_child_widget (main_window,
+                                                          MODEST_WIDGET_TYPE_FOLDER_VIEW);
+       if (!folder_view)
+               return;
+       modest_folder_view_select_first_inbox_or_local (MODEST_FOLDER_VIEW (folder_view));
 }
 
 void 
@@ -2751,7 +2843,7 @@ modest_ui_actions_on_copy (GtkAction *action,
                /* Check that the messages have been previously downloaded */
                gboolean continue_download = TRUE;
                if (ask)
-                       continue_download = download_uncached_messages (header_list, GTK_WINDOW (window), FALSE);
+                       continue_download = download_uncached_messages (header_list, GTK_WINDOW (window));
                if (continue_download)
                        modest_header_view_copy_selection (MODEST_HEADER_VIEW (focused_widget));
                g_object_unref (header_list);
@@ -2895,30 +2987,50 @@ modest_ui_actions_on_paste (GtkAction *action,
 
                /* Create a new mail operation */
                mail_op = modest_mail_operation_new (MODEST_MAIL_OPERATION_TYPE_RECEIVE, G_OBJECT(window));
-               modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), 
-                                                mail_op);
                
                /* Get destination folder */
                folder_store = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (focused_widget));
 
-               /* Launch notification */
-               inf_note = modest_platform_animation_banner (GTK_WIDGET (window), NULL, 
-                                                            _CS("ckct_nw_pasting"));
-               if (inf_note != NULL)  {
-                       gtk_window_set_modal (GTK_WINDOW(inf_note), FALSE);
-                       gtk_widget_show (GTK_WIDGET(inf_note));
-               }
-
                /* transfer messages  */
                if (data != NULL) {
-                       modest_mail_operation_xfer_msgs (mail_op, 
-                                                        data,
-                                                        TNY_FOLDER (folder_store),
-                                                        delete,
-                                                        paste_msgs_cb,
-                                                        inf_note);
+                       gint response = 0;
+
+                       /* Ask for user confirmation */
+                       response = msgs_move_to_confirmation (GTK_WINDOW (window), 
+                                                             TNY_FOLDER (folder_store), 
+                                                             delete,
+                                                             data);
+                       
+                       if (response == GTK_RESPONSE_OK) {
+                               /* Launch notification */
+                               inf_note = modest_platform_animation_banner (GTK_WIDGET (window), NULL, 
+                                                                            _CS("ckct_nw_pasting"));
+                               if (inf_note != NULL)  {
+                                       gtk_window_set_modal (GTK_WINDOW(inf_note), FALSE);
+                                       gtk_widget_show (GTK_WIDGET(inf_note));
+                               }
+
+                               modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
+                               modest_mail_operation_xfer_msgs (mail_op, 
+                                                                data,
+                                                                TNY_FOLDER (folder_store),
+                                                                delete,
+                                                                paste_msgs_cb,
+                                                                inf_note);                             
+                       } else {
+                               g_object_unref (mail_op);
+                       }
                        
                } else if (src_folder != NULL) {                        
+                       /* Launch notification */
+                       inf_note = modest_platform_animation_banner (GTK_WIDGET (window), NULL, 
+                                                                    _CS("ckct_nw_pasting"));
+                       if (inf_note != NULL)  {
+                               gtk_window_set_modal (GTK_WINDOW(inf_note), FALSE);
+                               gtk_widget_show (GTK_WIDGET(inf_note));
+                       }
+                       
+                       modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
                        modest_mail_operation_xfer_folder (mail_op, 
                                                           src_folder,
                                                           folder_store,
@@ -3359,14 +3471,15 @@ has_retrieved_msgs (TnyList *list)
        gboolean found = FALSE;
 
        iter = tny_list_create_iterator (list);
-       while (tny_iterator_is_done (iter) && !found) {
+       while (!tny_iterator_is_done (iter) && !found) {
                TnyHeader *header;
                TnyHeaderFlags flags = 0;
 
                header = TNY_HEADER (tny_iterator_get_current (iter));
                if (header) {
                        flags = tny_header_get_flags (header);
-                       if (!(flags & TNY_HEADER_FLAG_PARTIAL))
+                       if (flags & TNY_HEADER_FLAG_CACHED)
+/*                     if (!(flags & TNY_HEADER_FLAG_PARTIAL)) */
                                found = TRUE;
 
                        g_object_unref (header);
@@ -3389,12 +3502,14 @@ has_retrieved_msgs (TnyList *list)
 static gint
 msgs_move_to_confirmation (GtkWindow *win,
                           TnyFolder *dest_folder,
+                          gboolean delete,
                           TnyList *headers)
 {
        gint response = GTK_RESPONSE_OK;
 
-       /* If the destination is a local folder */
-       if (modest_tny_folder_is_local_folder (dest_folder)) {
+       /* If the destination is a local folder (or MMC folder )*/
+       if (!modest_tny_folder_is_remote_folder (dest_folder)) {
+/*     if (modest_tny_folder_is_local_folder (dest_folder)) { */
                TnyFolder *src_folder = NULL;
                TnyIterator *iter = NULL;
                TnyHeader *header = NULL;
@@ -3414,18 +3529,22 @@ msgs_move_to_confirmation (GtkWindow *win,
                        return GTK_RESPONSE_CANCEL;
 
                /* If the source is a remote folder */
-               if (!modest_tny_folder_is_local_folder (src_folder)) {
-                       const gchar *message;
-                       
-                       if (has_retrieved_msgs (headers))
+/*             if (!modest_tny_folder_is_local_folder (src_folder)) { */
+               if (modest_tny_folder_is_remote_folder (src_folder)) {
+                       const gchar *message = NULL;
+                       gboolean cached = has_retrieved_msgs (headers);
+                       if (cached) 
                                message = ngettext ("mcen_nc_move_retrieve", "mcen_nc_move_retrieves",
                                                    tny_list_get_length (headers));
                        else 
                                message = ngettext ("mcen_nc_move_header", "mcen_nc_move_headers",
                                                    tny_list_get_length (headers));
-
-                       response = modest_platform_run_confirmation_dialog (GTK_WINDOW (win),
-                                                                           (const gchar *) message);
+                       
+                       if (cached && !delete)  
+                               response = GTK_RESPONSE_OK;
+                       else
+                               response = modest_platform_run_confirmation_dialog (GTK_WINDOW (win),
+                                                                                   (const gchar *) message);
                }
                
                g_object_unref (src_folder);
@@ -3651,6 +3770,9 @@ modest_ui_actions_xfer_messages_from_move_to (TnyFolderStore *dst_folder,
 {
        TnyList *headers = NULL;
        gint response = 0;
+       TnyAccount *dst_account = NULL;
+       const gchar *proto_str = NULL;
+       gboolean dst_is_pop = FALSE;
 
        if (!TNY_IS_FOLDER (dst_folder)) {
                modest_platform_information_banner (GTK_WIDGET (win),
@@ -3659,12 +3781,29 @@ modest_ui_actions_xfer_messages_from_move_to (TnyFolderStore *dst_folder,
                return;
        }
 
+       dst_account = tny_folder_get_account (TNY_FOLDER (dst_folder));
+       proto_str = tny_account_get_proto (dst_account);
+       dst_is_pop = (modest_protocol_info_get_transport_store_protocol (proto_str) == 
+                     MODEST_PROTOCOL_STORE_POP);
+       g_object_unref (dst_account);
+
        /* Get selected headers */
        headers = get_selected_headers (MODEST_WINDOW (win));
 
+       if (dst_is_pop) {
+               modest_platform_information_banner (GTK_WIDGET (win),
+                                                   NULL,
+                                                   ngettext("mail_in_ui_folder_move_target_error",
+                                                            "mail_in_ui_folder_move_targets_error",
+                                                            tny_list_get_length (headers)));
+               g_object_unref (headers);
+               return;
+       }
+
        /* Ask for user confirmation */
        response = msgs_move_to_confirmation (GTK_WINDOW (win), 
                                              TNY_FOLDER (dst_folder), 
+                                             TRUE,
                                              headers);
 
        /* Transfer messages */
@@ -4026,7 +4165,7 @@ modest_ui_actions_on_email_menu_activated (GtkAction *action,
                                          ModestWindow *window)
 {
        g_return_if_fail (MODEST_IS_WINDOW (window));
-
+       
        /* Update dimmed */     
        modest_window_check_dimming_rules_group (window, "ModestMenuDimmingRules");     
 }