X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-ui-actions.c;h=6f6722d3a61684b787bbc688327a95f257a81853;hp=f94973aed31bf426860f58d604764686301d388f;hb=d0032260ef537f5f0b8c39a82990d81482ddd8f1;hpb=48e7fe284efe9cb1334948accd2fa704dc2c74c5 diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index f94973a..6f6722d 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -88,7 +88,6 @@ #include -#define MIN_FREE_SPACE 5 * 1024 * 1024 #define MODEST_MOVE_TO_DIALOG_FOLDER_VIEW "move-to-dialog-folder-view" typedef struct _GetMsgAsyncHelper { @@ -851,11 +850,11 @@ modest_ui_actions_compose_msg(ModestWindow *win, parts_size = count_parts_size (attachments); expected_size = modest_tny_msg_estimate_size (body, NULL, parts_count, parts_size); - /* Double check: memory full condition or message too big */ - if (available_disk < MIN_FREE_SPACE || + /* Double check: disk full condition or message too big */ + if (available_disk < MODEST_TNY_ACCOUNT_STORE_MIN_FREE_SPACE || expected_size > available_disk) { gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), ""); - modest_platform_information_banner (NULL, NULL, msg); + modest_platform_system_banner (NULL, NULL, msg); g_free (msg); return; @@ -864,7 +863,7 @@ modest_ui_actions_compose_msg(ModestWindow *win, if (expected_size > MODEST_MAX_ATTACHMENT_SIZE) { modest_platform_run_information_dialog ( GTK_WINDOW(win), - _KR("memr_ib_operation_disabled"), + _("mail_ib_error_attachment_size"), TRUE); return; } @@ -906,9 +905,12 @@ modest_ui_actions_compose_msg(ModestWindow *win, signature = modest_account_mgr_get_signature_from_recipient (mgr, recipient, &use_signature); g_free (recipient); if (body_str != NULL) { - body = use_signature ? g_strconcat(body_str, "\n--\n", signature, NULL) : g_strdup(body_str); + body = use_signature ? g_strconcat(body_str, "\n", + MODEST_TEXT_UTILS_SIGNATURE_MARKER, + "\n", signature, NULL) : g_strdup(body_str); } else { - body = use_signature ? g_strconcat("\n--\n", signature, NULL) : g_strdup(""); + body = use_signature ? g_strconcat("\n", MODEST_TEXT_UTILS_SIGNATURE_MARKER, + "\n", signature, NULL) : g_strdup(""); } msg = modest_tny_msg_new (to_str, from_str, cc_str, bcc_str, subject_str, NULL, NULL, body, NULL, NULL, NULL); @@ -931,16 +933,18 @@ modest_ui_actions_compose_msg(ModestWindow *win, gtk_widget_show_all (GTK_WIDGET (msg_win)); while (attachments) { - total_size += + GnomeVFSFileSize att_size; + att_size = modest_msg_edit_window_attach_file_one((ModestMsgEditWindow *)msg_win, attachments->data, allowed_size); + total_size += att_size; - if (total_size > allowed_size) { - g_warning ("%s: total size: %u", - __FUNCTION__, (unsigned int)total_size); + if (att_size > allowed_size) { + g_debug ("%s: total size: %u", + __FUNCTION__, (unsigned int)total_size); break; } - allowed_size -= total_size; + allowed_size -= att_size; attachments = g_slist_next(attachments); } @@ -1248,78 +1252,6 @@ cleanup: g_object_unref (parent_win); } -static gboolean -is_memory_full_error (GError *error, ModestMailOperation *mail_op) -{ - gboolean enough_free_space = TRUE; - GnomeVFSURI *cache_dir_uri; - const gchar *cache_dir = NULL; - GnomeVFSFileSize free_space; - TnyAccountStore *acc_store; - - acc_store = TNY_ACCOUNT_STORE (modest_runtime_get_account_store ()); - - /* Cache dir is different in case we're using an external storage (like MMC account) */ - if (mail_op) { - TnyAccount *account = modest_mail_operation_get_account (mail_op); - if (account) { - if (modest_tny_account_is_memory_card_account (account)) { - cache_dir = g_getenv (MODEST_MMC1_VOLUMEPATH_ENV); - } - g_object_unref (account); - } - } - - /* Get the default local cache dir */ - if (!cache_dir) - cache_dir = tny_account_store_get_cache_dir (acc_store); - - cache_dir_uri = gnome_vfs_uri_new (cache_dir); - if (cache_dir_uri) { - if (gnome_vfs_get_volume_free_space (cache_dir_uri, &free_space) == GNOME_VFS_OK) { - if (free_space < MIN_FREE_SPACE) - enough_free_space = FALSE; - } - gnome_vfs_uri_unref (cache_dir_uri); - } - - if ((error->code == TNY_SYSTEM_ERROR_MEMORY || - /* When asking for a mail and no space left on device - tinymail returns this error */ - error->code == TNY_SERVICE_ERROR_MESSAGE_NOT_AVAILABLE || - /* When the folder summary could not be read or - written */ - error->code == TNY_IO_ERROR_WRITE || - error->code == TNY_IO_ERROR_READ) && - !enough_free_space) { - return TRUE; - } else { - return FALSE; - } -} - -static gboolean -check_memory_full_error (GtkWidget *parent_window, GError *err) -{ - if (err == NULL) - return FALSE; - - if (is_memory_full_error (err, NULL)) { - gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), ""); - modest_platform_information_banner (parent_window, NULL, msg); - g_free (msg); - } else if (err->code == TNY_SYSTEM_ERROR_MEMORY) - /* If the account was created in memory full - conditions then tinymail won't be able to - connect so it'll return this error code */ - modest_platform_information_banner (parent_window, - NULL, _("emev_ui_imap_inbox_select_error")); - else - return FALSE; - - return TRUE; -} - void modest_ui_actions_disk_operations_error_handler (ModestMailOperation *mail_op, gpointer user_data) @@ -1335,7 +1267,9 @@ modest_ui_actions_disk_operations_error_handler (ModestMailOperation *mail_op, /* If the mail op has been cancelled then it's not an error: don't show any message */ if (status != MODEST_MAIL_OPERATION_STATUS_CANCELED) { - if (is_memory_full_error ((GError *) error, mail_op)) { + TnyAccount *account = modest_mail_operation_get_account (mail_op); + if (modest_tny_account_store_is_disk_full_error (modest_runtime_get_account_store(), + (GError *) error, account)) { gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), ""); modest_platform_information_banner ((GtkWidget *) win, NULL, msg); g_free (msg); @@ -1350,6 +1284,8 @@ modest_ui_actions_disk_operations_error_handler (ModestMailOperation *mail_op, modest_platform_information_banner ((GtkWidget *) win, NULL, user_data); } + if (account) + g_object_unref (account); } if (win) @@ -1461,8 +1397,10 @@ open_msg_performer(gboolean canceled, /* Free the helper */ open_msg_helper_destroyer (helper); - /* In memory full conditions we could get this error here */ - check_memory_full_error ((GtkWidget *) parent_window, err); + /* In disk full conditions we could get this error here */ + modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(), + (GtkWidget *) parent_window, err, + account, NULL); goto clean; } @@ -1806,20 +1744,27 @@ reply_forward_cb (ModestMailOperation *mail_op, /* Create reply mail */ switch (rf_helper->action) { + /* Use the msg_header to ensure that we have all the + information. The summary can lack some data */ + TnyHeader *msg_header; case ACTION_REPLY: + msg_header = tny_msg_get_header (msg); new_msg = - modest_tny_msg_create_reply_msg (msg, header, from, + modest_tny_msg_create_reply_msg (msg, msg_header, from, (use_signature) ? signature : NULL, rf_helper->reply_forward_type, MODEST_TNY_MSG_REPLY_MODE_SENDER); + g_object_unref (msg_header); break; case ACTION_REPLY_TO_ALL: + msg_header = tny_msg_get_header (msg); new_msg = - modest_tny_msg_create_reply_msg (msg, header, from, + modest_tny_msg_create_reply_msg (msg, msg_header, from, (use_signature) ? signature : NULL, rf_helper->reply_forward_type, MODEST_TNY_MSG_REPLY_MODE_ALL); edit_type = MODEST_EDIT_TYPE_REPLY; + g_object_unref (msg_header); break; case ACTION_FORWARD: new_msg = @@ -2228,13 +2173,21 @@ new_messages_arrived (ModestMailOperation *self, tny_list_append (actually_new_list, G_OBJECT (header)); } g_object_unref (header); - } g_object_unref (iterator); if (tny_list_get_length (actually_new_list) > 0) { - modest_platform_on_new_headers_received (actually_new_list, - show_visual_notifications); + GList *new_headers_list = NULL; + + new_headers_list = modest_utils_create_notification_list_from_header_list (actually_new_list); + + /* Send notifications */ + if (new_headers_list) { + modest_platform_on_new_headers_received (new_headers_list, + show_visual_notifications); + /* Free the list */ + modest_utils_free_notification_list (new_headers_list); + } } g_object_unref (actually_new_list); } @@ -2285,8 +2238,10 @@ do_send_receive_performer (gboolean canceled, info = (SendReceiveInfo *) user_data; if (err || canceled) { - /* In memory full conditions we could get this error here */ - check_memory_full_error ((GtkWidget *) parent_window, err); + /* In disk full conditions we could get this error here */ + modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(), + (GtkWidget *) parent_window, err, + account, NULL); if (info->mail_op) { modest_mail_operation_queue_remove (modest_runtime_get_mail_operation_queue (), @@ -2339,6 +2294,7 @@ modest_ui_actions_do_send_receive (const gchar *account_name, gchar *acc_name = NULL; SendReceiveInfo *info; ModestTnyAccountStore *acc_store; + TnyAccount *account; /* If no account name was provided then get the current account, and if there is no current account then pick the default one: */ @@ -2348,7 +2304,7 @@ modest_ui_actions_do_send_receive (const gchar *account_name, if (!acc_name) acc_name = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr()); if (!acc_name) { - g_printerr ("modest: cannot get default account\n"); + modest_platform_information_banner (NULL, NULL, _("emev_ni_internal_error")); return; } } else { @@ -2356,6 +2312,31 @@ modest_ui_actions_do_send_receive (const gchar *account_name, } acc_store = modest_runtime_get_account_store (); + account = modest_tny_account_store_get_server_account (acc_store, acc_name, TNY_ACCOUNT_TYPE_STORE); + + if (!account) { + g_free (acc_name); + modest_platform_information_banner (NULL, NULL, _("emev_ni_internal_error")); + return; + } + + /* Do not automatically refresh accounts that are flagged as + NO_AUTO_UPDATE. This could be useful for accounts that + handle their own update times */ + if (!interactive) { + ModestProtocolType proto = modest_tny_account_get_protocol_type (account); + if (proto != MODEST_PROTOCOL_REGISTRY_TYPE_INVALID) { + const gchar *tag = MODEST_PROTOCOL_REGISTRY_NO_AUTO_UPDATE_PROTOCOLS; + ModestProtocolRegistry *registry = modest_runtime_get_protocol_registry (); + + if (modest_protocol_registry_protocol_type_has_tag (registry, proto, tag)) { + g_debug ("%s no auto update allowed for account %s", __FUNCTION__, account_name); + g_object_unref (account); + g_free (acc_name); + return; + } + } + } /* Create the info for the connect and perform */ info = g_slice_new (SendReceiveInfo); @@ -2363,8 +2344,7 @@ modest_ui_actions_do_send_receive (const gchar *account_name, info->win = (win) ? g_object_ref (win) : NULL; info->poke_status = poke_status; info->interactive = interactive; - info->account = modest_tny_account_store_get_server_account (acc_store, acc_name, - TNY_ACCOUNT_TYPE_STORE); + info->account = account; /* We need to create the operation here, because otherwise it could happen that the queue emits the queue-empty signal while we're trying to connect the account */ @@ -2846,7 +2826,7 @@ void modest_ui_actions_on_msg_link_hover (ModestMsgView *msgview, const gchar* link, ModestWindow *win) { - /* g_message ("%s %s", __FUNCTION__, link); */ + /* g_debug ("%s %s", __FUNCTION__, link); */ } @@ -2882,7 +2862,7 @@ modest_ui_actions_on_msg_recpt_activated (ModestMsgView *msgview, const gchar *address, ModestWindow *win) { - /* g_message ("%s %s", __FUNCTION__, address); */ + /* g_debug ("%s %s", __FUNCTION__, address); */ } static void @@ -2933,8 +2913,8 @@ enough_space_for_message (ModestMsgEditWindow *edit_window, parts_count, parts_size); - /* Double check: memory full condition or message too big */ - if (available_disk < MIN_FREE_SPACE || + /* Double check: disk full condition or message too big */ + if (available_disk < MODEST_TNY_ACCOUNT_STORE_MIN_FREE_SPACE || expected_size > available_disk) { gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), ""); modest_platform_information_banner (NULL, NULL, msg); @@ -2962,7 +2942,7 @@ enough_space_for_message (ModestMsgEditWindow *edit_window, if (expected_size > MODEST_MAX_ATTACHMENT_SIZE) { modest_platform_run_information_dialog ( GTK_WINDOW(edit_window), - _KR("memr_ib_operation_disabled"), + _("mail_ib_error_attachment_size"), TRUE); return FALSE; } @@ -3120,6 +3100,7 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window) ModestAccountMgr *account_mgr; gchar *account_name; ModestMailOperation *mail_operation; + gchar *recipients; g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW(edit_window), TRUE); @@ -3128,6 +3109,24 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window) data = modest_msg_edit_window_get_msg_data (edit_window); + if (data->subject == NULL || data->subject[0] == '\0') { + /* Empty subject -> no send */ + modest_msg_edit_window_free_msg_data (edit_window, data); + return FALSE; + } + + recipients = g_strconcat (data->to?data->to:"", + data->cc?data->cc:"", + data->bcc?data->bcc:"", + NULL); + if (recipients == NULL || recipients[0] == '\0') { + /* Empty subject -> no send */ + g_free (recipients); + modest_msg_edit_window_free_msg_data (edit_window, data); + return FALSE; + } + g_free (recipients); + /* Check size */ if (!enough_space_for_message (edit_window, data)) { modest_msg_edit_window_free_msg_data (edit_window, data); @@ -3378,7 +3377,8 @@ do_create_folder_cb (ModestMailOperation *mail_op, error = modest_mail_operation_get_error (mail_op); if (error) { - + gboolean disk_full = FALSE; + TnyAccount *account; /* Show an error. If there was some problem writing to disk, show it, otherwise show the generic folder create error. We do it here and not in an error @@ -3386,13 +3386,24 @@ do_create_folder_cb (ModestMailOperation *mail_op, stop the main loop in a gtk_dialog_run and then, the message won't be shown until that dialog is closed */ - modest_ui_actions_disk_operations_error_handler (mail_op, - _("mail_in_ui_folder_create_error")); - - if (!is_memory_full_error ((GError *) error, mail_op)) { - /* Try again if there is no full memory condition */ + account = modest_mail_operation_get_account (mail_op); + if (account) { + disk_full = + modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(), + (GtkWidget *) source_win, + (GError *) error, + account, + _("mail_in_ui_folder_create_error_memory")); + g_object_unref (account); + } + if (!disk_full) { + /* Show an error and try again if there is no + full memory condition */ + modest_platform_information_banner ((GtkWidget *) source_win, NULL, + _("mail_in_ui_folder_create_error")); do_create_folder (source_win, parent_folder, (const gchar *) suggested_name); } + } else { /* the 'source_win' is either the ModestMainWindow, or the 'Move to folder'-dialog * FIXME: any other? */ @@ -3435,8 +3446,10 @@ do_create_folder_performer (gboolean canceled, ModestMailOperation *mail_op; if (canceled || err) { - /* In memory full conditions we could get this error here */ - check_memory_full_error ((GtkWidget *) parent_window, err); + /* In disk full conditions we could get this error here */ + modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(), + (GtkWidget *) parent_window, err, + NULL, _("mail_in_ui_folder_create_error_memory")); /* This happens if we have selected the outbox folder as the parent */ @@ -3563,13 +3576,15 @@ modest_ui_actions_rename_folder_error_handler (ModestMailOperation *mail_op, const GError *error = NULL; gchar *message = NULL; gboolean mem_full; + TnyAccount *account = modest_mail_operation_get_account (mail_op); /* Get error message */ error = modest_mail_operation_get_error (mail_op); if (!error) g_return_if_reached (); - mem_full = is_memory_full_error ((GError *) error, mail_op); + mem_full = modest_tny_account_store_is_disk_full_error (modest_runtime_get_account_store(), + (GError *) error, account); if (mem_full) { message = g_strdup_printf (_KR("cerm_device_memory_full"), ""); } else if (error->domain == MODEST_MAIL_OPERATION_ERROR && @@ -3588,6 +3603,8 @@ modest_ui_actions_rename_folder_error_handler (ModestMailOperation *mail_op, will be destroyed so the banner won't appear */ modest_platform_information_banner (NULL, NULL, message); + if (account) + g_object_unref (account); if (mem_full) g_free (message); } @@ -3632,8 +3649,10 @@ on_rename_folder_performer (gboolean canceled, RenameFolderInfo *data = (RenameFolderInfo*)user_data; if (canceled || err) { - /* In memory full conditions we could get this error here */ - check_memory_full_error ((GtkWidget *) parent_window, err); + /* In disk full conditions we could get this error here */ + modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(), + (GtkWidget *) parent_window, err, + account, NULL); } else { mail_op = @@ -3767,6 +3786,13 @@ on_delete_folder_cb (gboolean canceled, GtkTreeSelection *sel; if (!MODEST_IS_WINDOW(parent_window) || canceled || (err!=NULL)) { + /* Note that the connection process can fail due to + memory low conditions as it can not successfully + store the summary */ + if (!modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(), + (GtkWidget*) parent_window, err, + account, NULL)) + g_debug ("Error connecting when trying to delete a folder"); g_object_unref (G_OBJECT (info->folder)); g_free (info); return; @@ -5030,6 +5056,7 @@ on_move_to_dialog_response (GtkDialog *dialog, GtkWidget *parent_win; MoveToInfo *helper = NULL; ModestFolderView *folder_view; + gboolean unset_edit_mode = FALSE; helper = (MoveToInfo *) user_data; @@ -5091,6 +5118,7 @@ on_move_to_dialog_response (GtkDialog *dialog, if (dst_folder) g_object_unref (dst_folder); + unset_edit_mode = TRUE; break; default: g_warning ("%s unexpected response id %d", __FUNCTION__, response); @@ -5099,6 +5127,11 @@ on_move_to_dialog_response (GtkDialog *dialog, /* Free the helper and exit */ if (helper->list) g_object_unref (helper->list); + if (unset_edit_mode) { +#ifdef MODEST_TOOLKIT_HILDON2 + modest_hildon2_window_unset_edit_mode (MODEST_HILDON2_WINDOW (helper->win)); +#endif + } g_slice_free (MoveToInfo, helper); gtk_widget_destroy (GTK_WIDGET (dialog)); } @@ -5345,6 +5378,8 @@ modest_ui_actions_move_folder_error_handler (ModestMailOperation *mail_op, gpointer user_data) { GObject *win = NULL; + const GError *error; + TnyAccount *account = NULL; #ifndef MODEST_TOOLKIT_HILDON2 ModestWindow *main_window = NULL; @@ -5352,6 +5387,8 @@ modest_ui_actions_move_folder_error_handler (ModestMailOperation *mail_op, /* Disable next automatic folder selection */ main_window = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr (), FALSE); /* don't create */ + + /* Show notification dialog only if the main window exists */ if (main_window) { GtkWidget *folder_view = NULL; @@ -5365,11 +5402,23 @@ modest_ui_actions_move_folder_error_handler (ModestMailOperation *mail_op, } } #endif - /* Show notification dialog only if the main window exists */ win = modest_mail_operation_get_source (mail_op); - modest_platform_run_information_dialog ((GtkWindow *) win, - _("mail_in_ui_folder_move_target_error"), - FALSE); + error = modest_mail_operation_get_error (mail_op); + + if (TNY_IS_FOLDER (user_data)) + account = modest_tny_folder_get_account (TNY_FOLDER (user_data)); + else if (TNY_IS_ACCOUNT (user_data)) + account = g_object_ref (user_data); + + /* If it's not a disk full error then show a generic error */ + if (!modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(), + (GtkWidget *) win, (GError *) error, + account, NULL)) + modest_platform_run_information_dialog ((GtkWindow *) win, + _("mail_in_ui_folder_move_target_error"), + FALSE); + if (account) + g_object_unref (account); if (win) g_object_unref (win); } @@ -5498,7 +5547,7 @@ modest_ui_actions_on_main_window_remove_attachments (GtkAction *action, modest_msg_view_window_remove_attachments (MODEST_MSG_VIEW_WINDOW (msg_view_window), TRUE); else { /* do nothing; uid was registered before, so window is probably on it's way */ - g_warning ("debug: header %p has already been registered", header); + g_debug ("header %p has already been registered", header); } } else { ModestMailOperation *mail_op = NULL; @@ -5602,11 +5651,14 @@ xfer_messages_error_handler (ModestMailOperation *mail_op, { GObject *win; const GError *error; + TnyAccount *account; win = modest_mail_operation_get_source (mail_op); error = modest_mail_operation_get_error (mail_op); + account = modest_mail_operation_get_account (mail_op); - if (error && is_memory_full_error ((GError *) error, mail_op)) { + if (error && modest_tny_account_store_is_disk_full_error (modest_runtime_get_account_store(), + (GError *) error, account)) { gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), ""); modest_platform_information_banner ((GtkWidget *) win, NULL, msg); g_free (msg); @@ -5615,6 +5667,8 @@ xfer_messages_error_handler (ModestMailOperation *mail_op, _("mail_in_ui_folder_move_target_error"), FALSE); } + if (account) + g_object_unref (account); if (win) g_object_unref (win); } @@ -5645,7 +5699,9 @@ xfer_messages_performer (gboolean canceled, helper = (XferMsgsHelper *) user_data; if (canceled || err) { - if (!check_memory_full_error ((GtkWidget *) parent_window, err)) { + if (!modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(), + (GtkWidget *) parent_window, err, + account, NULL)) { /* Show the proper error message */ modest_ui_actions_on_account_connection_error (parent_window, account); } @@ -5716,14 +5772,25 @@ typedef struct { } MoveFolderInfo; static void -on_move_folder_cb (gboolean canceled, GError *err, GtkWindow *parent_window, - TnyAccount *account, gpointer user_data) +on_move_folder_cb (gboolean canceled, + GError *err, + GtkWindow *parent_window, + TnyAccount *account, + gpointer user_data) { MoveFolderInfo *info = (MoveFolderInfo*)user_data; GtkTreeSelection *sel; ModestMailOperation *mail_op = NULL; if (canceled || err || !MODEST_IS_WINDOW (parent_window)) { + /* Note that the connection process can fail due to + memory low conditions as it can not successfully + store the summary */ + if (!modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(), + (GtkWidget*) parent_window, err, + account, NULL)) + g_debug ("Error connecting when trying to move a folder"); + g_object_unref (G_OBJECT (info->src_folder)); g_object_unref (G_OBJECT (info->dst_folder)); g_free (info); @@ -5754,15 +5821,10 @@ on_move_folder_cb (gboolean canceled, GError *err, GtkWindow *parent_window, mail_op = modest_mail_operation_new_with_error_handling (G_OBJECT(parent_window), - modest_ui_actions_move_folder_error_handler, - info->src_folder, NULL); + modest_ui_actions_move_folder_error_handler, + g_object_ref (info->dst_folder), g_object_unref); modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), - mail_op); - - /* Select *after* the changes */ - /* TODO: this function hangs UI after transfer */ - /* modest_folder_view_select_folder (MODEST_FOLDER_VIEW(folder_view), */ - /* TNY_FOLDER (src_folder), TRUE); */ + mail_op); if (MODEST_IS_MAIN_WINDOW (parent_window)) { modest_folder_view_select_folder (MODEST_FOLDER_VIEW(info->folder_view), @@ -6058,7 +6120,7 @@ modest_ui_actions_on_edit_mode_move_to (ModestWindow *win) /* Show the dialog */ gtk_widget_show (dialog); - return TRUE; + return FALSE; } /* @@ -6241,7 +6303,9 @@ retrieve_msg_contents_performer (gboolean canceled, TnyList *headers = TNY_LIST (user_data); if (err || canceled) { - check_memory_full_error ((GtkWidget *) parent_window, err); + modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(), + (GtkWidget *) parent_window, err, + account, NULL); goto out; } @@ -6797,14 +6861,34 @@ modest_ui_actions_on_delete_account (GtkWindow *parent_window, return removed; } -void +static void +on_fetch_images_performer (gboolean canceled, + GError *err, + GtkWindow *parent_window, + TnyAccount *account, + gpointer user_data) +{ + if (err || canceled) { + /* Show an unable to retrieve images ??? */ + return; + } + + /* Note that the user could have closed the window while connecting */ + if (GTK_WIDGET_VISIBLE (parent_window)) + modest_msg_view_window_fetch_images ((ModestMsgViewWindow *) parent_window); + g_object_unref ((GObject *) user_data); +} + +void modest_ui_actions_on_fetch_images (GtkAction *action, ModestWindow *window) { g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window)); - modest_msg_view_window_fetch_images (MODEST_MSG_VIEW_WINDOW (window)); - + modest_platform_connect_and_perform ((GtkWindow *) window, TRUE, + NULL, + on_fetch_images_performer, + g_object_ref (window)); } void