aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--shell/ChangeLog8
-rw-r--r--shell/e-shell-startup-wizard.c45
2 files changed, 46 insertions, 7 deletions
diff --git a/shell/ChangeLog b/shell/ChangeLog
index e2c7448fe0..e30d9189a2 100644
--- a/shell/ChangeLog
+++ b/shell/ChangeLog
@@ -1,3 +1,11 @@
+2003-02-26 Dan Winship <danw@ximian.com>
+
+ * e-shell-startup-wizard.c (start_wizard): New routine to attempt
+ to start each available startup wizard in priority order, and
+ return once it has successfully started one. (Allows Connector,
+ etc, to override the mailer startup wizard.)
+ (make_corba_dialog_pages): Use it.
+
2003-02-26 Not Zed <NotZed@Ximian.com>
* apps_evolution_shell.schemas: Added a key for
diff --git a/shell/e-shell-startup-wizard.c b/shell/e-shell-startup-wizard.c
index 6041634ace..76caadc82f 100644
--- a/shell/e-shell-startup-wizard.c
+++ b/shell/e-shell-startup-wizard.c
@@ -133,6 +133,42 @@ druid_event_notify_cb (BonoboListener *listener,
}
}
+static GNOME_Evolution_Wizard
+start_wizard (void)
+{
+ char *const selection_order[] = { "0-evolution:startup_wizard:priority", NULL };
+ Bonobo_ServerInfoList *info;
+ CORBA_Environment ev;
+ GNOME_Evolution_Wizard wizard;
+ int i;
+
+ CORBA_exception_init (&ev);
+ info = bonobo_activation_query ("repo_ids.has ('IDL:GNOME/Evolution/StartupWizard:1.0')", selection_order, &ev);
+ if (BONOBO_EX (&ev) || info == CORBA_OBJECT_NIL) {
+ g_warning ("Cannot find startup wizard -- %s", BONOBO_EX_REPOID (&ev));
+ CORBA_exception_free (&ev);
+ return NULL;
+ }
+ CORBA_exception_free (&ev);
+
+ for (i = 0; i < info->_length; i++) {
+ CORBA_exception_init (&ev);
+ wizard = bonobo_activation_activate_from_id (info->_buffer[i].iid, 0, NULL, &ev);
+ if (!BONOBO_EX (&ev)) {
+ CORBA_free (info);
+ return wizard;
+ }
+ CORBA_exception_free (&ev);
+ }
+
+ if (info->_length)
+ g_warning ("Could not start any startup wizard!");
+ else
+ g_warning ("No startup wizard available!");
+ CORBA_free (info);
+ return NULL;
+}
+
static void
make_corba_dialog_pages (SWData *data)
{
@@ -140,14 +176,9 @@ make_corba_dialog_pages (SWData *data)
CORBA_Object object;
Bonobo_EventSource event_source;
- CORBA_exception_init (&ev);
- data->corba_wizard = bonobo_activation_activate_from_id ("OAFIID:GNOME_Evolution_Mail_Wizard", 0, NULL, &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Could not start CORBA wizard (%s)", CORBA_exception_id (&ev));
- CORBA_exception_free (&ev);
- data->corba_wizard = CORBA_OBJECT_NIL;
+ data->corba_wizard = start_wizard ();
+ if (!data->corba_wizard)
return;
- }
CORBA_exception_init (&ev);
data->pagelist = GNOME_Evolution_Wizard__get_pages (data->corba_wizard, &ev);