* select the inbox of the newly selected account; fixes NB#58667
[modest] / src / modest-ui-actions.c
index b7310f4..0c2dfd4 100644 (file)
@@ -48,6 +48,7 @@
 
 #ifdef MODEST_PLATFORM_MAEMO
 #include "maemo/modest-osso-state-saving.h"
+#include "maemo/modest-maemo-utils.h"
 #endif /* MODEST_PLATFORM_MAEMO */
 
 #include "widgets/modest-ui-constants.h"
@@ -253,8 +254,8 @@ headers_action_delete (TnyHeader *header,
        g_object_unref (G_OBJECT (mail_op));
 
        /* refilter treemodel to hide marked-as-deleted rows */
-       if (MODEST_IS_HEADER_VIEW (user_data))
-               modest_header_view_refilter (MODEST_HEADER_VIEW (user_data));
+/*     if (MODEST_IS_HEADER_VIEW (user_data)) */
+/*             modest_header_view_refilter (MODEST_HEADER_VIEW (user_data)); */
 }
 
 void
@@ -329,9 +330,29 @@ modest_ui_actions_on_delete_message (GtkAction *action, ModestWindow *win)
        
 
        if (response == GTK_RESPONSE_OK) {      
-               ModestMainWindow *main_window;
-               ModestWindowMgr *mgr;
-
+               ModestWindow *main_window = NULL;
+               ModestWindowMgr *mgr = NULL;
+               GtkTreeModel *model = NULL;
+               GtkTreeSelection *sel = NULL;
+               GList *sel_list = NULL, *tmp = NULL;
+               GtkTreeRowReference *row_reference = NULL;
+               GtkTreePath *next_path = NULL;
+
+               /* Find last selected row */                    
+               if (MODEST_IS_MAIN_WINDOW (win)) {
+                       model = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view));
+                       sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (header_view));
+                       sel_list = gtk_tree_selection_get_selected_rows (sel, &model);
+                       for (tmp=sel_list; tmp; tmp=tmp->next) {
+                               if (tmp->next == NULL) {
+                                       next_path = gtk_tree_path_copy((GtkTreePath *) tmp->data);
+                                       gtk_tree_path_next (next_path);
+                                       row_reference = gtk_tree_row_reference_new (model, next_path);
+                                       gtk_tree_path_free (next_path);
+                               }
+                       }
+               }
+               
                /* Remove each header. If it's a view window header_view == NULL */
                do_headers_action (win, headers_action_delete, header_view);
 
@@ -343,24 +364,34 @@ modest_ui_actions_on_delete_message (GtkAction *action, ModestWindow *win)
                        } else {
                                modest_msg_view_window_select_next_message (MODEST_MSG_VIEW_WINDOW (win));
                        }
+                       
+                       /* Get main window */
+                       mgr = modest_runtime_get_window_mgr ();
+                       main_window = modest_window_mgr_get_main_window (mgr);
+               }
+               else {                  
+                       /* Move cursor to next row */
+                       main_window = win; 
+
+                       /* Select next row */
+                       if (gtk_tree_row_reference_valid (row_reference)) {
+                               next_path = gtk_tree_row_reference_get_path (row_reference);
+                               gtk_tree_selection_select_path (sel, next_path);
+                               gtk_tree_path_free (next_path);
+                       }
+                       if (row_reference != NULL)
+                               gtk_tree_row_reference_free (row_reference);
                }
 
-               /* Refilter header view model, if main window still exists */
-               mgr = modest_runtime_get_window_mgr ();
-               main_window = MODEST_MAIN_WINDOW (modest_window_mgr_get_main_window (mgr));
-               if (main_window) {
-                       GtkWidget *widget;
-
-                       widget = modest_main_window_get_child_widget (main_window,
-                                                                     MODEST_WIDGET_TYPE_HEADER_VIEW);
-                       modest_header_view_refilter (MODEST_HEADER_VIEW (widget));
+               /* Update toolbar dimming state */
+               modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (main_window));
 
-                       /* Update toolbar dimming state */
-                       modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (main_window));
-               }
+               /* Free */
+               g_list_foreach (sel_list, (GFunc) gtk_tree_path_free, NULL);
+               g_list_free (sel_list);
        }
 
-       /* free */
+       /* Free*/
        g_free(message);
        g_free(desc);
        g_object_unref (header_list);
@@ -462,9 +493,7 @@ modest_ui_actions_on_accounts (GtkAction *action, ModestWindow *win)
        } else  {
                /* Show the list of accounts: */
                GtkDialog *account_win = GTK_DIALOG(modest_account_view_window_new ());
-               gtk_window_set_transient_for (GTK_WINDOW (account_win), GTK_WINDOW(win));
-               gtk_dialog_run (account_win);
-               gtk_widget_destroy (GTK_WIDGET(account_win));
+               modest_maemo_show_dialog_and_forget (GTK_WINDOW (win), account_win); 
        }
 #else
        GtkWidget *dialog, *label;
@@ -1074,7 +1103,8 @@ cleanup:
  * of them are currently downloaded
  */
 static gboolean
-download_uncached_messages (TnyList *header_list, GtkWindow *win)
+download_uncached_messages (TnyList *header_list, GtkWindow *win,
+                           gboolean reply_fwd)
 {
        TnyIterator *iter;
        gboolean retval;
@@ -1101,11 +1131,15 @@ download_uncached_messages (TnyList *header_list, GtkWindow *win)
        retval = TRUE;
        if (uncached_messages > 0) {
                GtkResponseType response;
-               response = 
-                       modest_platform_run_confirmation_dialog (GTK_WINDOW (win),
-                                                                ngettext("mcen_nc_get_msg",
-                                                                         "mcen_nc_get_msgs",
-                                                                        uncached_messages));
+               if (reply_fwd)
+                       response = modest_platform_run_confirmation_dialog (GTK_WINDOW (win),
+                                                                           _("emev_nc_include_original"));
+               else
+                       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 {
@@ -1142,7 +1176,7 @@ reply_forward (ReplyForwardAction action, ModestWindow *win)
                return;
 
        /* Check that the messages have been previously downloaded */
-       continue_download = download_uncached_messages (header_list, GTK_WINDOW (win));
+       continue_download = download_uncached_messages (header_list, GTK_WINDOW (win), TRUE);
        if (!continue_download) {
                g_object_unref (header_list);
                return;
@@ -1488,7 +1522,7 @@ modest_ui_actions_on_send_receive (GtkAction *action,  ModestWindow *win)
 
                folder_store = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
 
-               if (TNY_IS_FOLDER (folder_store)) {
+               if (folder_store && TNY_IS_FOLDER (folder_store)) {
                        header_view = 
                                modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
                                                                     MODEST_WIDGET_TYPE_HEADER_VIEW);
@@ -1502,7 +1536,9 @@ modest_ui_actions_on_send_receive (GtkAction *action,  ModestWindow *win)
                                                       folder_refreshed_cb,
                                                       MODEST_MAIN_WINDOW (win));
                }
-               g_object_unref (folder_store);
+               
+               if (folder_store)
+                       g_object_unref (folder_store);
        }
        
        /* Refresh the active account */
@@ -1803,7 +1839,6 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi
        gchar *account_name, *from;
        ModestAccountMgr *account_mgr;
        gchar *info_text = NULL;
-       TnyMsg *new_draft = NULL;
 
        g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW(edit_window));
        
@@ -1840,18 +1875,19 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi
        mail_operation = modest_mail_operation_new (MODEST_MAIL_OPERATION_TYPE_INFO, G_OBJECT(edit_window));
        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_operation);
 
-       new_draft = modest_mail_operation_save_to_drafts (mail_operation,
-                                                         transport_account,
-                                                         data->draft_msg,
-                                                         from,
-                                                         data->to, 
-                                                         data->cc, 
-                                                         data->bcc,
-                                                         data->subject, 
-                                                         data->plain_body, 
-                                                         data->html_body,
-                                                         data->attachments,
-                                                         data->priority_flags);
+       modest_mail_operation_save_to_drafts (mail_operation,
+                                             transport_account,
+                                             data->draft_msg,
+                                             edit_window,
+                                             from,
+                                             data->to, 
+                                             data->cc, 
+                                             data->bcc,
+                                             data->subject, 
+                                             data->plain_body, 
+                                             data->html_body,
+                                             data->attachments,
+                                             data->priority_flags);
        /* Frees */
        g_free (from);
        g_free (account_name);
@@ -1860,10 +1896,6 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi
 
        modest_msg_edit_window_free_msg_data (edit_window, data);
 
-       modest_msg_edit_window_set_draft (edit_window, new_draft);
-       if (new_draft != NULL)
-               g_object_unref (new_draft);
-
        info_text = g_strdup_printf (_("mail_va_saved_to_drafts"), _("mcen_me_folder_drafts"));
        modest_platform_information_banner (NULL, NULL, info_text);
        g_free (info_text);
@@ -2609,7 +2641,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));
+                       continue_download = download_uncached_messages (header_list, GTK_WINDOW (window), FALSE);
                if (continue_download)
                        modest_header_view_copy_selection (MODEST_HEADER_VIEW (focused_widget));
                g_object_unref (header_list);
@@ -3017,16 +3049,12 @@ void
 modest_ui_actions_toggle_folders_view (GtkAction *action, 
                                       ModestMainWindow *main_window)
 {
-       ModestConf *conf;
-       
        g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
 
-       conf = modest_runtime_get_conf ();
-       
-       if (modest_main_window_get_style (main_window) == MODEST_MAIN_WINDOW_STYLE_SPLIT)
-               modest_main_window_set_style (main_window, MODEST_MAIN_WINDOW_STYLE_SIMPLE);
-       else
+       if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)))
                modest_main_window_set_style (main_window, MODEST_MAIN_WINDOW_STYLE_SPLIT);
+       else
+               modest_main_window_set_style (main_window, MODEST_MAIN_WINDOW_STYLE_SIMPLE);
 }
 
 void 
@@ -3090,7 +3118,7 @@ modest_ui_actions_on_check_names (GtkAction *action, ModestMsgEditWindow *window
 
 
 static GtkWidget*
-create_move_to_dialog (ModestWindow *win,
+create_move_to_dialog (GtkWindow *win,
                       GtkWidget *folder_view,
                       GtkWidget **tree_view)
 {
@@ -3125,6 +3153,8 @@ create_move_to_dialog (ModestWindow *win,
                modest_folder_view_update_model (MODEST_FOLDER_VIEW (*tree_view), 
                                                 TNY_ACCOUNT_STORE (modest_runtime_get_account_store ()));
 
+       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 */
@@ -3448,9 +3478,10 @@ modest_ui_actions_on_main_window_move_to (GtkAction *action,
                                                           MODEST_WIDGET_TYPE_HEADER_VIEW);
 
        /* Create and run the dialog */
-       dialog = create_move_to_dialog (MODEST_WINDOW (win), folder_view, &tree_view);
+       dialog = create_move_to_dialog (GTK_WINDOW(win), folder_view, &tree_view);
        modest_folder_view_select_first_inbox_or_local (MODEST_FOLDER_VIEW (tree_view));
        result = gtk_dialog_run (GTK_DIALOG(dialog));
+       modest_folder_view_show_non_move_folders(MODEST_FOLDER_VIEW (tree_view), TRUE);
        g_object_ref (tree_view);
 
        /* We do this to save an indentation level ;-) */
@@ -3561,8 +3592,9 @@ modest_ui_actions_on_msg_view_window_move_to (GtkAction *action,
                folder_view = NULL;
 
        /* Create and run the dialog */
-       dialog = create_move_to_dialog (MODEST_WINDOW (win), folder_view, &tree_view);  
+       dialog = create_move_to_dialog (GTK_WINDOW (win), folder_view, &tree_view);     
        result = gtk_dialog_run (GTK_DIALOG(dialog));
+       modest_folder_view_show_non_move_folders(MODEST_FOLDER_VIEW (tree_view), TRUE);
 
        if (result == GTK_RESPONSE_ACCEPT) {
                TnyFolderStore *folder_store;