+ g_object_unref (dst_folder);
+}
+
+typedef struct {
+ TnyFolder *src_folder;
+ TnyFolderStore *dst_folder;
+ gboolean delete_original;
+ GtkWidget *folder_view;
+} MoveFolderInfo;
+
+static void
+on_move_folder_cb (gboolean canceled, GError *err, GtkWindow *parent_window,
+ TnyAccount *account, gpointer user_data)
+{
+ MoveFolderInfo *info = (MoveFolderInfo*)user_data;
+ GtkTreeSelection *sel;
+ ModestMailOperation *mail_op = NULL;
+
+ if (canceled || err || !MODEST_IS_MAIN_WINDOW (parent_window)) {
+ g_object_unref (G_OBJECT (info->src_folder));
+ g_object_unref (G_OBJECT (info->dst_folder));
+ g_free (info);
+ return;
+ }
+
+ MoveToHelper *helper = g_new0 (MoveToHelper, 1);
+ helper->banner = modest_platform_animation_banner (GTK_WIDGET (parent_window), NULL,
+ _CS("ckct_nw_pasting"));
+ if (helper->banner != NULL) {
+ gtk_window_set_modal (GTK_WINDOW(helper->banner), FALSE);
+ gtk_widget_show (GTK_WIDGET(helper->banner));
+ }
+ /* Clean folder on header view before moving it */
+ sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (info->folder_view));
+ gtk_tree_selection_unselect_all (sel);
+
+ /* Let gtk events run. We need that the folder
+ view frees its reference to the source
+ folder *before* issuing the mail operation
+ so we need the signal handler of selection
+ changed to happen before the mail
+ operation
+ while (gtk_events_pending ())
+ gtk_main_iteration (); */
+
+ mail_op =
+ modest_mail_operation_new_with_error_handling (G_OBJECT(parent_window),
+ modest_ui_actions_move_folder_error_handler,
+ info->src_folder, NULL);
+ modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
+ mail_op);
+
+ /* Select *after* the changes */
+ /* TODO: this function hangs UI after transfer */
+ /* modest_folder_view_select_folder (MODEST_FOLDER_VIEW(folder_view), */
+ /* TNY_FOLDER (src_folder), TRUE); */
+
+ modest_mail_operation_xfer_folder (mail_op,
+ TNY_FOLDER (info->src_folder),
+ info->dst_folder,
+ info->delete_original,
+ move_to_cb,
+ helper);
+
+ modest_folder_view_select_folder (MODEST_FOLDER_VIEW(info->folder_view),
+ TNY_FOLDER (info->dst_folder), TRUE);
+
+ /* Unref mail operation */
+ g_object_unref (G_OBJECT (mail_op));
+ g_object_unref (G_OBJECT (info->src_folder));
+ g_object_unref (G_OBJECT (info->dst_folder));
+ g_free (user_data);