From e10ccbd38205bdf451f68932aacfc7f5e3f70dea Mon Sep 17 00:00:00 2001 From: Christian Persch Date: Tue, 24 Jan 2006 18:15:50 +0000 Subject: Run the main loop until the reply is received when activating a running 2006-01-24 Christian Persch * lib/ephy-file-helpers.c: (ephy_dot_dir), (ephy_file_helpers_init): * lib/ephy-file-helpers.h: * src/ephy-dbus.c: * src/ephy-main.c: (unref_proxy_reply_cb), (open_urls), (main): Run the main loop until the reply is received when activating a running instance. Fixes URL opening with two concurrently starting instance. --- ChangeLog | 12 ++++++++++++ lib/ephy-file-helpers.c | 49 +++++++++++++++++++++++++++++++++++-------------- lib/ephy-file-helpers.h | 7 ++++--- src/ephy-dbus.c | 1 + src/ephy-main.c | 21 +++++++++++++++------ 5 files changed, 67 insertions(+), 23 deletions(-) diff --git a/ChangeLog b/ChangeLog index cd2d7a1bb..7590aca0f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2006-01-24 Christian Persch + + * lib/ephy-file-helpers.c: (ephy_dot_dir), + (ephy_file_helpers_init): + * lib/ephy-file-helpers.h: + * src/ephy-dbus.c: + * src/ephy-main.c: (unref_proxy_reply_cb), (open_urls), (main): + + Run the main loop until the reply is received when + activating a running instance. Fixes URL opening with + two concurrently starting instance. + 2006-01-24 Christian Persch * src/ephy-dbus.c: (ephy_dbus_connect_to_session_bus): diff --git a/lib/ephy-file-helpers.c b/lib/ephy-file-helpers.c index c9c62d043..6e024c260 100644 --- a/lib/ephy-file-helpers.c +++ b/lib/ephy-file-helpers.c @@ -1,7 +1,7 @@ /* * Copyright (C) 2002 Jorn Baayen * Copyright (C) 2003, 2004 Marco Pesenti Gritti - * Copyright (C) 2004 Christian Persch + * Copyright (C) 2004, 2005, 2006 Christian Persch * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -28,10 +28,6 @@ #include "eel-gconf-extensions.h" #include "ephy-debug.h" -#include -#include -#include -#include #include #include #include @@ -49,6 +45,11 @@ #include #include +#include +#include +#include +#include + #define EPHY_UUID "0d82d98f-7079-401c-abff-203fcde1ece3" #define EPHY_UUID_ENVVAR "EPHY_UNIQUE" #define EPHY_UUID_ENVSTRING EPHY_UUID_ENVVAR "=" EPHY_UUID @@ -59,6 +60,7 @@ static GHashTable *files = NULL; static GHashTable *mime_table = NULL; +static gboolean have_private_profile = FALSE; static char *dot_dir = NULL; static char *tmp_dir = NULL; static GList *del_on_exit = NULL; @@ -251,19 +253,12 @@ ephy_file (const char *filename) const char * ephy_dot_dir (void) { - if (dot_dir == NULL) - { - dot_dir = g_build_filename (g_get_home_dir (), - GNOME_DOT_GNOME, - "epiphany", - NULL); - } - return dot_dir; } gboolean -ephy_file_helpers_init (GError **error) +ephy_file_helpers_init (gboolean private_profile, + GError **error) { const char *uuid; @@ -285,6 +280,32 @@ ephy_file_helpers_init (GError **error) (GDestroyNotify) g_free, (GDestroyNotify) g_free); + have_private_profile = private_profile; + + if (private_profile) + { + if (ephy_file_tmp_dir () == NULL) + { + g_set_error (error, + EPHY_FILE_HELPERS_ERROR_QUARK, + 0, + _("Could not create a temporary directory in “%s”."), + g_get_tmp_dir ()); + return FALSE; + } + + dot_dir = g_build_filename (ephy_file_tmp_dir (), + "epiphany", + NULL); + } + else + { + dot_dir = g_build_filename (g_get_home_dir (), + GNOME_DOT_GNOME, + "epiphany", + NULL); + } + return ephy_ensure_dir_exists (ephy_dot_dir (), error); } diff --git a/lib/ephy-file-helpers.h b/lib/ephy-file-helpers.h index 189cc17e2..505e609c6 100644 --- a/lib/ephy-file-helpers.h +++ b/lib/ephy-file-helpers.h @@ -1,7 +1,7 @@ /* * Copyright (C) 2002 Jorn Baayen * Copyright (C) 2003, 2004 Marco Pesenti Gritti - * Copyright (C) 2004 Christian Persch + * Copyright (C) 2004, 2005, 2006 Christian Persch * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -43,12 +43,13 @@ typedef struct _EphyFileMonitor EphyFileMonitor; typedef void (* EphyFileMonitorFunc) (EphyFileMonitor*, const char*, GnomeVFSMonitorEventType, gpointer); typedef gboolean (* EphyFileMonitorDelayFunc) (EphyFileMonitor*, gpointer); +gboolean ephy_file_helpers_init (gboolean private_profile, + GError **error); + const char *ephy_file (const char *filename); const char *ephy_dot_dir (void); -gboolean ephy_file_helpers_init (GError **error); - void ephy_file_helpers_shutdown (void); char *ephy_file_downloads_dir (void); diff --git a/src/ephy-dbus.c b/src/ephy-dbus.c index 214a8452e..7f58fb6f6 100644 --- a/src/ephy-dbus.c +++ b/src/ephy-dbus.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2004, 2005 Jean-François Rameau + * Copyright (C) 2006 Christian Persch * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/ephy-main.c b/src/ephy-main.c index 39905ce41..63a2b9b2f 100644 --- a/src/ephy-main.c +++ b/src/ephy-main.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2000-2002 Marco Pesenti Gritti + * Copyright (C) 2006 Christian Persch * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -59,6 +60,7 @@ static GQuark startup_error_quark = 0; static gboolean open_in_new_tab = FALSE; static gboolean open_in_new_window = FALSE; static gboolean open_as_bookmarks_editor = FALSE; +static gboolean private_instance = FALSE; //static gboolean reload_plugins = FALSE; static char *session_filename = NULL; @@ -80,6 +82,8 @@ static const GOptionEntry option_entries[] = N_("Load the given session file"), N_("FILE") }, { "add-bookmark", 't', 0, G_OPTION_ARG_STRING, &bookmark_url, N_("Add a bookmark"), N_("URL") }, + { "private-instance", 0, 0, G_OPTION_ARG_NONE, &private_instance, + N_("Start a private instance"), NULL }, { G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_STRING_ARRAY, &remaining_arguments, "", "" }, { NULL } @@ -345,6 +349,11 @@ unref_proxy_reply_cb (DBusGProxy *proxy, } g_object_unref (proxy); + + if (!_ephy_dbus_is_name_owner () && gtk_main_level ()) + { + gtk_main_quit (); + } } static gboolean @@ -391,6 +400,7 @@ open_urls (DBusGProxy *proxy, } g_strfreev (remaining_arguments); + remaining_arguments = NULL; } return TRUE; @@ -578,7 +588,6 @@ main (int argc, { _ephy_dbus_release (); - gdk_notify_startup_complete (); show_error_message (&error); exit (1); @@ -601,6 +610,8 @@ main (int argc, if (proxy != NULL && call_dbus_proxy (proxy, user_time, &error)) { + gtk_main (); + _ephy_dbus_release (); gdk_notify_startup_complete (); @@ -609,7 +620,6 @@ main (int argc, _ephy_dbus_release (); - gdk_notify_startup_complete (); show_error_message (&error); exit (1); @@ -617,11 +627,10 @@ main (int argc, /* We're not remoting; start our services */ - if (!ephy_file_helpers_init (&error)) + if (!ephy_file_helpers_init (FALSE, &error)) { _ephy_dbus_release (); - gdk_notify_startup_complete (); show_error_message (&error); exit (1); @@ -651,9 +660,9 @@ main (int argc, g_object_unref (ephy_shell_get_default ()); + ephy_file_helpers_shutdown (); _ephy_dbus_release (); - gdk_notify_startup_complete (); show_error_message (&error); exit (1); @@ -667,9 +676,9 @@ main (int argc, { g_object_unref (ephy_shell_get_default ()); + ephy_file_helpers_shutdown (); _ephy_dbus_release (); - gdk_notify_startup_complete (); show_error_message (&error); exit (1); -- cgit v1.2.3