Merged fixes for bugs 87366 and 87102 from trunk
authorVivek Sekar <viveksekar@gmail.com>
Mon, 11 Aug 2008 08:14:17 +0000 (08:14 +0000)
committerVivek Sekar <viveksekar@gmail.com>
Mon, 11 Aug 2008 08:14:17 +0000 (08:14 +0000)
pmo-diablo-r5280

src/maemo/modest-msg-view-window.c
src/modest-text-utils.c
src/modest-ui-actions.c

index a2144a3..b93623a 100644 (file)
@@ -2653,12 +2653,72 @@ save_mime_parts_to_file_with_checks (SaveMimePartInfo *info)
 
 }
 
+static void
+save_attachments_response (GtkDialog *dialog,
+                          gint       arg1,
+                          gpointer   user_data)  
+{
+       TnyList *mime_parts;
+       gchar *chooser_uri;
+       GList *files_to_save = NULL;
+
+       if (arg1 != GTK_RESPONSE_OK)
+               goto end;
+
+       mime_parts = TNY_LIST (user_data);
+       chooser_uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog));
+
+       if (!modest_utils_folder_writable (chooser_uri)) {
+               hildon_banner_show_information 
+                       (NULL, NULL, dgettext("hildon-fm", "sfil_ib_readonly_location"));
+       } else {
+               TnyIterator *iter;
+
+               iter = tny_list_create_iterator (mime_parts);
+               while (!tny_iterator_is_done (iter)) {
+                       TnyMimePart *mime_part = (TnyMimePart *) tny_iterator_get_current (iter);
+
+                       if ((modest_tny_mime_part_is_attachment_for_modest (mime_part)) &&
+                           !tny_mime_part_is_purged (mime_part) &&
+                           (tny_mime_part_get_filename (mime_part) != NULL)) {
+                               SaveMimePartPair *pair;
+                                       
+                               pair = g_slice_new0 (SaveMimePartPair);
+
+                               if (tny_list_get_length (mime_parts) > 1) {
+                                       gchar *escaped = 
+                                               gnome_vfs_escape_slashes (tny_mime_part_get_filename (mime_part));
+                                       pair->filename = g_build_filename (chooser_uri, escaped, NULL);
+                                       g_free (escaped);
+                               } else {
+                                       pair->filename = g_strdup (chooser_uri);
+                               }
+                               pair->part = mime_part;
+                               files_to_save = g_list_prepend (files_to_save, pair);
+                       }
+                       tny_iterator_next (iter);
+               }
+               g_object_unref (iter);
+       }
+       g_free (chooser_uri);
+
+       if (files_to_save != NULL) {
+               SaveMimePartInfo *info = g_slice_new0 (SaveMimePartInfo);
+               info->pairs = files_to_save;
+               info->result = TRUE;
+               save_mime_parts_to_file_with_checks (info);
+       }
+
+ end:
+       /* Free and close the dialog */
+       g_object_unref (mime_parts);
+       gtk_widget_destroy (GTK_WIDGET (dialog));
+}
 
 void
 modest_msg_view_window_save_attachments (ModestMsgViewWindow *window, TnyList *mime_parts)
 {
        ModestMsgViewWindowPrivate *priv;
-       GList *files_to_save = NULL;
        GtkWidget *save_dialog = NULL;
        gchar *folder = NULL;
        const gchar *filename = NULL;
@@ -2716,55 +2776,14 @@ modest_msg_view_window_save_attachments (ModestMsgViewWindow *window, TnyList *m
                g_object_set (G_OBJECT (save_dialog), "save-multiple", save_multiple_str, NULL);
                gtk_window_set_title (GTK_WINDOW (save_dialog), _FM("sfil_ti_save_objects_files"));
        }
-               
-       /* show dialog */
-       if (gtk_dialog_run (GTK_DIALOG (save_dialog)) == GTK_RESPONSE_OK) {
-               gchar *chooser_uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (save_dialog));
-
-               if (!modest_utils_folder_writable (chooser_uri)) {
-                       hildon_banner_show_information 
-                               (NULL, NULL, dgettext("hildon-fm", "sfil_ib_readonly_location"));
-               } else {
-                       TnyIterator *iter;
-
-                       iter = tny_list_create_iterator (mime_parts);
-                       while (!tny_iterator_is_done (iter)) {
-                               TnyMimePart *mime_part = (TnyMimePart *) tny_iterator_get_current (iter);
-
-                               if ((modest_tny_mime_part_is_attachment_for_modest (mime_part)) &&
-                                   !tny_mime_part_is_purged (mime_part) &&
-                                   (tny_mime_part_get_filename (mime_part) != NULL)) {
-                                       SaveMimePartPair *pair;
-                                       
-                                       pair = g_slice_new0 (SaveMimePartPair);
-                                       if (save_multiple_str) {
-                                               gchar *escaped = gnome_vfs_escape_slashes (
-                                                       tny_mime_part_get_filename (mime_part));
-                                               pair->filename = g_build_filename (chooser_uri, escaped, NULL);
-                                               g_free (escaped);
-                                       } else {
-                                               pair->filename = g_strdup (chooser_uri);
-                                       }
-                                       pair->part = mime_part;
-                                       files_to_save = g_list_prepend (files_to_save, pair);
-                               }
-                               tny_iterator_next (iter);
-                       }
-                       g_object_unref (iter);
-               }
-               g_free (chooser_uri);
-       }
-
-       gtk_widget_destroy (save_dialog);
 
-       g_object_unref (mime_parts);
+       /* We must run this asynchronously, because the hildon dialog
+          performs a gtk_dialog_run by itself which leads to gdk
+          deadlocks */
+       g_signal_connect (save_dialog, "response", 
+                         G_CALLBACK (save_attachments_response), mime_parts);
 
-       if (files_to_save != NULL) {
-               SaveMimePartInfo *info = g_slice_new0 (SaveMimePartInfo);
-               info->pairs = files_to_save;
-               info->result = TRUE;
-               save_mime_parts_to_file_with_checks (info);
-       }
+       gtk_widget_show_all (save_dialog);
 }
 
 static gboolean
index ba1ac54..ff21586 100644 (file)
@@ -870,10 +870,6 @@ modest_text_utils_quote_plain_text (const gchar *text,
        gchar *attachments_string = NULL;
 
        q = g_string_new ("\n");
-       if (signature != NULL) {
-               q = g_string_append (q, signature);
-               q = g_string_append_c (q, '\n');
-       }
        q = g_string_append (q, cite);
        q = g_string_append_c (q, '\n');
 
@@ -924,6 +920,12 @@ modest_text_utils_quote_plain_text (const gchar *text,
        q = g_string_append (q, attachments_string);
        g_free (attachments_string);
 
+       if (signature != NULL) {
+               q = g_string_append (q, "\n--\n");
+               q = g_string_append (q, signature);
+               q = g_string_append_c (q, '\n');
+       }
+
        return g_string_free (q, FALSE);
 }
 
@@ -940,8 +942,8 @@ modest_text_utils_quote_html (const gchar *text,
                "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n" \
                "<html>\n" \
                "<body>\n" \
-               "<br/>%s<br/>" \
                "<pre>%s<br/>%s<br/>%s</pre>\n" \
+               "<br/>--<br/>%s<br/>\n" \
                "</body>\n" \
                "</html>\n";
        gchar *attachments_string = NULL;
@@ -958,7 +960,7 @@ modest_text_utils_quote_html (const gchar *text,
        q_attachments_string = modest_text_utils_convert_to_html_body (attachments_string, -1, TRUE);
        q_cite = modest_text_utils_convert_to_html_body (cite, -1, TRUE);
        html_text = modest_text_utils_convert_to_html_body (text, -1, TRUE);
-       result = g_strdup_printf (format, signature_result, q_cite, html_text, q_attachments_string);
+       result = g_strdup_printf (format, q_cite, html_text, q_attachments_string, signature_result);
        g_free (q_cite);
        g_free (html_text);
        g_free (attachments_string);
index e01d8e8..6b09620 100644 (file)
@@ -737,9 +737,9 @@ modest_ui_actions_compose_msg(ModestWindow *win,
 
        signature = modest_account_mgr_get_signature (mgr, account_name, &use_signature);
        if (body_str != NULL) {
-               body = use_signature ? g_strconcat(body_str, "\n", signature, NULL) : g_strdup(body_str);
+               body = use_signature ? g_strconcat(body_str, "\n--\n", signature, NULL) : g_strdup(body_str);
        } else {
-               body = use_signature ? g_strconcat("\n", signature, NULL) : g_strdup("");
+               body = use_signature ? g_strconcat("\n--\n", signature, NULL) : g_strdup("");
        }
 
        msg = modest_tny_msg_new (to_str, from_str, cc_str, bcc_str, subject_str, body, NULL, NULL);
@@ -3292,7 +3292,7 @@ on_rename_folder_performer (gboolean canceled,
 
                /* Clear the headers view */
                sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_view));
-               gtk_tree_selection_unselect_all (sel);
+               gtk_tree_selection_unselect_all (sel);
 
                /* Actually rename the folder */
                modest_mail_operation_rename_folder (mail_op,