aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog23
-rw-r--r--src/ephy-main.c40
-rw-r--r--src/ephy-shell.c24
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 <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