* handle 'other' TNY_TRANSPORT_ACCOUNT_ERRORs as well, instead
[modest] / src / modest-ui-actions.c
index aae822b..ad8f48d 100644 (file)
@@ -163,6 +163,9 @@ static void     do_create_folder (GtkWindow *window,
                                  TnyFolderStore *parent_folder, 
                                  const gchar *suggested_name);
 
+static GtkWidget* get_folder_view_from_move_to_dialog (GtkWidget *move_to_dialog);
+
+
 /*
  * This function checks whether a TnyFolderStore is a pop account
  */
@@ -1059,7 +1062,6 @@ open_msgs_performer(gboolean canceled,
 
        status = tny_account_get_connection_status (account);
        if (err || canceled) {
-               /* TODO: Show an error ? */
                goto clean;
        }
 
@@ -1698,7 +1700,6 @@ do_send_receive_performer (gboolean canceled,
        info = (SendReceiveInfo *) user_data;
 
        if (err || canceled) {
-
                goto clean;
        }
 
@@ -2247,9 +2248,14 @@ on_save_to_drafts_cb (ModestMailOperation *mail_op,
 
        edit_window = MODEST_MSG_EDIT_WINDOW (user_data);
 
-       /* If there was any error do nothing */
-       if (modest_mail_operation_get_error (mail_op) != NULL)
+       /* It might not be a good idea to do nothing if there was an error,
+        * so let's at least show a generic error banner. */
+       /* TODO error while saving attachment, show "Saving draft failed" banner */
+       if (modest_mail_operation_get_error (mail_op) != NULL) {
+               g_warning ("%s failed: %s\n", __FUNCTION__, (modest_mail_operation_get_error (mail_op))->message);
+               modest_platform_information_banner (NULL, NULL, _("mail_ib_file_operation_failed"));
                return;
+       }
 
        modest_msg_edit_window_set_draft (edit_window, saved_draft);
 }
@@ -2600,22 +2606,28 @@ do_create_folder_cb (ModestMailOperation *mail_op,
                     gpointer user_data)
 {
        gchar *suggested_name = (gchar *) user_data;
-       GtkWindow *main_window = (GtkWindow *) modest_mail_operation_get_source (mail_op);
-
+       GtkWindow *source_win = (GtkWindow *) modest_mail_operation_get_source (mail_op);
+               
        if (modest_mail_operation_get_error (mail_op)) {
                /* Show an error */
-               modest_platform_information_banner (GTK_WIDGET (main_window), NULL,
+               modest_platform_information_banner (GTK_WIDGET (source_win), NULL,
                                                    _("mail_in_ui_folder_create_error"));
 
                /* Try again */
-               do_create_folder (main_window, parent_folder, (const gchar *) suggested_name);
+               do_create_folder (source_win, parent_folder, (const gchar *) suggested_name);
        } else {
+               /* the 'source_win' is either the ModestMainWindow, or the 'Move to folder'-dialog
+                * FIXME: any other? */         
                GtkWidget *folder_view;
 
-               folder_view = 
-                       modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (main_window),
-                                                            MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
-
+               if (MODEST_IS_MAIN_WINDOW(source_win)) 
+                       folder_view = 
+                               modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (source_win),
+                                                                    MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
+               else
+                       folder_view =
+                               get_folder_view_from_move_to_dialog (GTK_WIDGET(source_win));
+               
                /* Select the newly created folder */
                modest_folder_view_select_folder (MODEST_FOLDER_VIEW (folder_view),
                                                  new_folder, FALSE);
@@ -2623,7 +2635,7 @@ do_create_folder_cb (ModestMailOperation *mail_op,
        }
        /* Free. Note that the first time it'll be NULL so noop */
        g_free (suggested_name);
-       g_object_unref (main_window);
+       g_object_unref (source_win);
 }
 
 static void
@@ -2655,6 +2667,25 @@ do_create_folder (GtkWindow *parent_window,
        }
 }
 
+static void
+create_folder_performer (gboolean canceled, 
+                        GError *err,
+                        GtkWindow *parent_window, 
+                        TnyAccount *account, 
+                        gpointer user_data)
+{
+       TnyFolderStore *parent_folder = TNY_FOLDER_STORE (user_data);
+
+       if (canceled || err) {
+               goto frees;
+       }
+
+       /* Run the new folder dialog */
+       do_create_folder (GTK_WINDOW (parent_window), parent_folder, NULL);
+
+ frees:
+       g_object_unref (parent_folder);
+}
 
 static void
 modest_ui_actions_create_folder(GtkWidget *parent_window,
@@ -2665,11 +2696,11 @@ modest_ui_actions_create_folder(GtkWidget *parent_window,
        parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
        
        if (parent_folder) {
-       
-               /* Run the new folder dialog */
-               do_create_folder (GTK_WINDOW (parent_window), parent_folder, NULL);
-       
-               g_object_unref (parent_folder);
+               /* The parent folder will be freed in the callback */
+               modest_platform_connect_if_remote_and_perform (GTK_WINDOW (parent_window), 
+                                                              parent_folder,
+                                                              create_folder_performer, 
+                                                              parent_folder);
        }
 }
 
@@ -3949,6 +3980,16 @@ on_move_to_dialog_folder_selection_changed (ModestFolderView* self,
        gtk_widget_set_sensitive (new_button, new_sensitive);
 }
 
+
+#define MODEST_MOVE_TO_DIALOG_FOLDER_VIEW "move-to-dialog-folder-view"
+
+static GtkWidget*
+get_folder_view_from_move_to_dialog (GtkWidget *move_to_dialog)
+{
+       return GTK_WIDGET(g_object_get_data (G_OBJECT(move_to_dialog),
+                                            MODEST_MOVE_TO_DIALOG_FOLDER_VIEW));
+}
+
 static GtkWidget*
 create_move_to_dialog (GtkWindow *win,
                       GtkWidget *folder_view,
@@ -4037,9 +4078,16 @@ create_move_to_dialog (GtkWindow *win,
                }
        }
 
+       /* we keep a pointer to the embedded folder view, so we can retrieve it with
+        *   get_folder_view_from_move_to_dialog 
+        * (see above) later (needed for focus handling) 
+        */
+       g_object_set_data (G_OBJECT(dialog), MODEST_MOVE_TO_DIALOG_FOLDER_VIEW, *tree_view);
+
+       
        /* Hide special folders */
        modest_folder_view_show_non_move_folders (MODEST_FOLDER_VIEW (*tree_view), FALSE);
-       
+
        gtk_container_add (GTK_CONTAINER (scroll), *tree_view);
 
        /* Add scroll to dialog */
@@ -4849,7 +4897,6 @@ retrieve_msg_contents_performer (gboolean canceled,
        TnyList *headers = TNY_LIST (user_data);
 
        if (err || canceled) {
-               /* Show an error ? */
                goto out;
        }
 
@@ -5122,7 +5169,10 @@ modest_ui_actions_on_send_queue_error_happened (TnySendQueue *self,
                message = g_strdup (_("emev_ib_ui_smtp_send_error"));
                break;
        default:
-               g_return_if_reached ();
+               g_warning ("%s: unexpected TNY_TRANSPORT_ACCOUNT_ERROR %d",
+                          __FUNCTION__, err->code);
+               message = g_strdup (_("emev_ib_ui_smtp_send_error"));
+               break;  
        }
        
        /* TODO if the username or the password where not defined we