diff --git a/src/gnome-shell.in b/src/gnome-shell.in old mode 100755 new mode 100644 index eccea6c2a..96220294f --- a/src/gnome-shell.in +++ b/src/gnome-shell.in @@ -273,6 +273,8 @@ if options.debug: try: if run_in_xephyr: shell = start_xephyr() + # This makes us not grab the org.gnome.Panel name + os.environ['GNOME_SHELL_NO_REPLACE_PANEL'] = '1' start_shell() else: if gnome_panel_pid is not None: diff --git a/src/shell-global.c b/src/shell-global.c index 0c70e302e..575956c16 100644 --- a/src/shell-global.c +++ b/src/shell-global.c @@ -741,18 +741,22 @@ shell_global_grab_dbus_service (ShellGlobal *global) exit (0); } - /* Also grab org.gnome.Panel to replace any existing panel process */ - if (!dbus_g_proxy_call (bus, "RequestName", &error, - G_TYPE_STRING, "org.gnome.Panel", - G_TYPE_UINT, DBUS_NAME_FLAG_REPLACE_EXISTING | DBUS_NAME_FLAG_DO_NOT_QUEUE, - G_TYPE_INVALID, - G_TYPE_UINT, &request_name_result, - G_TYPE_INVALID)) + /* Also grab org.gnome.Panel to replace any existing panel process, + * unless a special environment variable is passed. The environment + * variable is used by the gnome-shell (no --replace) launcher in + * Xephyr */ + if (!g_getenv ("GNOME_SHELL_NO_REPLACE_PANEL")) { - g_print ("failed to acquire org.gnome.Panel: %s\n", error->message); - exit (1); + if (!dbus_g_proxy_call (bus, "RequestName", &error, G_TYPE_STRING, + "org.gnome.Panel", G_TYPE_UINT, + DBUS_NAME_FLAG_REPLACE_EXISTING | DBUS_NAME_FLAG_DO_NOT_QUEUE, + G_TYPE_INVALID, G_TYPE_UINT, + &request_name_result, G_TYPE_INVALID)) + { + g_print ("failed to acquire org.gnome.Panel: %s\n", error->message); + exit (1); + } } - g_object_unref (bus); }