X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fdbus_api%2Fmodest-dbus-callbacks.c;h=d1feca93e6d89094fd8559f31c77d822de6ee539;hp=24cd7a86898cdcf439be97603e3c6a20cd5b98e2;hb=e56bd8e68a2a8c6185f6b8465dfc30f47b3de2ca;hpb=98c2083cfe1c1de430d3dd030069183f7badf214 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);