From 7d6bee54d28aa5e8d7afb6c54ad4065a274d2f25 Mon Sep 17 00:00:00 2001 From: Mark McLoughlin Date: Fri, 17 Oct 2003 09:52:06 +0000 Subject: Change the behaviour of --nautilus-view such that the process doesn't exit 2003-10-16 Mark McLoughlin Change the behaviour of --nautilus-view such that the process doesn't exit until the last control has been destroyed. The previous behaviour caused intermittent activation failure when the process timed out and died before the view could be created - bug #124768. * src/ephy-main.c: (ephy_main_start): don't unref the shell when started with --nautilus-view. (ephy_main_dummy_url_argument), (ephy_main_translate_url_arguments): create a dummy argument when no arguments are supplied which will cause the default window to be opened. * src/ephy-shell.c: (ephy_nautilus_view_all_controls_dead): unref the shell here causing the process to exit. (ephy_nautilus_view_init_factory): setup the all_controls_dead callback. (ephy_nautilus_view_new): instrument the control. --- ChangeLog | 23 +++++++++++++++++++++++ src/ephy-main.c | 40 ++++++++++++++++++++-------------------- src/ephy-shell.c | 24 +++++++++++++++++++++++- 3 files changed, 66 insertions(+), 21 deletions(-) diff --git a/ChangeLog b/ChangeLog index 07ad916cf..2ee7ccbff 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,26 @@ +2003-10-16 Mark McLoughlin + + Change the behaviour of --nautilus-view such that the process + doesn't exit until the last control has been destroyed. The + previous behaviour caused intermittent activation failure + when the process timed out and died before the view could be + created - bug #124768. + + * src/ephy-main.c: + (ephy_main_start): don't unref the shell when started with + --nautilus-view. + (ephy_main_dummy_url_argument), + (ephy_main_translate_url_arguments): create a dummy argument + when no arguments are supplied which will cause the default + window to be opened. + + * src/ephy-shell.c: + (ephy_nautilus_view_all_controls_dead): unref the shell + here causing the process to exit. + (ephy_nautilus_view_init_factory): setup the all_controls_dead + callback. + (ephy_nautilus_view_new): instrument the control. + 2003-10-17 Ettore Perazzoli * src/bookmarks/ephy-bookmarks-editor.c diff --git a/src/ephy-main.c b/src/ephy-main.c index 4cd79fc7e..6ca4209ed 100644 --- a/src/ephy-main.c +++ b/src/ephy-main.c @@ -215,20 +215,7 @@ ephy_main_start (gpointer data) (gaserver, &corba_env); } /* provided with urls? */ - else if (n_urls == 0 && - !open_as_nautilus_view) - { - /* no, open a default window */ - GNOME_EphyAutomation_loadurl - (gaserver, "", - open_fullscreen, - open_in_existing, - open_in_new_window, - open_in_new_tab, - !noraise, - &corba_env); - } - else + else if (!open_as_nautilus_view) { /* open all of the urls */ for (i = 0; i < n_urls; i++) @@ -244,8 +231,11 @@ ephy_main_start (gpointer data) } } - /* Unref so it will exit if no more used */ - if (first_instance) + /* Unref so it will exit if no more used + * If started with --nautilus-view, only exit when the + * last view has been destroyed. + */ + if (first_instance && !open_as_nautilus_view) { g_object_unref (G_OBJECT(ephy_shell)); } @@ -262,6 +252,18 @@ ephy_main_start (gpointer data) return FALSE; } +/* dummy argument to open a default window */ +static gint +ephy_main_dummy_url_argument (gchar ***urls) +{ + *urls = g_new0 (gchar *, 2); + + (*urls)[0] = g_strdup (""); + (*urls)[1] = NULL; + + return 1; +} + /** * translate_url_arguments: gather URL arguments and expand them fully * with realpath if they're filenames @@ -276,8 +278,7 @@ ephy_main_translate_url_arguments (poptContext context, gchar ***urls) /* any context remaining? */ if (context == NULL) { - *urls = NULL; - return 0; + return ephy_main_dummy_url_argument (urls); } /* get the args and check */ @@ -285,8 +286,7 @@ ephy_main_translate_url_arguments (poptContext context, gchar ***urls) if (args == NULL) { poptFreeContext (context); - *urls = NULL; - return 0; + return ephy_main_dummy_url_argument (urls); } /* count args */ diff --git a/src/ephy-shell.c b/src/ephy-shell.c index 17adce496..d6dc7b61a 100644 --- a/src/ephy-shell.c +++ b/src/ephy-shell.c @@ -516,23 +516,45 @@ ephy_shell_new_tab (EphyShell *shell, #ifdef ENABLE_NAUTILUS_VIEW +static void +ephy_nautilus_view_all_controls_dead (void) +{ + if (!bonobo_control_life_get_count ()) + { + g_object_unref (G_OBJECT (ephy_shell)); + } +} + static void ephy_nautilus_view_init_factory (EphyShell *gs) { BonoboGenericFactory *ephy_nautilusview_factory; + ephy_nautilusview_factory = bonobo_generic_factory_new (EPHY_NAUTILUS_VIEW_OAFIID, (BonoboFactoryCallback) ephy_nautilus_view_new, gs); if (!BONOBO_IS_GENERIC_FACTORY (ephy_nautilusview_factory)) + { g_warning ("Couldn't create the factory!"); + return; + } + bonobo_control_life_set_callback (ephy_nautilus_view_all_controls_dead); } static BonoboObject * ephy_nautilus_view_new (BonoboGenericFactory *factory, const char *id, EphyShell *gs) { - return ephy_nautilus_view_new_component (gs); + EphyNautilusView *view; + + view = EPHY_NAUTILUS_VIEW ( + ephy_nautilus_view_new_component (gs)); + + bonobo_control_life_instrument ( + nautilus_view_get_bonobo_control (NAUTILUS_VIEW (view))); + + return BONOBO_OBJECT (view); } #endif -- cgit v1.2.3