~vcs-imports/kupfer/master-new

« back to all changes in this revision

Viewing changes to kupfer/ui/session.py

  • Committer: Ulrik Sverdrup
  • Author(s): Karol Będkowski
  • Date: 2010-02-11 16:59:52 UTC
  • Revision ID: git-v1:b3fafcb4600c4c265586eb024ddd1b1eb9e98684
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.

Show diffs side-by-side

added added

removed removed

Lines of Context:
7
7
"""
8
8
 
9
9
import os
 
10
import time
10
11
 
11
12
import dbus
12
13
import gobject
32
33
                except dbus.DBusException, exc:
33
34
                        self.output_error(exc)
34
35
                if not succ:
 
36
                        # try to bind to xfce session manager
 
37
                        try:
 
38
                                succ = self._connect_xfce_session_manager()
 
39
                        except dbus.DBusException, exc:
 
40
                                self.output_error(exc)
 
41
                if not succ:
35
42
                        succ = self._connect_gnomeui()
36
43
 
37
44
                # unset autostart id so that it is not transferred
93
100
                                dbus_interface=private_iface_name)
94
101
                return True
95
102
 
 
103
        def _connect_xfce_session_manager(self):
 
104
                bus = dbus.SessionBus()
 
105
                proxy_obj = bus.get_object('org.freedesktop.DBus',
 
106
                                '/org/freedesktop/DBus')
 
107
                dbus_iface = dbus.Interface(proxy_obj, 'org.freedesktop.DBus')
 
108
                service_name = "org.xfce.SessionManager"
 
109
                obj_name = "/org/xfce/SessionManager"
 
110
 
 
111
                if not dbus_iface.NameHasOwner(service_name):
 
112
                        self.output_debug("D-Bus name %s not found" % service_name)
 
113
                        return False
 
114
 
 
115
                try:
 
116
                        bus.get_object(service_name, obj_name)
 
117
                except dbus.DBusException, e:
 
118
                        pretty.print_error(__name__, e)
 
119
                        return False
 
120
 
 
121
                private_iface_name = "org.xfce.Session.Manager"
 
122
                bus.add_signal_receiver(self._xfce_session_state_changed, "StateChanged",
 
123
                                dbus_interface=private_iface_name)
 
124
                return True
 
125
 
96
126
        def _get_response_obj(self):
97
127
                """Return D-Bus session object for ClientPrivate Interface"""
98
128
                service_name = "org.gnome.SessionManager"
122
152
                smanager = self._get_response_obj()
123
153
                smanager and smanager.EndSessionResponse(True, "Always OK")
124
154
 
 
155
        def _xfce_session_state_changed(self, old_value, new_value):
 
156
                self.output_debug("XFCE Session change", time.asctime(),
 
157
                                old_value, new_value)
 
158
                if new_value == 4:
 
159
                        self.emit("save-yourself")
 
160
 
125
161
        def _stop_signal(self):
126
162
                self.output_debug("Session stop")
127
163
                self.emit("die")