Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2007-04-23 17:11:21 (GMT)
committer Dan Williams <dcbw@redhat.com>2007-04-23 17:11:21 (GMT)
commit86ab6ca36b2ab0b45096bd209bbfb72db47683f4 (patch)
tree89184ab21756329fd41b30e92bca8a489b19dde8
parent30a50bd9fc2d2f0e794b7dafca7b7d8181defd0a (diff)
Reconnect to the PS if it goes away and comes back
-rw-r--r--sugar/presence/presenceservice.py29
1 files changed, 18 insertions, 11 deletions
diff --git a/sugar/presence/presenceservice.py b/sugar/presence/presenceservice.py
index cd5db0c..c3ed5c7 100644
--- a/sugar/presence/presenceservice.py
+++ b/sugar/presence/presenceservice.py
@@ -71,20 +71,27 @@ class PresenceService(gobject.GObject):
"""
gobject.GObject.__init__(self)
self._objcache = {}
+
+ # Get a connection to the session bus
+ self._bus = dbus.SessionBus()
+ self._bus.add_signal_receiver(self._name_owner_changed_cb,
+ signal_name="NameOwnerChanged",
+ dbus_interface="org.freedesktop.DBus")
+
# attempt to load the interface to the service...
self._allow_offline_iface = allow_offline_iface
self._get_ps()
-
- _bus_ = None
- def _get_bus(self):
- """Retrieve dbus session-bus or create new"""
- if not self._bus_:
- self._bus_ = dbus.SessionBus()
- return self._bus_
- _bus = property(
- _get_bus, None, None,
- """DBUS SessionBus object for user-local communications"""
- )
+
+ def _name_owner_changed_cb(self, name, old, new):
+ if name != DBUS_SERVICE:
+ return
+ if (old and len(old)) and (not new and not len(new)):
+ # PS went away, clear out PS dbus service wrapper
+ self._ps_ = None
+ elif (not old and not len(old)) and (new and len(new)):
+ # PS started up
+ self._get_ps()
+
_ps_ = None
def _get_ps(self):
"""Retrieve dbus interface to PresenceService