[kupfer] ui.session: try to bind to xfce session manager
- From: Ulrik Sverdrup <usverdrup src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [kupfer] ui.session: try to bind to xfce session manager
- Date: Thu, 11 Feb 2010 17:00:12 +0000 (UTC)
commit b3fafcb4600c4c265586eb024ddd1b1eb9e98684
Author: Karol BÄ?dkowski <karol bedkowski gmail com>
Date: Thu Feb 11 16:55:53 2010 +0100
ui.session: try to bind to xfce session manager
If Gnome Session Manager don't exists, bind to the XFCE Session Manager
StateChanged signal and emit "save-yourself" when session state changing.
Emit save-yourself only when XFCE Session manager really shutdown.
kupfer/ui/session.py | 36 ++++++++++++++++++++++++++++++++++++
1 files changed, 36 insertions(+), 0 deletions(-)
---
diff --git a/kupfer/ui/session.py b/kupfer/ui/session.py
index 1276842..183941d 100644
--- a/kupfer/ui/session.py
+++ b/kupfer/ui/session.py
@@ -7,6 +7,7 @@ the module API does not depend on the session API used
"""
import os
+import time
import dbus
import gobject
@@ -32,6 +33,12 @@ class SessionClient (gobject.GObject, pretty.OutputMixin):
except dbus.DBusException, exc:
self.output_error(exc)
if not succ:
+ # try to bind to xfce session manager
+ try:
+ succ = self._connect_xfce_session_manager()
+ except dbus.DBusException, exc:
+ self.output_error(exc)
+ if not succ:
succ = self._connect_gnomeui()
# unset autostart id so that it is not transferred
@@ -93,6 +100,29 @@ class SessionClient (gobject.GObject, pretty.OutputMixin):
dbus_interface=private_iface_name)
return True
+ def _connect_xfce_session_manager(self):
+ bus = dbus.SessionBus()
+ proxy_obj = bus.get_object('org.freedesktop.DBus',
+ '/org/freedesktop/DBus')
+ dbus_iface = dbus.Interface(proxy_obj, 'org.freedesktop.DBus')
+ service_name = "org.xfce.SessionManager"
+ obj_name = "/org/xfce/SessionManager"
+
+ if not dbus_iface.NameHasOwner(service_name):
+ self.output_debug("D-Bus name %s not found" % service_name)
+ return False
+
+ try:
+ bus.get_object(service_name, obj_name)
+ except dbus.DBusException, e:
+ pretty.print_error(__name__, e)
+ return False
+
+ private_iface_name = "org.xfce.Session.Manager"
+ bus.add_signal_receiver(self._xfce_session_state_changed, "StateChanged",
+ dbus_interface=private_iface_name)
+ return True
+
def _get_response_obj(self):
"""Return D-Bus session object for ClientPrivate Interface"""
service_name = "org.gnome.SessionManager"
@@ -122,6 +152,12 @@ class SessionClient (gobject.GObject, pretty.OutputMixin):
smanager = self._get_response_obj()
smanager and smanager.EndSessionResponse(True, "Always OK")
+ def _xfce_session_state_changed(self, old_value, new_value):
+ self.output_debug("XFCE Session change", time.asctime(),
+ old_value, new_value)
+ if new_value == 4:
+ self.emit("save-yourself")
+
def _stop_signal(self):
self.output_debug("Session stop")
self.emit("die")
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]