* Adds the force parameter to the connect_and_perform which forces the device to...
[modest] / src / maemo / modest-msg-view-window.c
index b152574..4b6e5b8 100644 (file)
@@ -473,8 +473,8 @@ set_toolbar_mode (ModestMsgViewWindow *self,
        /* Sets current toolbar mode */
        priv->current_toolbar_mode = mode;
 
-       /* Update toolbar dimming state */
-       modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (self));
+       /* Update window dimming state */
+       modest_ui_actions_check_window_dimming_rules (MODEST_WINDOW (self));
 
        switch (mode) {
        case TOOLBAR_MODE_NORMAL:               
@@ -730,8 +730,7 @@ modest_msg_view_window_construct (ModestMsgViewWindow *self,
        GObject *obj = NULL;
        ModestMsgViewWindowPrivate *priv = NULL;
        ModestWindowPrivate *parent_priv = NULL;
-       ModestDimmingRulesGroup *menu_rules_group = NULL;
-       ModestDimmingRulesGroup *toolbar_rules_group = NULL;
+       ModestDimmingRulesGroup *window_rules_group = NULL;
        ModestDimmingRulesGroup *clipboard_rules_group = NULL;
 
        obj = G_OBJECT (self);
@@ -746,30 +745,27 @@ modest_msg_view_window_construct (ModestMsgViewWindow *self,
        gtk_widget_show (parent_priv->menubar);
        parent_priv->ui_dimming_manager = modest_ui_dimming_manager_new();
 
-       menu_rules_group = modest_dimming_rules_group_new ("ModestMenuDimmingRules", FALSE);
-       toolbar_rules_group = modest_dimming_rules_group_new ("ModestToolbarDimmingRules", TRUE);
+       window_rules_group = modest_dimming_rules_group_new ("ModestWindowDimmingRules", TRUE);
        clipboard_rules_group = modest_dimming_rules_group_new ("ModestClipboardDimmingRules", FALSE);
 
        /* Add common dimming rules */
-       modest_dimming_rules_group_add_rules (menu_rules_group, 
-                                             modest_msg_view_menu_dimming_entries,
-                                             G_N_ELEMENTS (modest_msg_view_menu_dimming_entries),
-                                             MODEST_WINDOW (self));
-       modest_dimming_rules_group_add_rules (toolbar_rules_group, 
+       modest_dimming_rules_group_add_rules (window_rules_group, 
                                              modest_msg_view_toolbar_dimming_entries,
                                              G_N_ELEMENTS (modest_msg_view_toolbar_dimming_entries),
                                              MODEST_WINDOW (self));
+       modest_dimming_rules_group_add_rules (window_rules_group, 
+                                             modest_msg_view_menu_dimming_entries,
+                                             G_N_ELEMENTS (modest_msg_view_menu_dimming_entries),
+                                             MODEST_WINDOW (self));
        modest_dimming_rules_group_add_rules (clipboard_rules_group, 
                                              modest_msg_view_clipboard_dimming_entries,
                                              G_N_ELEMENTS (modest_msg_view_clipboard_dimming_entries),
                                              MODEST_WINDOW (self));
 
        /* Insert dimming rules group for this window */
-       modest_ui_dimming_manager_insert_rules_group (parent_priv->ui_dimming_manager, menu_rules_group);
-       modest_ui_dimming_manager_insert_rules_group (parent_priv->ui_dimming_manager, toolbar_rules_group);
+       modest_ui_dimming_manager_insert_rules_group (parent_priv->ui_dimming_manager, window_rules_group);
        modest_ui_dimming_manager_insert_rules_group (parent_priv->ui_dimming_manager, clipboard_rules_group);
-       g_object_unref (menu_rules_group);
-       g_object_unref (toolbar_rules_group);
+       g_object_unref (window_rules_group);
        g_object_unref (clipboard_rules_group);
 
        restore_settings (MODEST_MSG_VIEW_WINDOW(obj));
@@ -909,8 +905,8 @@ modest_msg_view_window_new_with_header_model (TnyMsg *msg,
        gtk_widget_show_all (GTK_WIDGET (window));
        modest_msg_view_window_update_priority (window);
 
-       /* Check toolbar dimming rules */
-       modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window));
+       /* Check window dimming rules */
+       modest_ui_actions_check_window_dimming_rules (MODEST_WINDOW (window));
        modest_window_check_dimming_rules_group (MODEST_WINDOW (window), "ModestClipboardDimmingRules");
 
        return MODEST_WINDOW(window);
@@ -964,8 +960,8 @@ modest_msg_view_window_new_for_attachment (TnyMsg *msg,
        tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), msg);
        update_window_title (MODEST_MSG_VIEW_WINDOW (obj));
 
-       /* Check toolbar dimming rules */
-       modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (obj));
+       /* Check window dimming rules */
+       modest_ui_actions_check_window_dimming_rules (MODEST_WINDOW (obj));
        modest_window_check_dimming_rules_group (MODEST_WINDOW (obj), "ModestClipboardDimmingRules");
 
        return MODEST_WINDOW(obj);
@@ -976,14 +972,14 @@ void modest_msg_view_window_on_row_changed(
                GtkTreePath *arg1,
                GtkTreeIter *arg2,
                ModestMsgViewWindow *window){
-       modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window));
+       modest_ui_actions_check_window_dimming_rules (MODEST_WINDOW (window));
 }
 
 void modest_msg_view_window_on_row_deleted(
                GtkTreeModel *header_model,
                GtkTreePath *arg1,
                ModestMsgViewWindow *window){
-       modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window));
+       modest_ui_actions_check_window_dimming_rules (MODEST_WINDOW (window));
 }
 
 /* On insertions we check if the folder still has the message we are
@@ -1021,7 +1017,7 @@ void modest_msg_view_window_on_row_inserted(
                        select_next_valid_row (priv->header_model,
                                               &(priv->next_row_reference), FALSE);
                }
-               modest_ui_actions_check_toolbar_dimming_rules (
+               modest_ui_actions_check_window_dimming_rules (
                                MODEST_WINDOW (window));
                return;
        }
@@ -1071,7 +1067,7 @@ void modest_msg_view_window_on_row_inserted(
        select_next_valid_row (priv->header_model,
                        &(priv->next_row_reference), FALSE);
 
-       modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window));
+       modest_ui_actions_check_window_dimming_rules (MODEST_WINDOW (window));
 }
 
 void modest_msg_view_window_on_row_reordered(
@@ -1080,7 +1076,7 @@ void modest_msg_view_window_on_row_reordered(
                GtkTreeIter *arg2,
                gpointer arg3,
                ModestMsgViewWindow *window){
-       modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window));
+       modest_ui_actions_check_window_dimming_rules (MODEST_WINDOW (window));
 }
 
 /* The modest_msg_view_window_update_model_replaced implements update
@@ -1145,7 +1141,7 @@ void modest_msg_view_window_update_model_replaced(
                g_object_unref(priv->next_row_reference);
        priv->next_row_reference = NULL;
 
-       modest_ui_actions_check_toolbar_dimming_rules(MODEST_WINDOW(window));
+       modest_ui_actions_check_window_dimming_rules(MODEST_WINDOW(window));
 
        g_assert(model != NULL);
 
@@ -1417,7 +1413,21 @@ modest_msg_view_window_key_event (GtkWidget *window,
                                  GdkEventKey *event,
                                  gpointer userdata)
 {
-       
+       GtkWidget *focus;
+
+       focus = gtk_window_get_focus (GTK_WINDOW (window));
+
+       /* for the find toolbar case */
+       if (focus && GTK_IS_ENTRY (focus)) {
+               if (event->keyval == GDK_BackSpace) {
+                       GdkEvent *copy;
+                       copy = gdk_event_copy ((GdkEvent *) event);
+                       gtk_widget_event (focus, copy);
+                       gdk_event_free (copy);
+                       return TRUE;
+               } else 
+                       return FALSE;
+       }
        if (event->keyval == GDK_Up || event->keyval == GDK_KP_Up ||
            event->keyval == GDK_Down || event->keyval == GDK_KP_Down ||
            event->keyval == GDK_Page_Up || event->keyval == GDK_KP_Page_Up ||
@@ -1587,7 +1597,7 @@ modest_msg_view_window_first_message_selected (ModestMsgViewWindow *window)
  *
  * If the message was not previously downloaded then ask the user
  * before downloading. If there is no connection launch the connection
- * dialog. Update toolbar dimming rules.
+ * dialog. Update window dimming rules.
  *
  * Returns: TRUE if the mail operation was started, otherwise if the
  * user do not want to download the message, or if the user do not
@@ -1651,8 +1661,8 @@ message_reader (ModestMsgViewWindow *window,
        modest_mail_operation_get_msg (mail_op, header, view_msg_cb, row_reference);
        g_object_unref (mail_op);
 
-       /* Update toolbar dimming rules */
-       modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window));
+       /* Update window dimming rules */
+       modest_ui_actions_check_window_dimming_rules (MODEST_WINDOW (window));
 
        return TRUE;
 }
@@ -1713,52 +1723,13 @@ modest_msg_view_window_select_next_message (ModestMsgViewWindow *window)
        return retval;          
 }
 
-gboolean 
-modest_msg_view_window_select_first_message (ModestMsgViewWindow *self)
-{
-       ModestMsgViewWindowPrivate *priv = NULL;
-       TnyHeader *header = NULL;
-       GtkTreeIter iter;
-       GtkTreePath *path = NULL;
-       GtkTreeRowReference *row_reference = NULL;
-
-       g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (self), FALSE);
-       priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
-
-       /* Check that the model is not empty */
-       if (!gtk_tree_model_get_iter_first (priv->header_model, &iter))
-               return FALSE;
-
-       /* Get the header */
-       gtk_tree_model_get (priv->header_model, 
-                           &iter, 
-                           TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN,
-                           &header, -1);
-       g_return_val_if_fail (TNY_IS_HEADER (header), FALSE);
-       if (!msg_is_visible (header, priv->is_outbox)) {
-               g_object_unref (header);
-               return modest_msg_view_window_select_next_message (self);
-       }
-       
-       path = gtk_tree_model_get_path (priv->header_model, &iter);
-       row_reference = gtk_tree_row_reference_new (priv->header_model, path);
-       gtk_tree_path_free (path);
-
-       /* Read the message & show it */
-       message_reader (self, priv, header, row_reference);
-       
-       /* Free */
-       g_object_unref (header);
-
-       return TRUE;
-}
 gboolean        
 modest_msg_view_window_select_previous_message (ModestMsgViewWindow *window)
 {
        ModestMsgViewWindowPrivate *priv = NULL;
        GtkTreePath *path;
-       GtkTreeRowReference *row_reference = NULL;
+       gboolean finished = FALSE;
+       gboolean retval = FALSE;
 
        g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window), FALSE);
        priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
@@ -1768,7 +1739,7 @@ modest_msg_view_window_select_previous_message (ModestMsgViewWindow *window)
                return FALSE;
 
        path = gtk_tree_row_reference_get_path (priv->row_reference);
-       while (gtk_tree_path_prev (path)) {
+       while (!finished && gtk_tree_path_prev (path)) {
                TnyHeader *header;
                GtkTreeIter iter;
 
@@ -1776,29 +1747,24 @@ modest_msg_view_window_select_previous_message (ModestMsgViewWindow *window)
                gtk_tree_model_get (priv->header_model, &iter, 
                                    TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN,
                                    &header, -1);
-               if (!header)
-                       break;
-               if (!msg_is_visible (header, priv->is_outbox)) {
-                       g_object_unref (header);
-                       continue;
-               }
-
-               row_reference = gtk_tree_row_reference_new (priv->header_model, path);
-               /* Read the message & show it */
-               if (!message_reader (window, priv, header, row_reference)) {
-                       gtk_tree_row_reference_free (row_reference);
+               finished = TRUE;
+               if (header) {
+                       if (msg_is_visible (header, priv->is_outbox)) {
+                               GtkTreeRowReference *row_reference;
+                               row_reference = gtk_tree_row_reference_new (priv->header_model, path);
+                               /* Read the message & show it */
+                               retval = message_reader (window, priv, header, row_reference);
+                               if (!retval)
+                                       gtk_tree_row_reference_free (row_reference);
+                       } else {
+                               finished = FALSE;
+                       }
                        g_object_unref (header);
-                       break;
                }
-
-               gtk_tree_path_free (path);
-               g_object_unref (header);
-
-               return TRUE;
        }
 
        gtk_tree_path_free (path);
-       return FALSE;
+       return retval;
 }
 
 static void
@@ -2267,11 +2233,11 @@ on_queue_changed (ModestMailOperationQueue *queue,
        }
 }
 
-GList *
+TnyList *
 modest_msg_view_window_get_attachments (ModestMsgViewWindow *win) 
 {
        ModestMsgViewWindowPrivate *priv;
-       GList *selected_attachments = NULL;
+       TnyList *selected_attachments = NULL;
        
        g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (win), NULL);
        priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (win);
@@ -2288,7 +2254,7 @@ modest_msg_view_window_view_attachment (ModestMsgViewWindow *window, TnyMimePart
        const gchar *msg_uid;
        gchar *attachment_uid = NULL;
        gint attachment_index = 0;
-       GList *attachments;
+       TnyList *attachments;
 
        g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window));
        g_return_if_fail (TNY_IS_MIME_PART (mime_part) || (mime_part == NULL));
@@ -2296,8 +2262,8 @@ modest_msg_view_window_view_attachment (ModestMsgViewWindow *window, TnyMimePart
 
        msg_uid = modest_msg_view_window_get_message_uid (MODEST_MSG_VIEW_WINDOW (window));
        attachments = modest_msg_view_get_attachments (MODEST_MSG_VIEW (priv->msg_view));
-       attachment_index = g_list_index (attachments, mime_part);
-       g_list_free (attachments);
+       attachment_index = modest_list_index (attachments, (GObject *) mime_part);
+       g_object_unref (attachments);
        
        if (msg_uid && attachment_index >= 0) {
                attachment_uid = g_strdup_printf ("%s/%d", msg_uid, attachment_index);
@@ -2305,18 +2271,19 @@ modest_msg_view_window_view_attachment (ModestMsgViewWindow *window, TnyMimePart
 
        if (mime_part == NULL) {
                gboolean error = FALSE;
-               GList *selected_attachments = modest_msg_view_get_selected_attachments (MODEST_MSG_VIEW (priv->msg_view));
-               if (selected_attachments == NULL) {
+               TnyList *selected_attachments = modest_msg_view_get_selected_attachments (MODEST_MSG_VIEW (priv->msg_view));
+               if (selected_attachments == NULL || tny_list_get_length (selected_attachments) == 0) {
                        error = TRUE;
-               } else if (g_list_length (selected_attachments) > 1) {
+               } else if (tny_list_get_length (selected_attachments) > 1) {
                        hildon_banner_show_information (NULL, NULL, _("mcen_ib_unable_to_display_more"));
                        error = TRUE;
                } else {
-                       mime_part = (TnyMimePart *) selected_attachments->data;
-                       g_object_ref (mime_part);
+                       TnyIterator *iter;
+                       iter = tny_list_create_iterator (selected_attachments);
+                       mime_part = (TnyMimePart *) tny_iterator_get_current (iter);
+                       g_object_unref (iter);
                }
-               g_list_foreach (selected_attachments, (GFunc) g_object_unref, NULL);
-               g_list_free (selected_attachments);
+               g_object_unref (selected_attachments);
 
                if (error)
                        return;
@@ -2402,7 +2369,6 @@ modest_msg_view_window_view_attachment (ModestMsgViewWindow *window, TnyMimePart
                        modest_window_set_zoom (MODEST_WINDOW (msg_win), 
                                                modest_window_get_zoom (MODEST_WINDOW (window)));
                        modest_window_mgr_register_window (mgr, msg_win);
-                       gtk_window_set_transient_for (GTK_WINDOW (msg_win), GTK_WINDOW (window));
                        gtk_widget_show_all (GTK_WIDGET (msg_win));
                }
        }
@@ -2540,9 +2506,8 @@ save_mime_parts_to_file_with_checks (SaveMimePartInfo *info)
 
 
 void
-modest_msg_view_window_save_attachments (ModestMsgViewWindow *window, GList *mime_parts)
+modest_msg_view_window_save_attachments (ModestMsgViewWindow *window, TnyList *mime_parts)
 {
-       gboolean clean_list = FALSE;
        ModestMsgViewWindowPrivate *priv;
        GList *files_to_save = NULL;
        GtkWidget *save_dialog = NULL;
@@ -2556,24 +2521,29 @@ modest_msg_view_window_save_attachments (ModestMsgViewWindow *window, GList *mim
 
        if (mime_parts == NULL) {
                mime_parts = modest_msg_view_get_selected_attachments (MODEST_MSG_VIEW (priv->msg_view));
-               if (mime_parts == NULL)
+               if (mime_parts == NULL || tny_list_get_length (mime_parts) == 0)
                        return;
-               clean_list = TRUE;
+       } else {
+               g_object_ref (mime_parts);
        }
 
        /* prepare dialog */
-       if (mime_parts->next == NULL) {
+       if (tny_list_get_length (mime_parts) == 1) {
+               TnyIterator *iter;
                /* only one attachment selected */
-               TnyMimePart *mime_part = (TnyMimePart *) mime_parts->data;
+               iter = tny_list_create_iterator (mime_parts);
+               TnyMimePart *mime_part = (TnyMimePart *) tny_iterator_get_current (iter);
+               g_object_unref (iter);
                if (!TNY_IS_MSG (mime_part) && tny_mime_part_is_attachment (mime_part)) {
                        filename = tny_mime_part_get_filename (mime_part);
                } else {
                        g_warning ("Tried to save a non-file attachment");
                        canceled = TRUE;
                }
+               g_object_unref (mime_part);
        } else {
                save_multiple_str = g_strdup_printf (_FM("sfil_va_number_of_objects_attachments"), 
-                                                    g_list_length (mime_parts));
+                                                    tny_list_get_length (mime_parts));
        }
        
        save_dialog = hildon_file_chooser_dialog_new (GTK_WINDOW (window), 
@@ -2602,40 +2572,42 @@ modest_msg_view_window_save_attachments (ModestMsgViewWindow *window, GList *mim
                        hildon_banner_show_information 
                                (NULL, NULL, dgettext("hildon-fm", "sfil_ib_readonly_location"));
                } else {
-                       GList *node = NULL;
+                       TnyIterator *iter;
 
-                       for (node = mime_parts; node != NULL; node = g_list_next (node)) {
-                               TnyMimePart *mime_part = (TnyMimePart *) node->data;
-                               
+                       iter = tny_list_create_iterator (mime_parts);
+                       while (!tny_iterator_is_done (iter)) {
+                               TnyMimePart *mime_part = (TnyMimePart *) tny_iterator_get_current (iter);
+
+                               tny_iterator_next (iter);
                                if (tny_mime_part_is_attachment (mime_part)) {
                                        SaveMimePartPair *pair;
 
-                                       if ((mime_parts->next != NULL) &&
-                                           (tny_mime_part_get_filename (mime_part) == NULL))
+                                       if ((!tny_iterator_is_done (iter)) &&
+                                           (tny_mime_part_get_filename (mime_part) == NULL)) {
+                                               g_object_unref (mime_part);
                                                continue;
+                                       }
                                        
                                        pair = g_slice_new0 (SaveMimePartPair);
-                                       if (mime_parts->next == NULL) {
+                                       if (tny_iterator_is_done (iter)) {
                                                pair->filename = g_strdup (chooser_uri);
                                        } else {
                                                pair->filename = 
                                                        g_build_filename (chooser_uri,
                                                                          tny_mime_part_get_filename (mime_part), NULL);
                                        }
-                                       pair->part = g_object_ref (mime_part);
+                                       pair->part = mime_part;
                                        files_to_save = g_list_prepend (files_to_save, pair);
                                }
                        }
+                       g_object_unref (iter);
                }
                g_free (chooser_uri);
        }
 
        gtk_widget_destroy (save_dialog);
 
-       if (clean_list) {
-               g_list_foreach (mime_parts, (GFunc) g_object_unref, NULL);
-               g_list_free (mime_parts);
-       }
+       g_object_unref (mime_parts);
 
        if (files_to_save != NULL) {
                SaveMimePartInfo *info = g_slice_new0 (SaveMimePartInfo);
@@ -2671,11 +2643,12 @@ void
 modest_msg_view_window_remove_attachments (ModestMsgViewWindow *window, gboolean get_all)
 {
        ModestMsgViewWindowPrivate *priv;
-       GList *mime_parts = NULL, *node;
+       TnyList *mime_parts = NULL;
        gchar *confirmation_message;
        gint response;
        gint n_attachments;
        TnyMsg *msg;
+       TnyIterator *iter;
 /*     TnyFolder *folder; */
 
        g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window));
@@ -2687,37 +2660,42 @@ modest_msg_view_window_remove_attachments (ModestMsgViewWindow *window, gboolean
                mime_parts = modest_msg_view_get_selected_attachments (MODEST_MSG_VIEW (priv->msg_view));
                
        /* Remove already purged messages from mime parts list */
-       node = mime_parts;
-       while (node != NULL) {
-               TnyMimePart *part = TNY_MIME_PART (node->data);
+       iter = tny_list_create_iterator (mime_parts);
+       while (!tny_iterator_is_done (iter)) {
+               TnyMimePart *part = TNY_MIME_PART (tny_iterator_get_current (iter));
+               tny_iterator_next (iter);
                if (tny_mime_part_is_purged (part)) {
-                       GList *deleted_node = node;
-                       node = g_list_next (node);
-                       g_object_unref (part);
-                       mime_parts = g_list_delete_link (mime_parts, deleted_node);
-               } else {
-                       node = g_list_next (node);
+                       tny_list_remove (mime_parts, (GObject *) part);
                }
+               g_object_unref (part);
        }
+       g_object_unref (iter);
 
-       if (mime_parts == NULL)
+       if (tny_list_get_length (mime_parts) == 0) {
+               g_object_unref (mime_parts);
                return;
+       }
 
-       n_attachments = g_list_length (mime_parts);
+       n_attachments = tny_list_get_length (mime_parts);
        if (n_attachments == 1) {
                const gchar *filename;
+               TnyMimePart *part;
 
-               if (TNY_IS_MSG (mime_parts->data)) {
+               iter = tny_list_create_iterator (mime_parts);
+               part = (TnyMimePart *) tny_iterator_get_current (iter);
+               g_object_unref (iter);
+               if (TNY_IS_MSG (part)) {
                        TnyHeader *header;
-                       header = tny_msg_get_header (TNY_MSG (mime_parts->data));
+                       header = tny_msg_get_header (TNY_MSG (part));
                        filename = tny_header_get_subject (header);
                        g_object_unref (header);
                        if (filename == NULL)
                                filename = _("mail_va_no_subject");
                } else {
-                       filename = tny_mime_part_get_filename (TNY_MIME_PART (mime_parts->data));
+                       filename = tny_mime_part_get_filename (TNY_MIME_PART (part));
                }
                confirmation_message = g_strdup_printf (_("mcen_nc_purge_file_text"), filename);
+               g_object_unref (part);
        } else {
                confirmation_message = g_strdup_printf (ngettext("mcen_nc_purge_file_text", 
                                                                 "mcen_nc_purge_files_text", 
@@ -2727,8 +2705,10 @@ modest_msg_view_window_remove_attachments (ModestMsgViewWindow *window, gboolean
                                                            confirmation_message);
        g_free (confirmation_message);
 
-       if (response != GTK_RESPONSE_OK)
+       if (response != GTK_RESPONSE_OK) {
+               g_object_unref (mime_parts);
                return;
+       }
 
        priv->purge_timeout = g_timeout_add (2000, show_remove_attachment_information, window);
 /*     folder = tny_msg_get_folder (msg); */
@@ -2736,18 +2716,25 @@ modest_msg_view_window_remove_attachments (ModestMsgViewWindow *window, gboolean
 /*     tny_folder_refresh (folder, NULL); */
 /*     g_object_unref (folder); */
        
-       for (node = mime_parts; node != NULL; node = g_list_next (node)) {
-               tny_mime_part_set_purged (TNY_MIME_PART (node->data));
+       iter = tny_list_create_iterator (mime_parts);
+       while (!tny_iterator_is_done (iter)) {
+               TnyMimePart *part;
+
+               part = (TnyMimePart *) tny_iterator_get_current (iter);
+               tny_mime_part_set_purged (TNY_MIME_PART (part));
 /*             modest_msg_view_remove_attachment (MODEST_MSG_VIEW (priv->msg_view), node->data); */
+               g_object_unref (part);
+               tny_iterator_next (iter);
        }
+       g_object_unref (iter);
 
        msg = tny_msg_view_get_msg (TNY_MSG_VIEW (priv->msg_view));
        tny_msg_view_clear (TNY_MSG_VIEW (priv->msg_view));
        tny_msg_rewrite_cache (msg);
        tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), msg);
+       g_object_unref (msg);
 
-       g_list_foreach (mime_parts, (GFunc) g_object_unref, NULL);
-       g_list_free (mime_parts);
+       g_object_unref (mime_parts);
 
        if (priv->purge_timeout > 0) {
                g_source_remove (priv->purge_timeout);