* Fixes NB#88246, do not crash when pasting a lot of directions in the to: field
[modest] / src / modest-ui-actions.c
index e4ace6a..93a69db 100644 (file)
@@ -738,9 +738,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, NULL);
@@ -754,11 +754,15 @@ modest_ui_actions_compose_msg(ModestWindow *win,
        total_size = 0;
        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);
+       modest_msg_edit_window_set_modified (MODEST_MSG_EDIT_WINDOW (msg_win), set_as_modified);
+       gtk_widget_show_all (GTK_WIDGET (msg_win));
+
        while (attachments) {
                total_size +=
-                       modest_msg_edit_window_attach_file_one(
-                               (ModestMsgEditWindow *)msg_win,
-                               attachments->data, allowed_size);
+                       modest_msg_edit_window_attach_file_one((ModestMsgEditWindow *)msg_win,
+                                                              attachments->data, allowed_size);
 
                if (total_size > allowed_size) {
                        g_warning ("%s: total size: %u",
@@ -769,10 +773,6 @@ modest_ui_actions_compose_msg(ModestWindow *win,
 
                attachments = g_slist_next(attachments);
        }
-       modest_window_mgr_register_window (modest_runtime_get_window_mgr(), msg_win);
-       modest_msg_edit_window_set_modified (MODEST_MSG_EDIT_WINDOW (msg_win), set_as_modified);
-
-       gtk_widget_show_all (GTK_WIDGET (msg_win));
 
 cleanup:
        g_free (from_str);
@@ -950,6 +950,7 @@ open_msg_cb (ModestMailOperation *mail_op,
                }
 
                acc_name = modest_utils_get_account_name_from_recipient (from_header);
+               g_free (from_header);
                if (acc_name) {
                        g_free (account);
                        account = acc_name;
@@ -2401,7 +2402,6 @@ modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view,
                if (TNY_IS_FOLDER (folder_store) && selected) {
                        TnyAccount *account;
                        const gchar *account_name = NULL;
-                       gboolean refresh;
 
                        /* Update the active account */
                        account = modest_tny_folder_get_account (TNY_FOLDER (folder_store));
@@ -2419,8 +2419,6 @@ modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view,
                        modest_main_window_set_contents_style (main_window, 
                                                               MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS);
 
-                       refresh = !modest_account_mgr_account_is_busy (modest_runtime_get_account_mgr (), account_name);
-
                        /* Set folder on header view. This function
                           will call tny_folder_refresh_async so we
                           pass a callback that will be called when
@@ -2428,7 +2426,7 @@ modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view,
                           empty view if there are no messages */
                        modest_header_view_set_folder (MODEST_HEADER_VIEW(header_view),
                                                       TNY_FOLDER (folder_store),
-                                                      refresh,
+                                                      TRUE,
                                                       folder_refreshed_cb,
                                                       main_window);
                        
@@ -2831,7 +2829,7 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
                                             transport_account,
                                             data->draft_msg,
                                             from,
-                                            data->to, 
+                                            data->to,
                                             data->cc, 
                                             data->bcc,
                                             data->subject, 
@@ -3292,7 +3290,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,
@@ -3300,6 +3298,7 @@ on_rename_folder_performer (gboolean canceled,
                                                     (const gchar *) (data->new_name),
                                                     on_rename_folder_cb,
                                                     folder_view);
+               g_object_unref (data->folder);
                g_object_unref (mail_op);
        }
 
@@ -3351,7 +3350,7 @@ modest_ui_actions_on_rename_folder (GtkAction *action,
                        do_rename = FALSE;
                } else {
                        RenameFolderInfo *rename_folder_data = g_new0 (RenameFolderInfo, 1);
-                       rename_folder_data->folder = folder;
+                       rename_folder_data->folder = g_object_ref (folder);
                        rename_folder_data->new_name = folder_name;
                        modest_platform_connect_if_remote_and_perform (GTK_WINDOW(main_window), TRUE,
                                        folder, on_rename_folder_performer, rename_folder_data);
@@ -3795,9 +3794,16 @@ modest_ui_actions_on_copy (GtkAction *action,
                gtk_clipboard_set_can_store (clipboard, NULL, 0);
                gtk_clipboard_store (clipboard);
        } else if (GTK_IS_HTML (focused_widget)) {
-               gtk_html_copy (GTK_HTML (focused_widget));
-               gtk_clipboard_set_can_store (clipboard, NULL, 0);
-               gtk_clipboard_store (clipboard);
+               const gchar *sel;
+               int len = -1;
+               sel = gtk_html_get_selection_html (GTK_HTML (focused_widget), &len);
+               if ((sel == NULL) || (sel[0] == '\0')) {
+                       copied = FALSE;
+               } else {
+                       gtk_html_copy (GTK_HTML (focused_widget));
+                       gtk_clipboard_set_can_store (clipboard, NULL, 0);
+                       gtk_clipboard_store (clipboard);
+               }
        } else if (GTK_IS_TEXT_VIEW (focused_widget)) {
                GtkTextBuffer *buffer;
                buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (focused_widget));
@@ -4222,11 +4228,12 @@ headers_action_show_details (TnyHeader *header,
        dialog = modest_details_dialog_new_with_header (GTK_WINDOW (window), header);
 
        /* Run dialog */
-       gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+       modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), GTK_WINDOW (dialog));
        gtk_widget_show_all (dialog);
-       gtk_dialog_run (GTK_DIALOG (dialog));
 
-       gtk_widget_destroy (dialog);
+       g_signal_connect_swapped (dialog, "response", 
+                                 G_CALLBACK (gtk_widget_destroy),
+                                 dialog);
 }
 
 /*
@@ -5379,6 +5386,10 @@ modest_ui_actions_transfer_messages_helper (GtkWindow *win,
        gboolean need_connection = TRUE;
        gboolean do_xfer = TRUE;
        XferMsgsHelper *helper;
+
+       g_return_if_fail (TNY_IS_FOLDER (src_folder));
+       g_return_if_fail (TNY_IS_FOLDER (dst_folder));
+       g_return_if_fail (TNY_IS_LIST (headers));
        
        modest_ui_actions_xfer_messages_check (win, TNY_FOLDER_STORE (src_folder), 
                                               headers, TNY_FOLDER (dst_folder),
@@ -5437,6 +5448,7 @@ modest_ui_actions_on_msg_view_window_move_to (GtkAction *action,
                                                    TNY_FOLDER (dst_folder));
 
        /* Frees */
+       g_object_unref (src_folder);
        g_object_unref (header);
        g_object_unref (headers);
 }
@@ -5471,7 +5483,7 @@ modest_ui_actions_on_move_to (GtkAction *action,
        /* Create and run the dialog */
        dialog = create_move_to_dialog (GTK_WINDOW (win), folder_view, &tree_view);
        modest_folder_view_select_first_inbox_or_local (MODEST_FOLDER_VIEW (tree_view));
-       gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+       modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), GTK_WINDOW (dialog));
        result = gtk_dialog_run (GTK_DIALOG(dialog));
        g_object_ref (tree_view);
        gtk_widget_destroy (dialog);
@@ -6017,6 +6029,8 @@ modest_ui_actions_on_send_queue_status_changed (ModestTnySendQueue *send_queue,
        /* Rerun dimming rules, because the message could become deletable for example */
        modest_window_check_dimming_rules_group (MODEST_WINDOW (main_window), 
                                                 MODEST_DIMMING_RULES_TOOLBAR);
+       modest_window_check_dimming_rules_group (MODEST_WINDOW (main_window), 
+                                                MODEST_DIMMING_RULES_MENU);
        
        /* Free */
  frees: