* fix for NB#67837, NB#63633
[modest] / src / modest-ui-actions.c
index 3101492..af25fa3 100644 (file)
@@ -661,12 +661,9 @@ modest_ui_actions_on_accounts (GtkAction *action, ModestWindow *win)
 static void
 on_smtp_servers_window_hide (GtkWindow* window, gpointer user_data)
 {
-       ModestWindow *main_window = MODEST_WINDOW (user_data);
-       
        /* Save any changes. */
        modest_connection_specific_smtp_window_save_server_accounts (
-                       MODEST_CONNECTION_SPECIFIC_SMTP_WINDOW (window), 
-                       modest_window_get_active_account (main_window));
+                       MODEST_CONNECTION_SPECIFIC_SMTP_WINDOW (window));
        gtk_widget_destroy (GTK_WIDGET (window));
 }
 
@@ -682,22 +679,10 @@ modest_ui_actions_on_smtp_servers (GtkAction *action, ModestWindow *win)
 #ifdef MODEST_PLATFORM_MAEMO /* Defined in config.h */
        
        /* Create the window if necessary: */
-       const gchar *active_account_name = modest_window_get_active_account (win);
-       
-       /* TODO: Dim the menu item (not in the UI spec)? or show a warning,
-        * or show the default account?
-        * If we show the default account then the account name should be shown in 
-        * the window when we show it. */
-       if (!active_account_name) {
-               g_warning ("%s: No account is active.", __FUNCTION__);
-               return;
-       }
-               
        GtkWidget *specific_window = GTK_WIDGET (modest_connection_specific_smtp_window_new ());
        modest_connection_specific_smtp_window_fill_with_connections (
                MODEST_CONNECTION_SPECIFIC_SMTP_WINDOW (specific_window), 
-               modest_runtime_get_account_mgr(), 
-               active_account_name);
+               modest_runtime_get_account_mgr());
 
        /* Show the window: */  
        gtk_window_set_transient_for (GTK_WINDOW (specific_window), GTK_WINDOW (win));
@@ -730,9 +715,9 @@ modest_ui_actions_on_new_msg (GtkAction *action, ModestWindow *win)
                                return;
        }
        
-       account_name = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr ());
+       account_name = g_strdup (modest_window_get_active_account (win));
        if (!account_name)
-               account_name = g_strdup (modest_window_get_active_account (win));
+               account_name = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr ());
        if (!account_name) {
                g_printerr ("modest: no account found\n");
                goto cleanup;
@@ -775,7 +760,7 @@ modest_ui_actions_on_new_msg (GtkAction *action, ModestWindow *win)
                goto cleanup;
        }
        
-
+       
        /* Create and register edit window */
        /* This is destroyed by TODO. */
        msg_win = modest_msg_edit_window_new (msg, account_name, FALSE);
@@ -823,10 +808,7 @@ modest_ui_actions_msg_retrieval_check (ModestMailOperation *mail_op,
 }
 
 static void
-open_msg_cb (ModestMailOperation *mail_op, 
-            TnyHeader *header, 
-            TnyMsg *msg, 
-            gpointer user_data)
+open_msg_cb (ModestMailOperation *mail_op, TnyHeader *header,  TnyMsg *msg, gpointer user_data)
 {
        ModestWindowMgr *mgr = NULL;
        ModestWindow *parent_win = NULL;
@@ -838,9 +820,8 @@ open_msg_cb (ModestMailOperation *mail_op,
        /* Do nothing if there was any problem with the mail
           operation. The error will be shown by the error_handler of
           the mail operation */
-       if (!modest_ui_actions_msg_retrieval_check (mail_op, header, msg)) {
+       if (!modest_ui_actions_msg_retrieval_check (mail_op, header, msg))
                return;
-       }
 
        parent_win = (ModestWindow *) modest_mail_operation_get_source (mail_op);
        folder = tny_header_get_folder (header);
@@ -1817,10 +1798,20 @@ set_active_account_from_tny_account (TnyAccount *account,
                modest_tny_account_store_get_tny_account_by (modest_runtime_get_account_store (),
                                                             MODEST_TNY_ACCOUNT_STORE_QUERY_ID, 
                                                             server_acc_name);
+       if (!modest_server_account) {
+               g_warning ("%s: could not get tny account\n", __FUNCTION__);
+               return;
+       }
+
+       /* Update active account, but only if it's not a pseudo-account */
+       if ((!modest_tny_account_is_virtual_local_folders(modest_server_account)) &&
+           (!modest_tny_account_is_memory_card_account(modest_server_account))) {
+               const gchar *modest_acc_name = 
+                       modest_tny_account_get_parent_modest_account_name_for_server_account (modest_server_account);
+               if (modest_acc_name)
+                       modest_window_set_active_account (window, modest_acc_name);
+       }
        
-       const gchar *modest_acc_name = 
-               modest_tny_account_get_parent_modest_account_name_for_server_account (modest_server_account);
-       modest_window_set_active_account (window, modest_acc_name);
        g_object_unref (modest_server_account);
 }
 
@@ -1832,7 +1823,6 @@ folder_refreshed_cb (ModestMailOperation *mail_op,
 {
        ModestMainWindow *win = NULL;
        GtkWidget *header_view;
-       TnyFolder *current_folder;
        gboolean folder_empty = FALSE;
        gboolean all_marked_as_deleted = FALSE;
 
@@ -1843,10 +1833,14 @@ folder_refreshed_cb (ModestMailOperation *mail_op,
                modest_main_window_get_child_widget(win, MODEST_WIDGET_TYPE_HEADER_VIEW);
 
        if (header_view) {
+               TnyFolder *current_folder;
+
                current_folder = modest_header_view_get_folder (MODEST_HEADER_VIEW (header_view));
                if (current_folder != NULL && folder != current_folder) {
+                       g_object_unref (current_folder);
                        return;
                }
+               g_object_unref (current_folder);
        }
 
        /* Check if folder is empty and set headers view contents style */
@@ -1877,8 +1871,8 @@ modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view,
 
        if (TNY_IS_ACCOUNT (folder_store)) {
                if (selected) {
-                       /* Update active account */
                        set_active_account_from_tny_account (TNY_ACCOUNT (folder_store), MODEST_WINDOW (main_window));
+                       
                        /* Show account details */
                        modest_main_window_set_contents_style (main_window, MODEST_MAIN_WINDOW_CONTENTS_STYLE_DETAILS);
                }
@@ -1918,7 +1912,7 @@ modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view,
                                                      MODEST_CONF_HEADER_VIEW_KEY);
                } else {
                        /* Update the active account */
-                       modest_window_set_active_account (MODEST_WINDOW (main_window), NULL);
+                       //modest_window_set_active_account (MODEST_WINDOW (main_window), NULL);
                        /* Save only if we're seeing headers */
                        if (modest_main_window_get_contents_style (main_window) ==
                            MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS)