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
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 ();
}
}
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