aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog24
-rw-r--r--embed/mozilla/mozilla-notifiers.cpp6
-rw-r--r--src/ephy-main.c20
-rw-r--r--src/ephy-shell.c98
-rw-r--r--src/ephy-window.c36
5 files changed, 109 insertions, 75 deletions
diff --git a/ChangeLog b/ChangeLog
index 0d960b6cf..1d540b596 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,29 @@
2003-11-13 Marco Pesenti Gritti <marco@gnome.org>
+ * embed/mozilla/mozilla-notifiers.cpp:
+ * src/ephy-main.c: (main):
+ * src/ephy-shell.c: (ephy_shell_init), (ephy_shell_startup),
+ (ephy_shell_finalize), (ephy_shell_get_session),
+ (ephy_shell_get_extensions_manager):
+ * src/ephy-window.c: (ensure_default_icon), (ephy_window_init):
+
+ Rework shell services initialization so that it happen either
+ on every instance, before the automation stuff is used, either
+ when they are requested. This appear to fix the crash with two
+ instances runned simultaneously.
+ (Christian I'm not quite sure this is ok for plugins manager, if
+ there are problems let me know.)
+
+2003-11-13 Marco Pesenti Gritti <marco@gnome.org>
+
+ * src/ephy-main.c: (main):
+ * src/ephy-shell.c: (ephy_shell_init), (ephy_shell_startup),
+ (ephy_shell_finalize), (ephy_shell_get_session),
+ (ephy_shell_get_extensions_manager):
+ * src/ephy-window.c: (ensure_default_icon), (ephy_window_init):
+
+2003-11-13 Marco Pesenti Gritti <marco@gnome.org>
+
* idl/EphyAutomation.idl:
* src/ephy-automation.c: (ephy_automation_factory_cb),
(ephy_automation_factory_new), (impl_ephy_automation_loadurl):
diff --git a/embed/mozilla/mozilla-notifiers.cpp b/embed/mozilla/mozilla-notifiers.cpp
index d2656e71c..955dc00bb 100644
--- a/embed/mozilla/mozilla-notifiers.cpp
+++ b/embed/mozilla/mozilla-notifiers.cpp
@@ -449,6 +449,9 @@ mozilla_notifiers_init (EphyEmbedSingle *single)
const EphyFontsLanguageInfo *font_languages;
guint n_font_languages;
+ eel_gconf_monitor_add ("/apps/epiphany/web");
+ eel_gconf_monitor_add ("/system/proxy");
+
#ifdef MIGRATE_PIXEL_SIZE
gboolean migrate_size;
@@ -603,6 +606,9 @@ mozilla_notifiers_init (EphyEmbedSingle *single)
void
mozilla_notifiers_free (void)
{
+ eel_gconf_monitor_remove ("/apps/epiphany/web");
+ eel_gconf_monitor_remove ("/system/proxy");
+
g_list_foreach (mozilla_notifiers,
(GFunc)eel_gconf_notification_remove,
NULL);
diff --git a/src/ephy-main.c b/src/ephy-main.c
index 542cc3c06..d94e301a1 100644
--- a/src/ephy-main.c
+++ b/src/ephy-main.c
@@ -21,6 +21,12 @@
#endif
#include "ephy-shell.h"
+#include "ephy-file-helpers.h"
+#include "ephy-thread-helpers.h"
+#include "ephy-state.h"
+#include "ephy-debug.h"
+#include "ephy-stock-icons.h"
+#include "eel-gconf-extensions.h"
#include <libgnomeui/gnome-ui-init.h>
#include <gtk/gtkmain.h>
@@ -28,6 +34,8 @@
#include <libgnome/gnome-program.h>
#include <bonobo/bonobo-main.h>
#include <glib/gi18n.h>
+#include <glade/glade-init.h>
+#include <libgnomevfs/gnome-vfs-init.h>
static gboolean open_in_existing = FALSE;
static gboolean open_in_new_tab = FALSE;
@@ -143,6 +151,13 @@ main (int argc, char *argv[])
string_arg = bookmark_url;
}
+ gnome_vfs_init ();
+ glade_gnome_init ();
+ ephy_debug_init ();
+ ephy_thread_helpers_init ();
+ ephy_file_helpers_init ();
+ ephy_stock_icons_init ();
+ eel_gconf_monitor_add ("/apps/epiphany/general");
bonobo_activate ();
ephy_shell = ephy_shell_new ();
@@ -167,5 +182,10 @@ main (int argc, char *argv[])
gtk_main ();
}
+ eel_gconf_monitor_remove ("/apps/epiphany/general");
+ ephy_state_save ();
+ ephy_file_helpers_shutdown ();
+ gnome_vfs_shutdown ();
+
return 0;
}
diff --git a/src/ephy-shell.c b/src/ephy-shell.c
index 6cdb6700f..a661ceceb 100644
--- a/src/ephy-shell.c
+++ b/src/ephy-shell.c
@@ -23,15 +23,12 @@
#endif
#include "ephy-shell.h"
-#include "ephy-state.h"
#include "ephy-embed-shell.h"
#include "eel-gconf-extensions.h"
#include "ephy-prefs.h"
+#include "ephy-file-helpers.h"
#include "ephy-favicon-cache.h"
-#include "ephy-stock-icons.h"
#include "ephy-window.h"
-#include "ephy-file-helpers.h"
-#include "ephy-thread-helpers.h"
#include "ephy-bookmarks-import.h"
#include "ephy-bookmarks-editor.h"
#include "ephy-history-window.h"
@@ -51,9 +48,6 @@
#include <gtk/gtkmessagedialog.h>
#include <dirent.h>
#include <unistd.h>
-#include <libgnomevfs/gnome-vfs-init.h>
-#include <gtk/gtkicontheme.h>
-#include <glade/glade-init.h>
#ifdef ENABLE_NAUTILUS_VIEW
@@ -170,6 +164,7 @@ ephy_shell_init (EphyShell *gs)
gs->priv->history_window = NULL;
gs->priv->toolbars_model = NULL;
gs->priv->fs_toolbars_model = NULL;
+ gs->priv->extensions_manager = NULL;
ephy_shell = gs;
g_object_add_weak_pointer (G_OBJECT(ephy_shell),
@@ -180,68 +175,6 @@ ephy_shell_init (EphyShell *gs)
}
static void
-init_services (EphyShell *gs, GError **error)
-{
- GtkIconTheme *icon_theme;
- GtkIconInfo *icon_info;
- const char *icon_file;
- EphyEmbedSingle *single;
-
- gnome_vfs_init ();
- glade_gnome_init ();
- ephy_debug_init ();
- ephy_thread_helpers_init ();
- ephy_file_helpers_init ();
- ephy_stock_icons_init ();
- ephy_ensure_dir_exists (ephy_dot_dir ());
-
- /* preload the prefs */
- /* it also enables notifiers support */
- eel_gconf_monitor_add ("/apps/epiphany");
- eel_gconf_monitor_add ("/system/proxy");
-
- /* This ensures mozilla is fired up */
- single = ephy_embed_shell_get_embed_single (EPHY_EMBED_SHELL (gs));
- if (single == NULL)
- {
- g_set_error (error, EPHY_SHELL_ERROR,
- EPHY_SHELL_ERROR_MOZILLA_REG_FAILED,
- _("Epiphany can't be used now. "
- "Mozilla initialization failed. Check your "
- "MOZILLA_FIVE_HOME environmental variable."));
- }
-
- /* FIXME listen on icon changes */
- /* FIXME MultiHead: icon theme is per-display, not global */
- icon_theme = gtk_icon_theme_get_default ();
- icon_info = gtk_icon_theme_lookup_icon (icon_theme, "web-browser", -1, 0);
-
- if (icon_info)
- {
-
- icon_file = gtk_icon_info_get_filename (icon_info);
- if (icon_file)
- {
- gtk_window_set_default_icon_from_file (icon_file, NULL);
- }
-
- gtk_icon_info_free (icon_info);
- }
- else
- {
- g_warning ("Web browser gnome icon not found");
- }
-
- /* Instantiate extensions manager; this will load the extensions */
- gs->priv->extensions_manager = ephy_extensions_manager_new ();
-
- /* Instantiate internal extensions */
- gs->priv->session =
- EPHY_SESSION (ephy_extensions_manager_add
- (gs->priv->extensions_manager, EPHY_TYPE_SESSION));
-}
-
-static void
open_urls (GNOME_EphyAutomation automation,
const char **args, CORBA_Environment *ev,
gboolean new_tab, gboolean existing_window,
@@ -278,6 +211,8 @@ ephy_shell_startup (EphyShell *gs,
GNOME_EphyAutomation automation;
Bonobo_RegistrationResult result;
+ ephy_ensure_dir_exists (ephy_dot_dir ());
+
#ifdef ENABLE_NAUTILUS_VIEW
ephy_nautilus_view_init_factory (gs);
#endif
@@ -290,8 +225,6 @@ ephy_shell_startup (EphyShell *gs,
switch (result)
{
case Bonobo_ACTIVATION_REG_SUCCESS:
- init_services (gs, error);
- if (*error != NULL) return TRUE;
break;
case Bonobo_ACTIVATION_REG_ALREADY_ACTIVE:
break;
@@ -423,10 +356,6 @@ ephy_shell_finalize (GObject *object)
G_OBJECT_CLASS (parent_class)->finalize (object);
- ephy_state_save ();
- ephy_file_helpers_shutdown ();
- gnome_vfs_shutdown ();
-
if (gs->priv->automation_factory)
{
bonobo_object_unref (gs->priv->automation_factory);
@@ -613,6 +542,19 @@ ephy_shell_get_session (EphyShell *gs)
{
g_return_val_if_fail (EPHY_IS_SHELL (gs), NULL);
+ if (gs->priv->session == NULL)
+ {
+ EphyExtensionsManager *manager;
+
+ manager = EPHY_EXTENSIONS_MANAGER
+ (ephy_shell_get_extensions_manager (gs));
+
+ /* Instantiate internal extensions */
+ gs->priv->session =
+ EPHY_SESSION (ephy_extensions_manager_add
+ (manager, EPHY_TYPE_SESSION));
+ }
+
return G_OBJECT (gs->priv->session);
}
@@ -667,6 +609,12 @@ ephy_shell_get_extensions_manager (EphyShell *es)
{
g_return_val_if_fail (EPHY_IS_SHELL (es), NULL);
+ if (es->priv->extensions_manager == NULL)
+ {
+ /* Instantiate extensions manager; this will load the extensions */
+ es->priv->extensions_manager = ephy_extensions_manager_new ();
+ }
+
return G_OBJECT (es->priv->extensions_manager);
}
diff --git a/src/ephy-window.c b/src/ephy-window.c
index c93689f54..854b2d9c8 100644
--- a/src/ephy-window.c
+++ b/src/ephy-window.c
@@ -1451,6 +1451,40 @@ ephy_window_class_init (EphyWindowClass *klass)
}
static void
+ensure_default_icon (void)
+{
+ static gboolean ephy_has_default_icon = FALSE;
+ GtkIconTheme *icon_theme;
+ GtkIconInfo *icon_info;
+ const char *icon_file;
+
+ if (ephy_has_default_icon) return;
+
+ /* FIXME listen on icon changes */
+ /* FIXME MultiHead: icon theme is per-display, not global */
+ icon_theme = gtk_icon_theme_get_default ();
+ icon_info = gtk_icon_theme_lookup_icon (icon_theme, "web-browser", -1, 0);
+
+ if (icon_info)
+ {
+
+ icon_file = gtk_icon_info_get_filename (icon_info);
+ if (icon_file)
+ {
+ gtk_window_set_default_icon_from_file (icon_file, NULL);
+ }
+
+ gtk_icon_info_free (icon_info);
+ }
+ else
+ {
+ g_warning ("Web browser gnome icon not found");
+ }
+
+ ephy_has_default_icon = TRUE;
+}
+
+static void
ephy_window_init (EphyWindow *window)
{
EphyExtension *manager;
@@ -1468,6 +1502,8 @@ ephy_window_init (EphyWindow *window)
window->priv->is_fullscreen = FALSE;
window->priv->has_size = FALSE;
+ ensure_default_icon ();
+
/* Setup the window and connect verbs */
setup_window (window);