[gnome-shell] If org.gnome.Panel exists on the bus, replace it rather than using gdb
- From: Colin Walters <walters src gnome org>
- To: svn-commits-list gnome org
- Subject: [gnome-shell] If org.gnome.Panel exists on the bus, replace it rather than using gdb
- Date: Tue, 21 Jul 2009 17:29:55 +0000 (UTC)
commit fdd9b85448dae6ac68da506fbce2dbe5b0c7eac5
Author: Colin Walters <walters verbum org>
Date: Tue Jul 21 10:50:18 2009 -0400
If org.gnome.Panel exists on the bus, replace it rather than using gdb
Avoid depending on gdb for replacing an existing panel, since it
requires debuginfo and gdb installed.
Instead we grab the org.gnome.Panel DBus name, using DBus name
replacement semantics.
src/gnome-shell.in | 14 ++++++++++++--
src/shell-global.c | 16 ++++++++++++++--
2 files changed, 26 insertions(+), 4 deletions(-)
---
diff --git a/src/gnome-shell.in b/src/gnome-shell.in
index f1d5e0b..eccea6c 100755
--- a/src/gnome-shell.in
+++ b/src/gnome-shell.in
@@ -13,6 +13,7 @@ import tempfile
import termios
import time
import errno
+import dbus
def find_cmd (cmd_list):
"""
@@ -230,7 +231,16 @@ if options.wide:
metacity_pid = pidof("metacity")
compiz_pid = pidof("compiz.real") or pidof("compiz")
-gnome_panel_pid = pidof("gnome-panel")
+
+# In Gnome 2.26 the panel grabs a dbus name and allows replacement; use that.
+bus = dbus.Interface(dbus.SessionBus().get_object('org.freedesktop.DBus', '/org/freedesktop/DBus'),
+ 'org.freedesktop.DBus')
+names = bus.ListNames()
+gnome_panel_dbus = 'org.gnome.Panel' in names
+if gnome_panel_dbus:
+ gnome_panel_pid = None
+else:
+ gnome_panel_pid = pidof("gnome-panel")
# Run in Xephyr if gnome-panel is already running and the user didn't
# specify --replace. Otherwise, run fullscreen
@@ -299,7 +309,7 @@ finally:
if options.verbose:
print "Restarting Compiz"
subprocess.Popen(["/usr/bin/compiz"])
- if gnome_panel_pid:
+ if gnome_panel_dbus or gnome_panel_pid:
if options.verbose:
print "Restarting gnome-panel"
subprocess.Popen(["/usr/bin/gnome-panel"])
diff --git a/src/shell-global.c b/src/shell-global.c
index 6a803b5..ea31636 100644
--- a/src/shell-global.c
+++ b/src/shell-global.c
@@ -739,11 +739,23 @@ 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))
+ {
+ g_print ("failed to acquire org.gnome.Panel: %s\n", error->message);
+ exit (1);
+ }
+
g_object_unref (bus);
}
-void
+void
shell_global_start_task_panel (ShellGlobal *global)
{
const char* panel_args[] = {"gnomeshell-taskpanel", SHELL_DBUS_SERVICE, NULL};
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]