X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-ui-actions.c;h=93e78f886bca95645a284a9d11306709f17b37ae;hp=ada3f993fc59dbc1c57b0b31bd960342321ed582;hb=180a6c986b177f0818ca0e25d35da5bb702d2039;hpb=aa562c8bc5bec4125180a5d3b940610bd93cf823 diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index ada3f99..93e78f8 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -665,7 +665,6 @@ cleanup: g_object_unref (parent_win); g_object_unref (msg); g_object_unref (folder); - g_object_unref (header); } /* @@ -696,58 +695,98 @@ modest_ui_actions_get_msgs_full_error_handler (ModestMailOperation *mail_op, static void _modest_ui_actions_open (TnyList *headers, ModestWindow *win) { - ModestWindowMgr *mgr; - TnyIterator *iter; - ModestMailOperation *mail_op; - TnyList *not_opened_headers; - + ModestWindowMgr *mgr = NULL; + TnyIterator *iter = NULL; + ModestMailOperation *mail_op1 = NULL; + ModestMailOperation *mail_op2 = NULL; + TnyList *not_opened_headers = NULL; + TnyList *not_opened_cached_headers = NULL; + TnyHeaderFlags flags; + /* Look if we already have a message view for each header. If true, then remove the header from the list of headers to open */ mgr = modest_runtime_get_window_mgr (); iter = tny_list_create_iterator (headers); not_opened_headers = tny_simple_list_new (); + not_opened_cached_headers = tny_simple_list_new (); while (!tny_iterator_is_done (iter)) { ModestWindow *window; TnyHeader *header; header = TNY_HEADER (tny_iterator_get_current (iter)); + flags = tny_header_get_flags (header); window = modest_window_mgr_find_window_by_header (mgr, header); + /* Do not open again the message and present the window to the user */ if (window) gtk_window_present (GTK_WINDOW (window)); - else + else if (!(flags & TNY_HEADER_FLAG_CACHED)) tny_list_append (not_opened_headers, G_OBJECT (header)); - + /* Check if msg has already been retreived */ + else + tny_list_append (not_opened_cached_headers, G_OBJECT (header)); + g_object_unref (header); tny_iterator_next (iter); } - /* Open each message */ - mail_op = modest_mail_operation_new_with_error_handling (MODEST_MAIL_OPERATION_TYPE_RECEIVE, - G_OBJECT (win), - modest_ui_actions_get_msgs_full_error_handler, - NULL); - modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op); - if (tny_list_get_length (not_opened_headers) > 1) { - modest_mail_operation_get_msgs_full (mail_op, - not_opened_headers, - open_msg_cb, - NULL, - NULL); - } else { - TnyIterator *iter = tny_list_create_iterator (not_opened_headers); - TnyHeader *header = TNY_HEADER (tny_iterator_get_current (iter)); - modest_mail_operation_get_msg (mail_op, header, open_msg_cb, NULL); - g_object_unref (header); - g_object_unref (iter); + /* Open each uncached message */ + if (tny_list_get_length (not_opened_headers) > 0) { + mail_op1 = modest_mail_operation_new_with_error_handling (MODEST_MAIL_OPERATION_TYPE_RECEIVE, + G_OBJECT (win), + modest_ui_actions_get_msgs_full_error_handler, + NULL); + modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op1); + if (tny_list_get_length (not_opened_headers) > 1) { + modest_mail_operation_get_msgs_full (mail_op1, + not_opened_headers, + open_msg_cb, + NULL, + NULL); + } else { + TnyIterator *iter = tny_list_create_iterator (not_opened_headers); + TnyHeader *header = TNY_HEADER (tny_iterator_get_current (iter)); + modest_mail_operation_get_msg (mail_op1, header, open_msg_cb, NULL); + g_object_unref (header); + g_object_unref (iter); + } + } + + /* Open each cached message */ + if (tny_list_get_length (not_opened_cached_headers) > 0) { + mail_op2 = modest_mail_operation_new_with_error_handling (MODEST_MAIL_OPERATION_TYPE_OPEN, + G_OBJECT (win), + modest_ui_actions_get_msgs_full_error_handler, + NULL); + modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op2); + if (tny_list_get_length (not_opened_cached_headers) > 1) { + modest_mail_operation_get_msgs_full (mail_op2, + not_opened_headers, + open_msg_cb, + NULL, + NULL); + } else { + TnyIterator *iter = tny_list_create_iterator (not_opened_cached_headers); + TnyHeader *header = TNY_HEADER (tny_iterator_get_current (iter)); + modest_mail_operation_get_msg (mail_op2, header, open_msg_cb, NULL); + g_object_unref (header); + g_object_unref (iter); + } } /* Clean */ - g_object_unref (not_opened_headers); - g_object_unref (iter); - g_object_unref (mail_op); + if (not_opened_headers != NULL) + g_object_unref (not_opened_headers); + if (not_opened_cached_headers != NULL) + g_object_unref (not_opened_cached_headers); + if (iter != NULL) + g_object_unref (iter); + if (mail_op1 != NULL) + g_object_unref (mail_op1); + if (mail_op2 != NULL) + g_object_unref (mail_op2); } void @@ -883,11 +922,11 @@ static gboolean download_uncached_messages (TnyList *header_list, GtkWindow *win) { TnyIterator *iter; - gboolean found, retval; + gboolean retval; + gint uncached_messages = 0; iter = tny_list_create_iterator (header_list); - found = FALSE; - while (!tny_iterator_is_done (iter) && !found) { + while (!tny_iterator_is_done (iter)) { TnyHeader *header; TnyHeaderFlags flags; @@ -896,7 +935,8 @@ download_uncached_messages (TnyList *header_list, GtkWindow *win) /* TODO: is this the right flag?, it seems that some headers that have been previously downloaded do not come with it */ - found = !(flags & TNY_HEADER_FLAG_CACHED); + if (! (flags & TNY_HEADER_FLAG_CACHED)) + uncached_messages ++; g_object_unref (header); tny_iterator_next (iter); } @@ -904,11 +944,13 @@ download_uncached_messages (TnyList *header_list, GtkWindow *win) /* Ask for user permission to download the messages */ retval = TRUE; - if (found) { + if (uncached_messages > 0) { GtkResponseType response; response = modest_platform_run_confirmation_dialog (GTK_WINDOW (win), - _("mcen_nc_get_multi_msg_txt")); + ngettext("mcen_nc_get_msg", + "mcen_nc_get_msgs", + uncached_messages)); if (response == GTK_RESPONSE_CANCEL) retval = FALSE; } @@ -1641,6 +1683,7 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window) g_object_unref (G_OBJECT (mail_operation)); modest_msg_edit_window_free_msg_data (edit_window, data); + modest_msg_edit_window_set_sent (edit_window, TRUE); /* Save settings and close the window: */ gtk_widget_destroy (GTK_WIDGET (edit_window)); @@ -2228,9 +2271,16 @@ void modest_ui_actions_on_undo (GtkAction *action, ModestWindow *window) { + ModestEmailClipboard *clipboard = NULL; + if (MODEST_IS_MSG_EDIT_WINDOW (window)) { modest_msg_edit_window_undo (MODEST_MSG_EDIT_WINDOW (window)); - } else { + } if (MODEST_IS_MAIN_WINDOW (window)) { + /* Clear clipboard source */ + clipboard = modest_runtime_get_email_clipboard (); + modest_email_clipboard_clear (clipboard); + } + else { g_return_if_reached (); } } @@ -2322,28 +2372,24 @@ modest_ui_actions_on_select_all (GtkAction *action, gtk_text_buffer_get_start_iter (buffer, &start); gtk_text_buffer_get_end_iter (buffer, &end); gtk_text_buffer_select_range (buffer, &start, &end); - } - else if ((MODEST_IS_FOLDER_VIEW (focused_widget)) || - (MODEST_IS_HEADER_VIEW (focused_widget))) { - - GtkTreeSelection *selection = NULL; - - /* Get header view */ + } else if (GTK_IS_HTML (focused_widget)) { + gtk_html_select_all (GTK_HTML (focused_widget)); + } else if (MODEST_IS_MAIN_WINDOW (window)) { GtkWidget *header_view = focused_widget; - if (MODEST_IS_FOLDER_VIEW (focused_widget)) + GtkTreeSelection *selection = NULL; + + if (!(MODEST_IS_HEADER_VIEW (focused_widget))) header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (window), MODEST_WIDGET_TYPE_HEADER_VIEW); - + /* Select all messages */ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(header_view)); gtk_tree_selection_select_all (selection); /* Set focuse on header view */ gtk_widget_grab_focus (header_view); - - } else if (GTK_IS_HTML (focused_widget)) { - gtk_html_select_all (GTK_HTML (focused_widget)); } + } void @@ -2757,6 +2803,10 @@ msgs_move_to_confirmation (GtkWindow *win, g_object_unref (header); g_object_unref (iter); + /* if no src_folder, message may be an attahcment */ + if (src_folder == NULL) + return GTK_RESPONSE_CANCEL; + /* If the source is a remote folder */ if (!modest_tny_folder_is_local_folder (src_folder)) { const gchar *message; @@ -2940,6 +2990,7 @@ modest_ui_actions_on_msg_view_window_move_to (GtkAction *action, /* Create header list */ header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW (win)); + headers = tny_simple_list_new (); tny_list_prepend (headers, G_OBJECT (header)); g_object_unref (header); @@ -3075,7 +3126,7 @@ modest_ui_actions_on_settings (GtkAction *action, dialog = modest_platform_get_global_settings_dialog (); gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (win)); - gtk_widget_show (dialog); + gtk_widget_show_all (dialog); gtk_dialog_run (GTK_DIALOG (dialog));