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.
This commit is contained in:
parent
e12587619b
commit
fdd9b85448
@ -13,6 +13,7 @@ import tempfile
|
|||||||
import termios
|
import termios
|
||||||
import time
|
import time
|
||||||
import errno
|
import errno
|
||||||
|
import dbus
|
||||||
|
|
||||||
def find_cmd (cmd_list):
|
def find_cmd (cmd_list):
|
||||||
"""
|
"""
|
||||||
@ -230,7 +231,16 @@ if options.wide:
|
|||||||
|
|
||||||
metacity_pid = pidof("metacity")
|
metacity_pid = pidof("metacity")
|
||||||
compiz_pid = pidof("compiz.real") or pidof("compiz")
|
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
|
# Run in Xephyr if gnome-panel is already running and the user didn't
|
||||||
# specify --replace. Otherwise, run fullscreen
|
# specify --replace. Otherwise, run fullscreen
|
||||||
@ -299,7 +309,7 @@ finally:
|
|||||||
if options.verbose:
|
if options.verbose:
|
||||||
print "Restarting Compiz"
|
print "Restarting Compiz"
|
||||||
subprocess.Popen(["/usr/bin/compiz"])
|
subprocess.Popen(["/usr/bin/compiz"])
|
||||||
if gnome_panel_pid:
|
if gnome_panel_dbus or gnome_panel_pid:
|
||||||
if options.verbose:
|
if options.verbose:
|
||||||
print "Restarting gnome-panel"
|
print "Restarting gnome-panel"
|
||||||
subprocess.Popen(["/usr/bin/gnome-panel"])
|
subprocess.Popen(["/usr/bin/gnome-panel"])
|
||||||
|
@ -740,6 +740,18 @@ shell_global_grab_dbus_service (ShellGlobal *global)
|
|||||||
exit (0);
|
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);
|
g_object_unref (bus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user