diff options
-rw-r--r-- | ChangeLog | 23 | ||||
-rw-r--r-- | src/ephy-main.c | 40 | ||||
-rw-r--r-- | src/ephy-shell.c | 24 |
3 files changed, 66 insertions, 21 deletions
@@ -1,3 +1,26 @@ +2003-10-16 Mark McLoughlin <mark@skynet.ie> + + 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 <ettore@ximian.com> * 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 @@ -517,22 +517,44 @@ 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 |