+
+static gboolean
+on_idle_open_account (gpointer user_data)
+{
+ ModestWindow *top;
+ ModestWindowMgr *mgr;
+ gchar *acc_name;
+
+ gdk_threads_enter ();
+
+ acc_name = (gchar *) user_data;
+ mgr = modest_runtime_get_window_mgr ();
+
+ top = modest_window_mgr_get_current_top (mgr);
+ if (!top)
+ top = modest_window_mgr_show_initial_window (mgr);
+
+#ifdef MODEST_TOOLKIT_HILDON2
+ if (MODEST_IS_ACCOUNTS_WINDOW (top)) {
+ GtkWidget *new_window;
+ ModestProtocolType store_protocol;
+ gboolean mailboxes_protocol;
+
+ store_protocol = modest_account_mgr_get_store_protocol (modest_runtime_get_account_mgr (),
+ acc_name);
+ mailboxes_protocol =
+ modest_protocol_registry_protocol_type_has_tag (modest_runtime_get_protocol_registry (),
+ store_protocol,
+ MODEST_PROTOCOL_REGISTRY_MULTI_MAILBOX_PROVIDER_PROTOCOLS);
+
+ if (mailboxes_protocol) {
+ new_window = GTK_WIDGET (modest_mailboxes_window_new (acc_name));
+ } else {
+ new_window = GTK_WIDGET (modest_folder_window_new (NULL));
+ modest_folder_window_set_account (MODEST_FOLDER_WINDOW (new_window),
+ acc_name);
+ }
+
+ if (modest_window_mgr_register_window (mgr, MODEST_WINDOW (new_window), NULL)) {
+ gtk_widget_show (new_window);
+ } else {
+ gtk_widget_destroy (new_window);
+ new_window = NULL;
+ }
+ }
+#else
+ if (MODEST_IS_MAIN_WINDOW (top)) {
+ gchar *server_name;
+ GtkWidget *folder_view;
+
+ folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (top),
+ MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
+ server_name = modest_account_mgr_get_server_account_name (modest_runtime_get_account_mgr (),
+ acc_name, TNY_ACCOUNT_TYPE_STORE);
+ if (server_name) {
+ modest_folder_view_set_account_id_of_visible_server_account (MODEST_FOLDER_VIEW (folder_view),
+ server_name);
+ g_free (server_name);
+ }
+ }
+#endif
+
+ gdk_threads_leave ();
+ g_free (acc_name);
+ return FALSE;
+}
+
+static gint
+on_open_account (GArray *arguments, gpointer data, osso_rpc_t *retval)
+{
+ osso_rpc_t val;
+ gchar *account_id;
+
+ /* Get the arguments: */
+ val = g_array_index(arguments, osso_rpc_t, MODEST_DBUS_OPEN_MESSAGE_ARG_URI);
+ account_id = g_strdup (val.value.s);
+
+ g_idle_add (on_idle_open_account, account_id);
+
+ return OSSO_OK;
+}
+