[epiphany] Move code to initialize preferences from ephy-main to ephy-shell



commit f65b0e0ef8322139d230c0b5ba60e569ee1f390c
Author: Carlos Garcia Campos <cgarcia igalia com>
Date:   Tue Mar 19 19:02:12 2013 +0100

    Move code to initialize preferences from ephy-main to ephy-shell
    
    As well as the code the prepare the environment for the wen process and
    web context initialization. This allows to only run that initializations
    only for the primary instance. It fixes a crash in web process when the
    ui process finishes too early and makes secondary instances to run
    faster, since they don't spawn a web process anymore.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=696020

 src/Makefile.am  |    2 +-
 src/ephy-main.c  |   28 ----------------------------
 src/ephy-shell.c |   46 ++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 47 insertions(+), 29 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index a2c2aed..0b38aa8 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -86,6 +86,7 @@ libephymain_la_CPPFLAGS = \
        -DLOADER_DIR=\""$(pkglibdir)/$(EPIPHANY_MAJOR)/loaders"\"               \
        -DDATADIR=\""$(pkgdatadir)"\"   \
        -DGNOMELOCALEDIR=\"$(datadir)/locale\"  \
+       -DEPHY_WEB_EXTENSIONS_DIR=\""$(libdir)/epiphany/$(EPIPHANY_MAJOR)/web-extensions"\" \
        $(AM_CPPFLAGS)
 
 if WITH_WEBKIT2
@@ -138,7 +139,6 @@ epiphany_CPPFLAGS = \
        -I$(top_srcdir)/src/bookmarks   \
        -DDATADIR=\""$(datadir)"\"      \
        -DGNOMELOCALEDIR=\"$(datadir)/locale\"  \
-       -DEPHY_WEB_EXTENSIONS_DIR=\""$(libdir)/epiphany/$(EPIPHANY_MAJOR)/web-extensions"\" \
        $(INCINTL)                      \
        $(AM_CPPFLAGS)
 
diff --git a/src/ephy-main.c b/src/ephy-main.c
index a789917..80d076b 100644
--- a/src/ephy-main.c
+++ b/src/ephy-main.c
@@ -23,7 +23,6 @@
 #include "config.h"
 
 #include "ephy-debug.h"
-#include "ephy-embed-prefs.h"
 #include "ephy-file-helpers.h"
 #include "ephy-initial-state.h"
 #include "ephy-private.h"
@@ -229,10 +228,6 @@ main (int argc,
   EphyShell *ephy_shell;
   int status;
   EphyFileHelpersFlags flags;
-#ifdef HAVE_WEBKIT2
-  char *pid_str;
-  char *disk_cache_dir;
-#endif
 
 #ifdef ENABLE_NLS
   /* Initialize the i18n stuff */
@@ -462,28 +457,6 @@ main (int argc,
     gtk_window_set_default_icon_name ("web-browser");
   }
 
-#ifdef HAVE_WEBKIT2
-  pid_str = g_strdup_printf ("%u", getpid ());
-  g_setenv ("EPHY_WEB_EXTENSION_ID", pid_str, TRUE);
-  g_setenv ("EPHY_DOT_DIR", ephy_dot_dir (), TRUE);
-  if (private_instance || incognito_mode)
-    g_setenv ("EPHY_PRIVATE_PROFILE", "1", TRUE);
-  g_free (pid_str);
-
-  /* Set the web extensions dir ASAP before the process is launched */
-  webkit_web_context_set_web_extensions_directory (webkit_web_context_get_default (),
-                                                   EPHY_WEB_EXTENSIONS_DIR);
-
-  /* Disk Cache */
-  disk_cache_dir = g_build_filename (EPHY_EMBED_SHELL_MODE_HAS_PRIVATE_PROFILE (mode) ?
-                                     ephy_dot_dir () : g_get_user_cache_dir (),
-                                     g_get_prgname (), NULL);
-  webkit_web_context_set_disk_cache_directory (webkit_web_context_get_default (),
-                                               disk_cache_dir);
-  g_free (disk_cache_dir);
-#endif
-
-  ephy_embed_prefs_init ();
   _ephy_shell_create_instance (mode);
 
   startup_flags = get_startup_flags ();
@@ -505,7 +478,6 @@ main (int argc,
     notify_uninit ();
 
   ephy_initial_state_save ();
-  ephy_embed_prefs_shutdown ();
   ephy_settings_shutdown ();
   ephy_file_helpers_shutdown ();
   xmlCleanupParser ();
diff --git a/src/ephy-shell.c b/src/ephy-shell.c
index 3d8fc52..252a4cb 100644
--- a/src/ephy-shell.c
+++ b/src/ephy-shell.c
@@ -30,6 +30,7 @@
 #include "ephy-bookmarks-import.h"
 #include "ephy-debug.h"
 #include "ephy-embed-container.h"
+#include "ephy-embed-prefs.h"
 #include "ephy-embed-single.h"
 #include "ephy-embed-utils.h"
 #include "ephy-file-helpers.h"
@@ -226,16 +227,52 @@ static GActionEntry app_normal_mode_entries[] = {
   { "reopen-closed-tab", reopen_closed_tab, NULL, NULL, NULL },
 };
 
+#ifdef HAVE_WEBKIT2
+static void
+ephy_shell_setup_environment (EphyShell *shell)
+{
+  EphyEmbedShellMode mode = ephy_embed_shell_get_mode (EPHY_EMBED_SHELL (shell));
+  char *pid_str;
+
+  pid_str = g_strdup_printf ("%u", getpid ());
+  g_setenv ("EPHY_WEB_EXTENSION_ID", pid_str, TRUE);
+  g_setenv ("EPHY_DOT_DIR", ephy_dot_dir (), TRUE);
+  if (EPHY_EMBED_SHELL_MODE_HAS_PRIVATE_PROFILE (mode))
+    g_setenv ("EPHY_PRIVATE_PROFILE", "1", TRUE);
+  g_free (pid_str);
+}
+#endif
+
 static void
 ephy_shell_startup (GApplication* application)
 {
   EphyEmbedShellMode mode;
+#ifdef HAVE_WEBKIT2
+  char *disk_cache_dir;
+#endif
 
   G_APPLICATION_CLASS (ephy_shell_parent_class)->startup (application);
 
   /* We're not remoting; start our services */
   mode = ephy_embed_shell_get_mode (EPHY_EMBED_SHELL (application));
 
+#ifdef HAVE_WEBKIT2
+  ephy_shell_setup_environment (EPHY_SHELL (application));
+  /* Set the web extensions dir ASAP before the process is launched */
+  webkit_web_context_set_web_extensions_directory (webkit_web_context_get_default (),
+                                                   EPHY_WEB_EXTENSIONS_DIR);
+
+  /* Disk Cache */
+  disk_cache_dir = g_build_filename (EPHY_EMBED_SHELL_MODE_HAS_PRIVATE_PROFILE (mode) ?
+                                     ephy_dot_dir () : g_get_user_cache_dir (),
+                                     g_get_prgname (), NULL);
+  webkit_web_context_set_disk_cache_directory (webkit_web_context_get_default (),
+                                               disk_cache_dir);
+  g_free (disk_cache_dir);
+#endif
+
+  ephy_embed_prefs_init ();
+
   if (mode != EPHY_EMBED_SHELL_MODE_APPLICATION) {
     GtkBuilder *builder;
 
@@ -266,6 +303,14 @@ ephy_shell_startup (GApplication* application)
 }
 
 static void
+ephy_shell_shutdown (GApplication* application)
+{
+  G_APPLICATION_CLASS (ephy_shell_parent_class)->shutdown (application);
+
+  ephy_embed_prefs_shutdown ();
+}
+
+static void
 session_load_cb (GObject *object,
                  GAsyncResult *result,
                  gpointer user_data)
@@ -500,6 +545,7 @@ ephy_shell_class_init (EphyShellClass *klass)
   object_class->constructed = ephy_shell_constructed;
 
   application_class->startup = ephy_shell_startup;
+  application_class->shutdown = ephy_shell_shutdown;
   application_class->activate = ephy_shell_activate;
   application_class->before_emit = ephy_shell_before_emit;
   application_class->add_platform_data = ephy_shell_add_platform_data;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]