Removed an invalid g_object_unref
[modest] / src / modest-ui-actions.c
index 7d3ec7e..86dbe0f 100644 (file)
@@ -48,6 +48,9 @@
 #include <tny-camel-folder.h>
 #include <tny-camel-imap-folder.h>
 #include <tny-camel-pop-folder.h>
+#ifdef MODEST_TOOLKIT_HILDON2
+#include <hildon/hildon-pannable-area.h>
+#endif
 
 #ifdef MODEST_PLATFORM_MAEMO
 #include "maemo/modest-osso-state-saving.h"
@@ -200,11 +203,11 @@ remote_folder_has_leave_on_server (TnyFolderStore *folder)
 gboolean
 modest_ui_actions_run_account_setup_wizard (ModestWindow *win)
 {
-       gboolean result = FALSE;        
+       gboolean result = FALSE;
        GtkWindow *wizard;
        gint dialog_response;
 
-       /* there is no such wizard yet */       
+       /* there is no such wizard yet */
        wizard = GTK_WINDOW (modest_platform_get_account_settings_wizard ());
        modest_window_mgr_set_modal (modest_runtime_get_window_mgr(), GTK_WINDOW (wizard), (GtkWindow *) win);
 
@@ -214,7 +217,7 @@ modest_ui_actions_run_account_setup_wizard (ModestWindow *win)
        if (!win) 
                win = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr(),
                                                         TRUE);  /* create if not existent */
-       
+
        gtk_window_set_transient_for (GTK_WINDOW (wizard), GTK_WINDOW (win));
 
        /* make sure the mainwindow is visible. We need to present the
@@ -228,7 +231,7 @@ modest_ui_actions_run_account_setup_wizard (ModestWindow *win)
        gtk_window_present (GTK_WINDOW (win));
        gtk_window_present (GTK_WINDOW (wizard));
 #endif
-       
+
        dialog_response = gtk_dialog_run (GTK_DIALOG (wizard));
        gtk_widget_destroy (GTK_WIDGET (wizard));
        if (gtk_events_pending ())
@@ -447,6 +450,8 @@ modest_ui_actions_on_delete_message (GtkAction *action, ModestWindow *win)
                if (header) {
                        gchar *subject;
                        subject = tny_header_dup_subject (header);
+                       if (!subject)
+                               subject = g_strdup (_("mail_va_no_subject"));
                        desc = g_strdup_printf ("%s", subject); 
                        g_free (subject);
                        g_object_unref (header);
@@ -528,11 +533,11 @@ modest_ui_actions_on_delete_message (GtkAction *action, ModestWindow *win)
                        }
 
                        /* Free */
-                       if (next_row_reference != NULL) 
+                       if (gtk_tree_row_reference_valid (next_row_reference)) 
                                gtk_tree_row_reference_free (next_row_reference);
                        if (next_path != NULL) 
                                gtk_tree_path_free (next_path);                         
-                       if (prev_row_reference != NULL) 
+                       if (gtk_tree_row_reference_valid (prev_row_reference)) 
                                gtk_tree_row_reference_free (prev_row_reference);
                        if (prev_path != NULL) 
                                gtk_tree_path_free (prev_path);
@@ -628,6 +633,14 @@ modest_ui_actions_on_close_window (GtkAction *action, ModestWindow *win)
 }
 
 void
+modest_ui_actions_add_to_contacts (GtkAction *action, ModestWindow *win)
+{
+       g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (win));
+
+       modest_msg_view_window_add_to_contacts (MODEST_MSG_VIEW_WINDOW (win));
+}
+
+void
 modest_ui_actions_on_add_to_contacts (GtkAction *action, ModestWindow *win)
 {
        GtkClipboard *clipboard = NULL;
@@ -709,13 +722,16 @@ modest_ui_actions_compose_msg(ModestWindow *win,
        ModestTnyAccountStore *store = modest_runtime_get_account_store();
        GnomeVFSFileSize total_size, allowed_size;
 
-       /* we check for low-mem; in that case, show a warning, and don't allow
-        * composing a message with attachments
-        */
-       if (attachments && modest_platform_check_memory_low (win, TRUE))
+       /* we check for low-mem */
+       if (modest_platform_check_memory_low (win, TRUE))
                goto cleanup;
 
-       account_name = modest_account_mgr_get_default_account(mgr);
+#ifdef MODEST_TOOLKIT_HILDON2
+       account_name = g_strdup (modest_window_get_active_account(win));
+#endif
+       if (!account_name) {
+               account_name = modest_account_mgr_get_default_account(mgr);
+       }
        if (!account_name) {
                g_printerr ("modest: no account found\n");
                goto cleanup;
@@ -755,7 +771,10 @@ modest_ui_actions_compose_msg(ModestWindow *win,
        allowed_size = MODEST_MAX_ATTACHMENT_SIZE;
        msg_win = modest_msg_edit_window_new (msg, account_name, FALSE);
 
-       modest_window_mgr_register_window (modest_runtime_get_window_mgr(), msg_win, NULL);
+       if (!modest_window_mgr_register_window (modest_runtime_get_window_mgr(), msg_win, NULL)) {
+               gtk_widget_destroy (GTK_WIDGET (msg_win));
+               goto cleanup;
+       }
        modest_msg_edit_window_set_modified (MODEST_MSG_EDIT_WINDOW (msg_win), set_as_modified);
        gtk_widget_show_all (GTK_WIDGET (msg_win));
 
@@ -822,6 +841,19 @@ modest_ui_actions_msg_retrieval_check (ModestMailOperation *mail_op,
                        g_object_unref (source);
                }
 
+               if (error && ((error->code == TNY_SERVICE_ERROR_NO_SUCH_MESSAGE) ||
+                             error->code == TNY_SERVICE_ERROR_MESSAGE_NOT_AVAILABLE)) {
+                       gchar *subject, *msg;
+                       subject = tny_header_dup_subject (header);
+                       if (!subject)
+                               subject = g_strdup (_("mail_va_no_subject"));;
+                       msg = g_strdup_printf (_("emev_ni_ui_imap_message_not_available_in_server"),
+                                              subject);
+                       modest_platform_run_information_dialog (NULL, msg, FALSE);
+                       g_free (msg);
+                       g_free (subject);
+               }
+
                /* Remove the header from the preregistered uids */
                modest_window_mgr_unregister_header (modest_runtime_get_window_mgr (),  
                                                     header);
@@ -878,7 +910,7 @@ open_msg_cb (ModestMailOperation *mail_op,
        TnyFolder *folder;
        gboolean open_in_editor = FALSE;
        OpenMsgHelper *helper = (OpenMsgHelper *) user_data;
-       
+
        /* Do nothing if there was any problem with the mail
           operation. The error will be shown by the error_handler of
           the mail operation */
@@ -898,7 +930,7 @@ open_msg_cb (ModestMailOperation *mail_op,
                        g_warning ("%s: BUG: TNY_FOLDER_TYPE_INVALID", __FUNCTION__);
        }
 
-               
+
        if (folder_type == TNY_FOLDER_TYPE_OUTBOX) {
                TnyTransportAccount *traccount = NULL;
                ModestTnyAccountStore *accstore = modest_runtime_get_account_store();
@@ -906,18 +938,29 @@ open_msg_cb (ModestMailOperation *mail_op,
                if (traccount) {
                        ModestTnySendQueue *send_queue = NULL;
                        ModestTnySendQueueStatus status;
-                       char *msg_id;
+                       gchar *msg_id;
                        account = g_strdup(modest_tny_account_get_parent_modest_account_name_for_server_account(
                                                   TNY_ACCOUNT(traccount)));
                        send_queue = modest_runtime_get_send_queue(traccount, TRUE);
                        if (TNY_IS_SEND_QUEUE (send_queue)) {
                                msg_id = modest_tny_send_queue_get_msg_id (header);
                                status = modest_tny_send_queue_get_msg_status(send_queue, msg_id);
+                               g_free(msg_id);
+
                                /* Only open messages in outbox with the editor if they are in Failed state */
                                if (status == MODEST_TNY_SEND_QUEUE_FAILED) {
                                        open_in_editor = TRUE;
+                               } 
+#ifdef  MODEST_TOOLKIT_HILDON2
+                               else {
+                                       /* In Fremantle we can not
+                                          open any message from
+                                          outbox which is not in
+                                          failed state */
+                                       g_object_unref(traccount);
+                                       goto cleanup;
                                }
-                               g_free(msg_id);
+#endif
                        }
                        g_object_unref(traccount);
                } else {
@@ -932,7 +975,7 @@ open_msg_cb (ModestMailOperation *mail_op,
                account = g_strdup (modest_window_get_active_account (MODEST_WINDOW (parent_win)));
        if (!account)
                account = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr());
-       
+
        if (open_in_editor) {
                ModestAccountMgr *mgr = modest_runtime_get_account_mgr ();
                gchar *from_header = NULL, *acc_name;
@@ -959,12 +1002,12 @@ open_msg_cb (ModestMailOperation *mail_op,
                win = modest_msg_edit_window_new (msg, account, TRUE);
        } else {
                gchar *uid = modest_tny_folder_get_header_unique_id (header);
-               
+
                if (MODEST_IS_MAIN_WINDOW (parent_win)) {
                        GtkTreeRowReference *row_reference;
 
                        row_reference = (GtkTreeRowReference *) g_hash_table_lookup (helper->row_refs_per_header, header);
-                               
+
                        win = modest_msg_view_window_new_with_header_model (msg, account, (const gchar*) uid,
                                                                            helper->model, row_reference);
                } else {
@@ -972,11 +1015,14 @@ open_msg_cb (ModestMailOperation *mail_op,
                }
                g_free (uid);
        }
-       
+
        /* Register and show new window */
        if (win != NULL) {
                mgr = modest_runtime_get_window_mgr ();
-               modest_window_mgr_register_window (mgr, win, NULL);
+               if (!modest_window_mgr_register_window (mgr, win, NULL)) {
+                       gtk_widget_destroy (GTK_WIDGET (win));
+                       goto cleanup;
+               }
                gtk_widget_show_all (GTK_WIDGET(win));
        }
 
@@ -1194,7 +1240,7 @@ open_msgs_performer(gboolean canceled,
        if (proto == MODEST_PROTOCOL_REGISTRY_TYPE_INVALID) {
                proto = MODEST_PROTOCOLS_STORE_MAILDIR;
        }
-       
+
        /* Create the error messages */
        if (tny_list_get_length (not_opened_headers) == 1) {
                ModestProtocol *protocol;
@@ -1210,10 +1256,11 @@ open_msgs_performer(gboolean canceled,
 
                protocol = modest_protocol_registry_get_protocol_by_type (protocol_registry, proto);
                error_msg = modest_protocol_get_translation (protocol, MODEST_PROTOCOL_TRANSLATION_MSG_NOT_AVAILABLE, subject);
-               g_free (subject);
+               if (subject)
+                       g_free (subject);
                g_object_unref (header);
                g_object_unref (iter);
-               
+
                if (error_msg == NULL) {
                        error_msg = g_strdup (_("mail_ni_ui_folder_get_msg_folder_error"));
                }
@@ -1249,7 +1296,11 @@ open_msgs_performer(gboolean canceled,
 
        if (show_open_draft) {
                helper->banner_info = g_slice_new (OpenMsgBannerInfo);
+#ifdef MODEST_TOOLKIT_HILDON2
+               helper->banner_info->message = g_strdup (_("mail_me_opening"));
+#else
                helper->banner_info->message = g_strdup (_("mail_ib_opening_draft_message"));
+#endif
                helper->banner_info->banner = NULL;
                helper->banner_info->idle_handler = g_timeout_add (500, open_msg_banner_idle, 
                                                                   helper->banner_info);
@@ -1288,7 +1339,7 @@ open_msgs_from_headers (TnyList *headers, ModestWindow *win)
        OpenMsgHelper *helper;
        GtkTreeSelection *sel;
        GList *sel_list = NULL, *sel_list_iter = NULL;
-               
+
        g_return_if_fail (headers != NULL);
 
        /* Check that only one message is selected for opening */
@@ -1328,14 +1379,14 @@ open_msgs_from_headers (TnyList *headers, ModestWindow *win)
                ModestWindow *window = NULL;
                TnyHeader *header = NULL;
                gboolean found = FALSE;
-               
+
                header = TNY_HEADER (tny_iterator_get_current (iter));
                if (header)
                        flags = tny_header_get_flags (header);
 
                window = NULL;
                found = modest_window_mgr_find_registered_header (mgr, header, &window);
-               
+
                /* Do not open again the message and present the
                   window to the user */
                if (found) {
@@ -1551,6 +1602,8 @@ reply_forward_cb (ModestMailOperation *mail_op,
                edit_type = MODEST_EDIT_TYPE_FORWARD;
                break;
        default:
+               modest_window_mgr_unregister_header (modest_runtime_get_window_mgr (),
+                                                    header);
                g_return_if_reached ();
                return;
        }
@@ -1587,6 +1640,11 @@ reply_forward_cb (ModestMailOperation *mail_op,
        gtk_widget_show_all (GTK_WIDGET (msg_win));
 
 cleanup:
+       /* We always unregister the header because the message is
+          forwarded or replied so the original one is no longer
+          opened */
+       modest_window_mgr_unregister_header (modest_runtime_get_window_mgr (),
+                                            header);
        if (new_msg)
                g_object_unref (G_OBJECT (new_msg));
        if (account)
@@ -1665,6 +1723,7 @@ reply_forward_performer (gboolean canceled,
        }
 
        /* Retrieve the message */
+       modest_window_mgr_register_header (modest_runtime_get_window_mgr (), rf_helper->header, NULL);
        mail_op = modest_mail_operation_new_with_error_handling (G_OBJECT (parent_window),
                                                                 modest_ui_actions_disk_operations_error_handler,
                                                                 NULL, NULL);
@@ -2277,7 +2336,6 @@ modest_ui_actions_on_header_activated (ModestHeaderView *header_view,
                                       ModestMainWindow *main_window)
 {
        TnyList *headers;
-       GtkWidget *open_widget;
 
        g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
 
@@ -2296,9 +2354,6 @@ modest_ui_actions_on_header_activated (ModestHeaderView *header_view,
                return;
 
        modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (main_window));
-       open_widget = modest_window_get_action_widget (MODEST_WINDOW (main_window), "/MenuBar/EmailMenu/EmailOpenMenu");
-       if (!GTK_WIDGET_IS_SENSITIVE (open_widget))
-               return;
 
        headers = modest_header_view_get_selected_headers (header_view);
 
@@ -2651,7 +2706,7 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi
        gchar *account_name, *from;
        ModestAccountMgr *account_mgr;
        gboolean had_error = FALSE;
-       ModestMainWindow *win;
+       ModestMainWindow *win = NULL;
 
        g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW(edit_window), FALSE);
        
@@ -2713,6 +2768,14 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi
                                              on_save_to_drafts_cb,
                                              g_object_ref(edit_window));
 
+#ifdef MODEST_TOOLKIT_HILDON2
+       /* In hildon2 we always show the information banner on saving to drafts.
+        * It will be a system information banner in this case.
+        */
+       gchar *text = g_strdup_printf (_("mail_va_saved_to_drafts"), _("mcen_me_folder_drafts"));
+       modest_platform_information_banner (NULL, NULL, text);
+       g_free (text);
+#else
        /* Use the main window as the parent of the banner, if the
           main window does not exist it won't be shown, if the parent
           window exists then it's properly shown. We don't use the
@@ -2725,6 +2788,7 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi
                modest_platform_information_banner (GTK_WIDGET (win), NULL, text);
                g_free (text);
        }
+#endif
        modest_msg_edit_window_set_modified (edit_window, FALSE);
 
        /* Frees */
@@ -3343,7 +3407,7 @@ modest_ui_actions_on_rename_folder (GtkAction *action,
                return;
 
        if (TNY_IS_FOLDER (folder)) {
-               gchar *folder_name;
+               gchar *folder_name = NULL;
                gint response;
                const gchar *current_name;
                TnyFolderStore *parent;
@@ -3521,61 +3585,71 @@ password_dialog_check_field (GtkEditable *editable,
 }
 
 void
-modest_ui_actions_on_password_requested (TnyAccountStore *account_store, 
+modest_ui_actions_on_password_requested (TnyAccountStore *account_store,
                                         const gchar* server_account_name,
                                         gchar **username,
-                                        gchar **password, 
-                                        gboolean *cancel, 
+                                        gchar **password,
+                                        gboolean *cancel,
                                         gboolean *remember,
                                         ModestMainWindow *main_window)
 {
        g_return_if_fail(server_account_name);
        gboolean completed = FALSE;
        PasswordDialogFields *fields = NULL;
-       
+
        /* Initalize output parameters: */
        if (cancel)
                *cancel = FALSE;
-               
+
        if (remember)
                *remember = TRUE;
-               
+
 #ifndef MODEST_TOOLKIT_GTK
        /* Maemo uses a different (awkward) button order,
         * It should probably just use gtk_alternative_dialog_button_order ().
         */
-       GtkWidget *dialog = gtk_dialog_new_with_buttons (_("mail_ti_password_protected"),
-                                             NULL,
-                                             GTK_DIALOG_MODAL,
-                                             _("mcen_bd_dialog_ok"),
-                                             GTK_RESPONSE_ACCEPT,
-                                             _("mcen_bd_dialog_cancel"),
-                                             GTK_RESPONSE_REJECT,
-                                             NULL);
+#ifdef MODEST_TOOLKIT_HILDON2
+       GtkWidget *dialog =
+               gtk_dialog_new_with_buttons (_("mail_ti_password_protected"),
+                                            NULL,
+                                            GTK_DIALOG_MODAL,
+                                            _HL("wdgt_bd_done"),
+                                            GTK_RESPONSE_ACCEPT,
+                                            NULL);
 #else
-       GtkWidget *dialog = gtk_dialog_new_with_buttons (_("mail_ti_password_protected"),
-                                             NULL,
-                                             GTK_DIALOG_MODAL,
-                                             GTK_STOCK_CANCEL,
-                                             GTK_RESPONSE_REJECT,
-                                             GTK_STOCK_OK,
-                                             GTK_RESPONSE_ACCEPT,
-                                             NULL);
-#endif /* !MODEST_TOOLKIT_GTK */
+       GtkWidget *dialog =
+               gtk_dialog_new_with_buttons (_("mail_ti_password_protected"),
+                                            NULL,
+                                            _("mcen_bd_dialog_ok"),
+                                            GTK_RESPONSE_ACCEPT,
+                                            _("mcen_bd_dialog_cancel"),
+                                            GTK_RESPONSE_REJECT,
+                                            NULL);
+#endif /* MODEST_TOOLKIT_HILDON2 */
+#else
+       GtkWidget *dialog = 
+               gtk_dialog_new_with_buttons (_("mail_ti_password_protected"),
+                                            NULL,
+                                            GTK_DIALOG_MODAL,
+                                            GTK_STOCK_CANCEL,
+                                            GTK_RESPONSE_REJECT,
+                                            GTK_STOCK_OK,
+                                            GTK_RESPONSE_ACCEPT,
+                                            NULL);
+#endif /* MODEST_TOOLKIT_GTK */
 
        modest_window_mgr_set_modal (modest_runtime_get_window_mgr(), GTK_WINDOW (dialog), NULL);
-       
+
        gchar *server_name = modest_account_mgr_get_server_account_hostname (
                modest_runtime_get_account_mgr(), server_account_name);
        if (!server_name) {/* This happened once, though I don't know why. murrayc. */
                g_warning("%s: Could not get server name for server account '%s'", __FUNCTION__, server_account_name);
                if (cancel)
                        *cancel = TRUE;
+               gtk_widget_destroy (dialog);
                return;
        }
-       
-       /* This causes a warning because the logical ID has no %s in it, 
-        * though the translation does, but there is not much we can do about that: */
+
        gchar *txt = g_strdup_printf (_("mail_ia_password_info"), server_name);
        gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), gtk_label_new(txt),
                            FALSE, FALSE, 0);
@@ -3586,7 +3660,7 @@ modest_ui_actions_on_password_requested (TnyAccountStore *account_store,
        /* username: */
        gchar *initial_username = modest_account_mgr_get_server_account_username (
                modest_runtime_get_account_mgr(), server_account_name);
-       
+
        GtkWidget *entry_username = gtk_entry_new ();
        if (initial_username)
                gtk_entry_set_text (GTK_ENTRY (entry_username), initial_username);
@@ -3605,48 +3679,48 @@ modest_ui_actions_on_password_requested (TnyAccountStore *account_store,
 #ifndef MODEST_TOOLKIT_GTK
        /* Auto-capitalization is the default, so let's turn it off: */
        hildon_gtk_entry_set_input_mode (GTK_ENTRY (entry_username), HILDON_GTK_INPUT_MODE_FULL);
-       
+
        /* Create a size group to be used by all captions.
         * Note that HildonCaption does not create a default size group if we do not specify one.
         * We use GTK_SIZE_GROUP_HORIZONTAL, so that the widths are the same. */
        GtkSizeGroup *sizegroup = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
-       
+
        GtkWidget *caption = hildon_caption_new (sizegroup, 
                _("mail_fi_username"), entry_username, NULL, HILDON_CAPTION_MANDATORY);
        gtk_widget_show (entry_username);
        gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), caption, 
                FALSE, FALSE, MODEST_MARGIN_HALF);
        gtk_widget_show (caption);
-#else 
+#else
        gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), entry_username,
                            TRUE, FALSE, 0);
-#endif /* !MODEST_TOOLKIT_GTK */       
-                           
+#endif /* !MODEST_TOOLKIT_GTK */
+
        /* password: */
        GtkWidget *entry_password = gtk_entry_new ();
        gtk_entry_set_visibility (GTK_ENTRY(entry_password), FALSE);
        /* gtk_entry_set_invisible_char (GTK_ENTRY(entry_password), "*"); */
-       
+
 #ifndef MODEST_TOOLKIT_GTK
        /* Auto-capitalization is the default, so let's turn it off: */
-       hildon_gtk_entry_set_input_mode (GTK_ENTRY (entry_password), 
+       hildon_gtk_entry_set_input_mode (GTK_ENTRY (entry_password),
                HILDON_GTK_INPUT_MODE_FULL | HILDON_GTK_INPUT_MODE_INVISIBLE);
-       
-       caption = hildon_caption_new (sizegroup, 
+
+       caption = hildon_caption_new (sizegroup,
                _("mail_fi_password"), entry_password, NULL, HILDON_CAPTION_MANDATORY);
        gtk_widget_show (entry_password);
-       gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), caption, 
+       gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), caption,
                FALSE, FALSE, MODEST_MARGIN_HALF);
        gtk_widget_show (caption);
        g_object_unref (sizegroup);
-#else 
+#else
        gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), entry_password,
                            TRUE, FALSE, 0);
-#endif /* !MODEST_TOOLKIT_GTK */       
+#endif /* !MODEST_TOOLKIT_GTK */
 
        if (initial_username != NULL)
                gtk_widget_grab_focus (GTK_WIDGET (entry_password));
-                               
+
 /* This is not in the Maemo UI spec:
        remember_pass_check = gtk_check_button_new_with_label (_("Remember password"));
        gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), remember_pass_check,
@@ -3665,18 +3739,18 @@ modest_ui_actions_on_password_requested (TnyAccountStore *account_store,
        gtk_widget_show_all (GTK_WIDGET(GTK_DIALOG(dialog)->vbox));
 
        while (!completed) {
-       
+
                if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
                        if (username) {
                                *username = g_strdup (gtk_entry_get_text (GTK_ENTRY(entry_username)));
-                               
+
                                /* Note that an empty field becomes the "" string */
                                if (*username && strlen (*username) > 0) {
                                        modest_account_mgr_set_server_account_username (modest_runtime_get_account_mgr(), 
                                                                                        server_account_name, 
                                                                                        *username);
                                        completed = TRUE;
-                               
+
                                        const gboolean username_was_changed = 
                                                (strcmp (*username, initial_username) != 0);
                                        if (username_was_changed) {
@@ -3684,16 +3758,18 @@ modest_ui_actions_on_password_requested (TnyAccountStore *account_store,
                                                           "username in the get_password() callback.\n", __FUNCTION__);
                                        }
                                } else {
+                                       g_free (*username);
+                                       *username = NULL;
                                        /* Show error */
                                        modest_platform_information_banner (GTK_WIDGET (dialog), NULL, 
                                                                            _("mcen_ib_username_pw_incorrect"));
                                        completed = FALSE;
                                }
                        }
-                       
+
                        if (password) {
                                *password = g_strdup (gtk_entry_get_text (GTK_ENTRY(entry_password)));
-                       
+
                                /* We do not save the password in the configuration, 
                                 * because this function is only called for passwords that should 
                                 * not be remembered:
@@ -3701,17 +3777,19 @@ modest_ui_actions_on_password_requested (TnyAccountStore *account_store,
                                 modest_runtime_get_account_mgr(), server_account_name, 
                                 *password);
                                 */
-                       }                       
+                       }
                        if (cancel)
-                               *cancel   = FALSE;                      
+                               *cancel   = FALSE;
                } else {
+#ifndef MODEST_TOOLKIT_HILDON2
                        /* Set parent to NULL or the banner will disappear with its parent dialog */
                        modest_platform_information_banner(NULL, NULL, _("mail_ib_login_cancelled"));
+#endif
                        completed = TRUE;
                        if (username)
-                               *username = NULL;                       
+                               *username = NULL;
                        if (password)
-                               *password = NULL;                       
+                               *password = NULL;
                        if (cancel)
                                *cancel   = TRUE;
                }
@@ -3724,6 +3802,7 @@ modest_ui_actions_on_password_requested (TnyAccountStore *account_store,
                *remember = FALSE;
 */
 
+       g_free (initial_username);
        gtk_widget_destroy (dialog);
        g_slice_free (PasswordDialogFields, fields);
        
@@ -3958,8 +4037,8 @@ modest_ui_actions_on_paste (GtkAction *action,
                        gtk_text_buffer_paste_clipboard (buffer, clipboard, NULL, TRUE);
                } else if (MODEST_IS_MSG_EDIT_WINDOW (window)) {
                        ModestMailOperation *mail_op;
-                       TnyFolder *src_folder;
-                       TnyList *data;
+                       TnyFolder *src_folder = NULL;
+                       TnyList *data = NULL;
                        gboolean delete;
                        PasteAsAttachmentHelper *helper = g_new0 (PasteAsAttachmentHelper, 1);
                        helper->window = MODEST_MSG_EDIT_WINDOW (window);
@@ -3979,6 +4058,12 @@ modest_ui_actions_on_paste (GtkAction *action,
                                                                     helper,
                                                                     paste_as_attachment_free);
                        }
+                       /* Free */
+                       if (data) 
+                               g_object_unref (data);
+                       if (src_folder) 
+                               g_object_unref (src_folder);
+
                }
        } else if (MODEST_IS_FOLDER_VIEW (focused_widget)) {
                ModestEmailClipboard *clipboard = NULL;
@@ -4236,38 +4321,7 @@ headers_action_show_details (TnyHeader *header,
                             gpointer user_data)
 
 {
-       GtkWidget *dialog;
-       
-       /* Create dialog */
-       dialog = modest_details_dialog_new_with_header (GTK_WINDOW (window), header);
-
-       /* Run dialog */
-       modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), GTK_WINDOW (dialog), (GtkWindow *) window);
-       gtk_widget_show_all (dialog);
-
-       g_signal_connect_swapped (dialog, "response", 
-                                 G_CALLBACK (gtk_widget_destroy),
-                                 dialog);
-}
-
-/*
- * Show the folder details in a ModestDetailsDialog widget
- */
-static void
-show_folder_details (TnyFolder *folder, 
-                    GtkWindow *window)
-{
-       GtkWidget *dialog;
-       
-       /* Create dialog */
-       dialog = modest_details_dialog_new_with_folder (window, folder);
-
-       /* Run dialog */
-       gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
-       gtk_widget_show_all (dialog);
-       gtk_dialog_run (GTK_DIALOG (dialog));
-
-       gtk_widget_destroy (dialog);
+       modest_platform_run_header_details_dialog (GTK_WINDOW (window), header);
 }
 
 /*
@@ -4321,7 +4375,8 @@ modest_ui_actions_on_details (GtkAction *action,
                        /* This function should not be called for account items, 
                         * because we dim the menu item for them. */
                        if (TNY_IS_FOLDER (folder_store)) {
-                               show_folder_details (TNY_FOLDER (folder_store), GTK_WINDOW (win));
+                               modest_platform_run_folder_details_dialog (GTK_WINDOW (win), 
+                                                                          TNY_FOLDER (folder_store));
                        }
 
                        g_object_unref (folder_store);
@@ -4374,7 +4429,7 @@ modest_ui_actions_on_toggle_toolbar (GtkToggleAction *toggle,
 
        active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (toggle));
 
-       /* Check if we want to toggle the toolbar vuew in fullscreen
+       /* Check if we want to toggle the toolbar view in fullscreen
           or normal mode */
        if (!strcmp (gtk_action_get_name (GTK_ACTION (toggle)), 
                     "ViewShowToolbarFullScreen")) {
@@ -4497,7 +4552,10 @@ on_move_to_dialog_folder_selection_changed (ModestFolderView* self,
                                                                                         MODEST_PROTOCOL_REGISTRY_STORE_HAS_FOLDERS));
                }
                g_object_unref (local_account);
-               g_object_unref (mmc_account);
+
+               /* It could not exist */
+               if (mmc_account)
+                       g_object_unref (mmc_account);
        }
 
        /* Check the target folder rules */
@@ -4600,7 +4658,12 @@ create_move_to_dialog (GtkWindow *win,
                       GtkWidget *folder_view,
                       GtkWidget **tree_view)
 {
-       GtkWidget *dialog, *scroll;
+       GtkWidget *dialog;
+#ifdef MODEST_TOOLKIT_HILDON2
+       GtkWidget *pannable;
+#else
+       GtkWidget *scroll;
+#endif
        GtkWidget *new_button, *ok_button;
 
        dialog = gtk_dialog_new_with_buttons (_("mcen_ti_moveto_folders_title"),
@@ -4633,10 +4696,14 @@ create_move_to_dialog (GtkWindow *win,
        g_object_set_data (G_OBJECT (dialog), MOVE_FOLDER_NEW_BUTTON, new_button);
 
        /* Create scrolled window */
+#ifdef MODEST_TOOLKIT_HILDON2
+       pannable = hildon_pannable_area_new ();
+#else
        scroll = gtk_scrolled_window_new (NULL, NULL);
        gtk_scrolled_window_set_policy  (GTK_SCROLLED_WINDOW (scroll),
                                         GTK_POLICY_AUTOMATIC,
                                         GTK_POLICY_AUTOMATIC);
+#endif
 
 #ifdef MODEST_TOOLKIT_GTK
        gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll), GTK_SHADOW_IN);
@@ -4714,11 +4781,17 @@ create_move_to_dialog (GtkWindow *win,
        /* Hide special folders */
        modest_folder_view_show_non_move_folders (MODEST_FOLDER_VIEW (*tree_view), FALSE);
 
+#ifdef MODEST_TOOLKIT_HILDON2
+       gtk_container_add (GTK_CONTAINER (pannable), *tree_view);
+       gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), 
+                           pannable, TRUE, TRUE, 0);
+#else
        gtk_container_add (GTK_CONTAINER (scroll), *tree_view);
-
        /* Add scroll to dialog */
        gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), 
                            scroll, TRUE, TRUE, 0);
+#endif
+
 
        gtk_widget_show_all (GTK_WIDGET(GTK_DIALOG(dialog)->vbox));
 #ifndef MODEST_TOOLKIT_GTK
@@ -4803,8 +4876,10 @@ move_to_helper_destroyer (gpointer user_data)
                gtk_widget_destroy (GTK_WIDGET (helper->banner));
                g_object_unref (helper->banner);
        }
-       if (helper->reference != NULL)
+       if (gtk_tree_row_reference_valid (helper->reference)) {
                gtk_tree_row_reference_free (helper->reference);
+               helper->reference = NULL;
+       }
        g_free (helper);
 }
 
@@ -4828,7 +4903,8 @@ move_to_cb (ModestMailOperation *mail_op,
                                /* No more messages to view, so close this window */
                                modest_ui_actions_on_close_window (NULL, MODEST_WINDOW(self));
                        }
-               } else if (MODEST_IS_MAIN_WINDOW (object) && helper->reference != NULL) {
+               } else if (MODEST_IS_MAIN_WINDOW (object) && 
+                          gtk_tree_row_reference_valid (helper->reference)) {
                        GtkWidget *header_view;
                        GtkTreePath *path;
                        GtkTreeSelection *sel;
@@ -4960,7 +5036,7 @@ open_msg_for_purge_cb (ModestMailOperation *mail_op,
                if (response == GTK_RESPONSE_OK) {
                        GtkWidget *info;
                        info =
-                               modest_platform_animation_banner (GTK_WIDGET (win), NULL, _("mcen_ib_removing_attachment"));
+                               modest_platform_animation_banner (GTK_WIDGET (win), NULL, _("mcen_me_inbox_remove_attachments"));
                        iter = tny_list_create_iterator (parts);
                        while (!tny_iterator_is_done (iter)) {
                                TnyMimePart *part;
@@ -5625,6 +5701,8 @@ void
 modest_ui_actions_on_help (GtkAction *action, 
                           GtkWindow *win)
 {
+       /* Help app is not available at all in fremantle */
+#ifndef MODEST_TOOLKIT_HILDON2
        const gchar *help_id;
 
        g_return_if_fail (win && GTK_IS_WINDOW(win));
@@ -5633,12 +5711,16 @@ modest_ui_actions_on_help (GtkAction *action,
 
         if (help_id)
                 modest_platform_show_help (GTK_WINDOW (win), help_id);
+#endif
 }
 
 void 
 modest_ui_actions_on_csm_help (GtkAction *action, 
                               GtkWindow *win)
 {
+       /* Help app is not available at all in fremantle */
+#ifndef MODEST_TOOLKIT_HILDON2
+
        const gchar* help_id = NULL;
        GtkWidget *folder_view;
        TnyFolderStore *folder_store;
@@ -5661,6 +5743,7 @@ modest_ui_actions_on_csm_help (GtkAction *action,
                 modest_platform_show_help (GTK_WINDOW (win), help_id);
        else
                modest_ui_actions_on_help (action, win);
+#endif
 }
 
 static void     
@@ -6030,7 +6113,8 @@ modest_ui_actions_on_send_queue_status_changed (ModestTnySendQueue *send_queue,
 
                tree_column = gtk_tree_view_get_column (GTK_TREE_VIEW (header_view), 
                                                        TNY_GTK_HEADER_LIST_MODEL_FROM_COLUMN);
-               gtk_tree_view_column_queue_resize (tree_column);
+               if (tree_column)
+                       gtk_tree_view_column_queue_resize (tree_column);
        }
 #else
        gtk_widget_queue_draw (header_view);
@@ -6110,7 +6194,8 @@ modest_ui_actions_get_msg_already_deleted_error_msg (ModestWindow *win)
 
        subject = tny_header_dup_subject (header);
        msg = modest_protocol_get_translation (protocol, MODEST_PROTOCOL_TRANSLATION_MSG_NOT_AVAILABLE, subject);
-       g_free (subject);
+       if (subject)
+               g_free (subject);
        if (msg == NULL) {
                msg = g_strdup_printf (_("mail_ni_ui_folder_get_msg_folder_error"));
        }
@@ -6122,3 +6207,49 @@ modest_ui_actions_get_msg_already_deleted_error_msg (ModestWindow *win)
 
        return msg;
 }
+
+gboolean
+modest_ui_actions_on_delete_account (GtkWindow *parent_window,
+                                    const gchar *account_name,
+                                    const gchar *account_title)
+{
+       ModestAccountMgr *account_mgr;
+       gchar *txt = NULL;
+       gint response;
+       ModestProtocol *protocol;
+       gboolean removed = FALSE;
+
+       g_return_val_if_fail (account_name, FALSE);
+       g_return_val_if_fail (account_title, FALSE);
+
+       account_mgr = modest_runtime_get_account_mgr();
+
+       /* The warning text depends on the account type: */
+       protocol = modest_protocol_registry_get_protocol_by_type (modest_runtime_get_protocol_registry (),
+                                                                 modest_account_mgr_get_store_protocol (account_mgr,
+                                                                                                        account_name));
+       txt = modest_protocol_get_translation (protocol,
+                                              MODEST_PROTOCOL_TRANSLATION_DELETE_MAILBOX,
+                                              account_title);
+       if (txt == NULL)
+               txt = g_strdup_printf (_("emev_nc_delete_mailbox"), account_title);
+
+       response = modest_platform_run_confirmation_dialog (parent_window, txt);
+       g_free (txt);
+       txt = NULL;
+
+       if (response == GTK_RESPONSE_OK) {
+               /* Remove account. If it succeeds then it also removes
+                  the account from the ModestAccountView: */
+               gboolean is_default = FALSE;
+               gchar *default_account_name = modest_account_mgr_get_default_account (account_mgr);
+               if (default_account_name && (strcmp (default_account_name, account_name) == 0))
+                       is_default = TRUE;
+               g_free (default_account_name);
+
+               removed = modest_account_mgr_remove_account (account_mgr, account_name);
+               if (!removed)
+                       g_warning ("%s: modest_account_mgr_remove_account() failed.\n", __FUNCTION__);
+       }
+       return removed;
+}