if (modest_window_mgr_find_registered_header (win_mgr, header, &msg_view)) {
gtk_window_present (GTK_WINDOW(msg_view));
} else {
- const gchar *modest_account_name;
/* g_debug ("creating new window for this msg"); */
modest_window_mgr_register_header (win_mgr, header, NULL);
- if (account) {
- modest_account_name =
- modest_tny_account_get_parent_modest_account_name_for_server_account (account);
- } else {
- modest_account_name = NULL;
- }
-
/* Drafts will be opened in the editor, and others will be opened in the viewer */
if (is_draft) {
+ gchar *modest_account_name = NULL;
+ gchar *from_header;
+
+ /* we cannot edit without a valid account... */
+ if (!modest_account_mgr_has_accounts(modest_runtime_get_account_mgr (), TRUE)) {
+ if (!modest_ui_actions_run_account_setup_wizard(NULL)) {
+ modest_window_mgr_unregister_header (win_mgr,
+ header);
+ goto cleanup;
+ }
+ }
+
+ from_header = tny_header_dup_from (header);
+ if (from_header) {
+ GSList *accounts = modest_account_mgr_account_names (modest_runtime_get_account_mgr (), TRUE);
+ GSList *node = NULL;
+ for (node = accounts; node != NULL; node = g_slist_next (node)) {
+ gchar *from = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr (), node->data);
+
+ if (from && (strcmp (from_header, from) == 0)) {
+ g_free (modest_account_name);
+ modest_account_name = g_strdup (node->data);
+ g_free (from);
+ break;
+ }
+ g_free (from);
+ }
+ g_slist_foreach (accounts, (GFunc) g_free, NULL);
+ g_slist_free (accounts);
+ g_free (from_header);
+ }
+
+ if (modest_account_name == NULL) {
+ modest_account_name = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr ());
+ }
msg_view = modest_msg_edit_window_new (msg, modest_account_name, TRUE);
+ g_free (modest_account_name);
} else {
TnyHeader *header;
+ const gchar *modest_account_name;
+
+ if (account) {
+ modest_account_name =
+ modest_tny_account_get_parent_modest_account_name_for_server_account (account);
+ } else {
+ modest_account_name = NULL;
+ }
+
header = tny_msg_get_header (msg);
msg_view = modest_msg_view_window_new_for_search_result (msg, modest_account_name, msg_uid);
if (! (tny_header_get_flags (header) & TNY_HEADER_FLAG_SEEN))
tny_header_set_flag (header, TNY_HEADER_FLAG_SEEN);
g_object_unref (header);
- }
- modest_window_mgr_register_window (win_mgr, msg_view);
- gtk_widget_show_all (GTK_WIDGET (msg_view));
+ }
+ if (msg_view != NULL) {
+ modest_window_mgr_register_window (win_mgr, msg_view);
+ gtk_widget_show_all (GTK_WIDGET (msg_view));
+ }
}
+
+cleanup:
g_object_unref (header);
g_object_unref (msg);
g_object_unref (folder);