Added redo in editor (fixes NB#60257).
[modest] / src / modest-ui-actions.c
index add73d1..8fa2044 100644 (file)
@@ -1011,6 +1011,10 @@ download_uncached_messages (TnyList *header_list, GtkWindow *win)
                                                                         uncached_messages));
                if (response == GTK_RESPONSE_CANCEL)
                        retval = FALSE;
+               else {
+                       /* If a download will be necessary, make sure that we have a connection: */
+                       retval = modest_platform_connect_and_wait(win); 
+               }
        }
        return retval;
 }
@@ -1081,8 +1085,9 @@ reply_forward (ReplyForwardAction action, ModestWindow *win)
                                g_object_unref (header);
                        g_printerr ("modest: no message found\n");
                        return;
-               } else
+               } else {
                        reply_forward_cb (NULL, header, msg, rf_helper);
+               }
        } else {
                TnyHeader *header;
                TnyIterator *iter;
@@ -1758,7 +1763,7 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
        modest_msg_edit_window_set_sent (edit_window, TRUE);
 
        /* Save settings and close the window: */
-       gtk_widget_destroy (GTK_WIDGET (edit_window));
+       modest_ui_actions_on_close_window (NULL, MODEST_WINDOW (edit_window));
 }
 
 void 
@@ -2003,6 +2008,13 @@ modest_ui_actions_on_rename_folder (GtkAction *action,
                return;
 
        folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
+
+       /* Offer the connection dialog if necessary: */
+       if (!modest_platform_connect_and_wait_if_network_folderstore (NULL, folder)) {
+               g_object_unref (G_OBJECT (folder));
+               return;
+       }
+
        
        if (folder && TNY_IS_FOLDER (folder)) {
                gchar *folder_name;
@@ -2071,9 +2083,16 @@ delete_folder (ModestMainWindow *main_window, gboolean move_to_trash)
        if (!TNY_IS_FOLDER (folder)) {
                modest_platform_run_information_dialog (GTK_WINDOW (main_window),
                                                        _("mail_in_ui_folder_delete_error"));
+               g_object_unref (G_OBJECT (folder));
                return ;
        }
 
+       /* Offer the connection dialog if necessary: */
+       if (!modest_platform_connect_and_wait_if_network_folderstore (NULL, folder)) {
+               g_object_unref (G_OBJECT (folder));
+               return;
+       }
+
        /* Ask the user */      
        message =  g_strdup_printf (_("mcen_nc_delete_folder_text"), 
                                    tny_folder_get_name (TNY_FOLDER (folder)));
@@ -2385,10 +2404,34 @@ modest_ui_actions_on_undo (GtkAction *action,
 }
 
 void
+modest_ui_actions_on_redo (GtkAction *action,
+                          ModestWindow *window)
+{
+       if (MODEST_IS_MSG_EDIT_WINDOW (window)) {
+               modest_msg_edit_window_redo (MODEST_MSG_EDIT_WINDOW (window));
+       }
+       else {
+               g_return_if_reached ();
+       }
+}
+
+
+static void
+paste_msgs_cb (const GObject *object, gpointer user_data)
+{
+       g_return_if_fail (MODEST_IS_MAIN_WINDOW (object));
+       g_return_if_fail (GTK_IS_WIDGET (user_data));
+       
+       /* destroy information note */
+       gtk_widget_destroy (GTK_WIDGET(user_data));
+}
+
+void
 modest_ui_actions_on_paste (GtkAction *action,
                            ModestWindow *window)
 {
-       GtkWidget *focused_widget;
+       GtkWidget *focused_widget = NULL;
+       GtkWidget *inf_note = NULL;
        ModestMailOperation *mail_op = NULL;
 
        focused_widget = gtk_window_get_focus (GTK_WINDOW (window));
@@ -2424,20 +2467,30 @@ modest_ui_actions_on_paste (GtkAction *action,
                /* 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,
-                                                        NULL,
-                                                        NULL);
+                                                        paste_msgs_cb,
+                                                        inf_note);
                        
                } else if (src_folder != NULL) {                        
                        modest_mail_operation_xfer_folder (mail_op, 
                                                           src_folder,
                                                           folder_store,
-                                                          delete);
+                                                          delete,
+                                                          paste_msgs_cb,
+                                                          inf_note);
                }
 
                /* Free */
@@ -2450,6 +2503,7 @@ modest_ui_actions_on_paste (GtkAction *action,
        }
 }
 
+
 void
 modest_ui_actions_on_select_all (GtkAction *action,
                                 ModestWindow *window)
@@ -2926,6 +2980,7 @@ msgs_move_to_confirmation (GtkWindow *win,
 }
 
 
+
 static void
 transfer_msgs_from_viewer_cb (const GObject *object, gpointer user_data)
 {
@@ -2980,16 +3035,16 @@ modest_ui_actions_send_receive_error_handler (ModestMailOperation *mail_op,
        if (error->message != NULL)             
                g_printerr ("modest: %s\n", error->message);
        else
-               g_printerr ("modest: unkonw error on sedn&receive operation");
+               g_printerr ("modest: unkonw error on send&receive operation");
 
        /* Show error message */
-       if (modest_mail_operation_get_id (mail_op) == MODEST_MAIL_OPERATION_TYPE_RECEIVE)
-               modest_platform_run_information_dialog ((win) ? GTK_WINDOW (win) : NULL,
-                                                       _CS("sfil_ib_unable_to_receive"));
-       else 
-               modest_platform_run_information_dialog ((win) ? GTK_WINDOW (win) : NULL,
-                                                       _CS("sfil_ib_unable_to_send"));
-               g_object_unref (win);
+/*     if (modest_mail_operation_get_id (mail_op) == MODEST_MAIL_OPERATION_TYPE_RECEIVE) */
+/*             modest_platform_run_information_dialog ((win) ? GTK_WINDOW (win) : NULL, */
+/*                                                     _CS("sfil_ib_unable_to_receive")); */
+/*     else  */
+/*             modest_platform_run_information_dialog ((win) ? GTK_WINDOW (win) : NULL, */
+/*                                                     _CS("sfil_ib_unable_to_send")); */
+       g_object_unref (win);
 }
 
 static void
@@ -3128,7 +3183,7 @@ modest_ui_actions_on_main_window_move_to (GtkAction *action,
 {
        GtkWidget *dialog = NULL, *folder_view = NULL, *tree_view = NULL;
        GtkWidget *header_view = NULL;
-       gint result;
+       gint result = 0;
        TnyFolderStore *folder_store = NULL;
        ModestMailOperation *mail_op = NULL;
 
@@ -3158,37 +3213,47 @@ modest_ui_actions_on_main_window_move_to (GtkAction *action,
            !MODEST_IS_TNY_LOCAL_FOLDERS_ACCOUNT (folder_store))
                goto end;
 
+       /* Offer the connection dialog if necessary: */
+       if (modest_platform_connect_and_wait_if_network_folderstore (GTK_WINDOW (win), folder_store)) {
+                       goto end;
+       }
+
        /* Get folder or messages to transfer */
        if (gtk_widget_is_focus (folder_view)) {
                TnyFolderStore *src_folder;
                src_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
 
-               /* Clean folder on header view before moving it */
-               modest_header_view_clear (MODEST_HEADER_VIEW (header_view)); 
+               /* Offer the connection dialog if necessary: */
+               if (modest_platform_connect_and_wait_if_network_folderstore (GTK_WINDOW (win), src_folder)) {
 
-               if (TNY_IS_FOLDER (src_folder)) {
-                       mail_op = 
-                               modest_mail_operation_new_with_error_handling (MODEST_MAIL_OPERATION_TYPE_RECEIVE, 
+                       /* Clean folder on header view before moving it */
+                       modest_header_view_clear (MODEST_HEADER_VIEW (header_view)); 
+
+                       if (TNY_IS_FOLDER (src_folder)) {
+                               mail_op = 
+                                       modest_mail_operation_new_with_error_handling (MODEST_MAIL_OPERATION_TYPE_RECEIVE, 
                                                                               G_OBJECT(win),
                                                                               modest_ui_actions_move_folder_error_handler,
                                                                               NULL);
-                       modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
+                               modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
 
-                       modest_mail_operation_xfer_folder (mail_op, 
-                                                          TNY_FOLDER (src_folder),
-                                                          folder_store,
-                                                          TRUE);
-                       /* Unref mail operation */
-                       g_object_unref (G_OBJECT (mail_op));
-               }
+                               modest_mail_operation_xfer_folder (mail_op, 
+                                                                  TNY_FOLDER (src_folder),
+                                                                  folder_store,
+                                                                  TRUE, NULL, NULL);
+                               /* Unref mail operation */
+                               g_object_unref (G_OBJECT (mail_op));
+                       }
 
-               /* Frees */
-               g_object_unref (G_OBJECT (src_folder));
+                       /* Frees */
+                       g_object_unref (G_OBJECT (src_folder));
+               }
        } else {
                if (gtk_widget_is_focus (header_view)) {
-                       TnyList *headers;
-                       gint response;
+                       TnyList *headers = NULL;
+                       gint response = 0;
 
+                       /* TODO: Check for connection if the headers are on a network account. */
                        headers = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW (header_view));
 
                        /* Ask for user confirmation */
@@ -3218,9 +3283,11 @@ modest_ui_actions_on_main_window_move_to (GtkAction *action,
                        g_object_unref (headers);
                }
        }
+       
  end:
        if (folder_store != NULL)
                g_object_unref (folder_store);
+
        gtk_widget_destroy (dialog);
 }
 
@@ -3234,10 +3301,10 @@ modest_ui_actions_on_msg_view_window_move_to (GtkAction *action,
                                              ModestMsgViewWindow *win)
 {
        GtkWidget *dialog, *folder_view, *tree_view = NULL;
-       gint result;
-       ModestMainWindow *main_window;
-       TnyHeader *header;
-       TnyList *headers;
+       gint result = 0;
+       ModestMainWindow *main_window = NULL;
+       TnyHeader *header = NULL;
+       TnyList *headers = NULL;
 
        /* Get the folder view */
        main_window = MODEST_MAIN_WINDOW (modest_window_mgr_get_main_window (modest_runtime_get_window_mgr ()));
@@ -3250,47 +3317,61 @@ modest_ui_actions_on_msg_view_window_move_to (GtkAction *action,
        /* Create and run the dialog */
        dialog = create_move_to_dialog (MODEST_WINDOW (win), folder_view, &tree_view);  
        result = gtk_dialog_run (GTK_DIALOG(dialog));
-       g_object_ref (tree_view);
 
        if (result == GTK_RESPONSE_ACCEPT) {
                TnyFolderStore *folder_store;
                gint response;
 
-               folder_store = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (tree_view));
-
                /* Create header list */
                header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW (win));              
+               g_return_if_fail (header != NULL);
+
+               /* Offer the connection dialog if necessary: */
+               /* TODO: What's the extra g_object_ref() for? Isn't this leaking a ref? */
+               folder_store = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (g_object_ref (tree_view)));
+               TnyFolder *header_folder = tny_header_get_folder(header);
+               if (modest_platform_connect_and_wait_if_network_folderstore (NULL, folder_store) &&
+                   modest_platform_connect_and_wait_if_network_folderstore (NULL, TNY_FOLDER_STORE (header_folder))) {
                        
-               headers = tny_simple_list_new ();
-               tny_list_prepend (headers, G_OBJECT (header));
-               g_object_unref (header);
+                       headers = tny_simple_list_new ();
+                       tny_list_prepend (headers, G_OBJECT (header));
+                       g_object_unref (header);
 
-               /* Ask user for confirmation. MSG-NOT404 */
-               response = msgs_move_to_confirmation (GTK_WINDOW (win), 
+                       /* Ask user for confirmation. MSG-NOT404 */
+                       response = msgs_move_to_confirmation (GTK_WINDOW (win), 
                                                      TNY_FOLDER (folder_store), 
                                                      headers);
 
-               /* Transfer current msg */
-               if (response == GTK_RESPONSE_OK) {
-                       ModestMailOperation *mail_op;
+                       /* Transfer current msg */
+                       if (response == GTK_RESPONSE_OK) {
+                               ModestMailOperation *mail_op;
 
-                       /* Create mail op */
-                       mail_op = modest_mail_operation_new (MODEST_MAIL_OPERATION_TYPE_RECEIVE, G_OBJECT(win));
-                       modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), 
+                               /* Create mail op */
+                               mail_op = modest_mail_operation_new (MODEST_MAIL_OPERATION_TYPE_RECEIVE, G_OBJECT(win));
+                               modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), 
                                                         mail_op);
                        
-                       /* Transfer messages */
-                       modest_mail_operation_xfer_msgs (mail_op, 
+                               /* Transfer messages */
+                               modest_mail_operation_xfer_msgs (mail_op, 
                                                         headers,
                                                         TNY_FOLDER (folder_store),
                                                         TRUE,
                                                         transfer_msgs_from_viewer_cb,
                                                         NULL);
-                       g_object_unref (G_OBJECT (mail_op));
+                               g_object_unref (G_OBJECT (mail_op));
+                       }
                }
-               g_object_unref (headers);
-               g_object_unref (folder_store);
+               
+               if (header_folder)
+                       g_object_unref (header_folder);
+
+               if (headers)
+                       g_object_unref (headers);
+                       
+               if (folder_store)
+                       g_object_unref (folder_store);
        }
+       
        gtk_widget_destroy (dialog);
 }