From e56bd8e68a2a8c6185f6b8465dfc30f47b3de2ca Mon Sep 17 00:00:00 2001 From: Jose Dapena Paz Date: Thu, 24 Apr 2008 16:18:36 +0000 Subject: [PATCH] * src/dbus_api/modest-dbus-callbacks.c: * (on_open_message_performer): if we're opening a draft, then we retrieve the account name from the from header, and take into accountif there's any account available, to show the account wizard (fixes NB#84808). pmo-trunk-r4467 --- src/dbus_api/modest-dbus-callbacks.c | 63 ++++++++++++++++++++++++++++------ 1 file changed, 52 insertions(+), 11 deletions(-) diff --git a/src/dbus_api/modest-dbus-callbacks.c b/src/dbus_api/modest-dbus-callbacks.c index 24cd7a8..d1feca9 100644 --- a/src/dbus_api/modest-dbus-callbacks.c +++ b/src/dbus_api/modest-dbus-callbacks.c @@ -496,33 +496,74 @@ on_open_message_performer (gboolean canceled, 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); -- 1.7.9.5