Removed an invalid g_object_unref
[modest] / src / modest-ui-actions.c
index f9738a5..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,10 +722,8 @@ 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;
 
 #ifdef MODEST_TOOLKIT_HILDON2
@@ -834,6 +845,8 @@ modest_ui_actions_msg_retrieval_check (ModestMailOperation *mail_op,
                              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);
@@ -897,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 */
@@ -917,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();
@@ -925,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 {
@@ -951,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;
@@ -978,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 {
@@ -991,7 +1015,7 @@ open_msg_cb (ModestMailOperation *mail_op,
                }
                g_free (uid);
        }
-       
+
        /* Register and show new window */
        if (win != NULL) {
                mgr = modest_runtime_get_window_mgr ();
@@ -1216,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;
@@ -1232,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"));
                }
@@ -1271,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);
@@ -1310,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 */
@@ -1350,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) {
@@ -2307,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));
 
@@ -2326,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);
 
@@ -3382,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;
@@ -3560,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);
@@ -3625,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);
@@ -3644,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,
@@ -3704,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) {
@@ -3723,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:
@@ -3740,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;
                }
@@ -3763,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);
        
@@ -3997,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);
@@ -4018,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;
@@ -4275,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);
 }
 
 /*
@@ -4360,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);
@@ -4413,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")) {
@@ -4536,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 */
@@ -4639,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"),
@@ -4672,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);
@@ -4753,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
@@ -4842,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);
 }
 
@@ -4867,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;
@@ -4999,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;
@@ -5664,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));
@@ -5672,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;
@@ -5700,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     
@@ -6150,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"));
        }
@@ -6162,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;
+}