aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--shell/ChangeLog6
-rw-r--r--shell/main.c48
2 files changed, 35 insertions, 19 deletions
diff --git a/shell/ChangeLog b/shell/ChangeLog
index 10d0554e9f..cf2573911b 100644
--- a/shell/ChangeLog
+++ b/shell/ChangeLog
@@ -1,5 +1,11 @@
2001-08-13 Ettore Perazzoli <ettore@ximian.com>
+ * main.c (idle_cb): Replaced the chained `if' statements with a
+ `switch' statement for clarity. Also, don't ref the created
+ shell, and release the object reference properly.
+
+2001-08-13 Ettore Perazzoli <ettore@ximian.com>
+
* e-corba-shortcuts.c (shortcut_list_to_corba): set_release on the
sequence, not the buffer.
diff --git a/shell/main.c b/shell/main.c
index 5520007a3e..14291562e4 100644
--- a/shell/main.c
+++ b/shell/main.c
@@ -147,7 +147,26 @@ idle_cb (void *data)
shell = e_shell_new (evolution_directory, ! no_splash, &result);
g_free (evolution_directory);
- if (result == E_SHELL_CONSTRUCT_RESULT_CANNOTREGISTER) {
+ switch (result) {
+ case E_SHELL_CONSTRUCT_RESULT_OK:
+ gtk_signal_connect (GTK_OBJECT (shell), "no_views_left",
+ GTK_SIGNAL_FUNC (no_views_left_cb), NULL);
+ gtk_signal_connect (GTK_OBJECT (shell), "destroy",
+ GTK_SIGNAL_FUNC (destroy_cb), NULL);
+
+ if (uri_list == NULL)
+ restored = e_shell_restore_from_settings (shell);
+ else
+ restored = FALSE;
+
+ if (!getenv ("EVOLVE_ME_HARDER"))
+ development_warning ();
+
+ corba_shell = bonobo_object_corba_objref (BONOBO_OBJECT (shell));
+ corba_shell = CORBA_Object_duplicate (corba_shell, &ev);
+ break;
+
+ case E_SHELL_CONSTRUCT_RESULT_CANNOTREGISTER:
corba_shell = oaf_activate_from_id (E_SHELL_OAFIID, 0, NULL, &ev);
if (ev._major != CORBA_NO_EXCEPTION || corba_shell == CORBA_OBJECT_NIL) {
e_notice (NULL, GNOME_MESSAGE_BOX_ERROR,
@@ -158,30 +177,16 @@ idle_cb (void *data)
}
restored = FALSE;
- } else if (result != E_SHELL_CONSTRUCT_RESULT_OK) {
+ break;
+
+ default:
e_notice (NULL, GNOME_MESSAGE_BOX_ERROR,
_("Cannot initialize the Evolution shell: %s"),
e_shell_construct_result_to_string (result));
CORBA_exception_free (&ev);
gtk_main_quit ();
return FALSE;
- } else {
- gtk_signal_connect (GTK_OBJECT (shell), "no_views_left",
- GTK_SIGNAL_FUNC (no_views_left_cb), NULL);
- gtk_signal_connect (GTK_OBJECT (shell), "destroy",
- GTK_SIGNAL_FUNC (destroy_cb), NULL);
-
- if (uri_list == NULL)
- restored = e_shell_restore_from_settings (shell);
- else
- restored = FALSE;
- if (!getenv ("EVOLVE_ME_HARDER"))
- development_warning ();
-
- corba_shell = bonobo_object_corba_objref (BONOBO_OBJECT (shell));
- corba_shell = CORBA_Object_duplicate (corba_shell, &ev);
- Bonobo_Unknown_ref (corba_shell, &ev);
}
if (! restored && uri_list == NULL) {
@@ -206,8 +211,10 @@ idle_cb (void *data)
g_slist_free (uri_list);
}
- CORBA_exception_free (&ev);
+ CORBA_Object_release (corba_shell, &ev);
+ CORBA_exception_free (&ev);
+
if (shell == NULL)
gtk_main_quit ();
@@ -231,6 +238,9 @@ main (int argc, char **argv)
bindtextdomain (PACKAGE, EVOLUTION_LOCALEDIR);
textdomain (PACKAGE);
+ /* Make ElectricFence work. */
+ free (malloc (10));
+
gnome_init_with_popt_table ("Evolution", VERSION, argc, argv, options, 0, &popt_context);
if (evolution_debug_log) {