Cleanup browser model service on destroy.
Remove the activity service even if the owner is gone.
This commit is contained in:
parent
d65e8b88e7
commit
53f7cc1f34
@ -25,6 +25,7 @@ class BrowserActivity(Activity):
|
|||||||
self._model = None
|
self._model = None
|
||||||
|
|
||||||
self.set_title("Web Page")
|
self.set_title("Web Page")
|
||||||
|
self.connect('destroy', self._destroy_cb)
|
||||||
|
|
||||||
vbox = gtk.VBox()
|
vbox = gtk.VBox()
|
||||||
|
|
||||||
@ -123,3 +124,7 @@ class BrowserActivity(Activity):
|
|||||||
self._notif_bar.set_action('goto_shared_location', 'Go There')
|
self._notif_bar.set_action('goto_shared_location', 'Go There')
|
||||||
self._notif_bar.set_icon('stock_right')
|
self._notif_bar.set_icon('stock_right')
|
||||||
self._notif_bar.show()
|
self._notif_bar.show()
|
||||||
|
|
||||||
|
def _destroy_cb(self, window):
|
||||||
|
if self._model:
|
||||||
|
self._model.shutdown()
|
||||||
|
@ -536,6 +536,9 @@ class PresenceService(object):
|
|||||||
if not service:
|
if not service:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
self._dbus_helper.ServiceDisappeared(service.object_path())
|
||||||
|
self._handle_remove_activity_service(service)
|
||||||
|
|
||||||
# Decompose service name if we can
|
# Decompose service name if we can
|
||||||
(actid, buddy_name) = Service.decompose_service_name(full_name)
|
(actid, buddy_name) = Service.decompose_service_name(full_name)
|
||||||
|
|
||||||
@ -545,10 +548,8 @@ class PresenceService(object):
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
buddy.remove_service(service)
|
|
||||||
self._dbus_helper.ServiceDisappeared(service.object_path())
|
|
||||||
self._handle_remove_activity_service(service)
|
|
||||||
if not buddy.is_valid():
|
if not buddy.is_valid():
|
||||||
|
buddy.remove_service(service)
|
||||||
self._dbus_helper.BuddyDisappeared(buddy.object_path())
|
self._dbus_helper.BuddyDisappeared(buddy.object_path())
|
||||||
del self._buddies[buddy_name]
|
del self._buddies[buddy_name]
|
||||||
key = (service.get_full_name(), service.get_type())
|
key = (service.get_full_name(), service.get_type())
|
||||||
|
@ -68,8 +68,7 @@ class MeshGroup(goocanvas.Group):
|
|||||||
|
|
||||||
self._activities[item.get_id()] = item
|
self._activities[item.get_id()] = item
|
||||||
|
|
||||||
def _activity_disappeared_cb(self, activity):
|
def _activity_disappeared_cb(self, pservice, activity):
|
||||||
print 'remove'
|
|
||||||
if self._activities.has_key(activity.get_id()):
|
if self._activities.has_key(activity.get_id()):
|
||||||
self.remove_child(self._activities[activity.get_id()])
|
self.remove_child(self._activities[activity.get_id()])
|
||||||
del self._activities[activity.get_id()]
|
del self._activities[activity.get_id()]
|
||||||
|
@ -37,9 +37,9 @@ class LocalModel(AbstractModel):
|
|||||||
self._notifier.notify(key)
|
self._notifier.notify(key)
|
||||||
|
|
||||||
def _setup_service(self):
|
def _setup_service(self):
|
||||||
service = self._pservice.share_activity(self._activity,
|
self._service = self._pservice.share_activity(
|
||||||
stype = LocalModel.SERVICE_TYPE)
|
self._activity, stype = LocalModel.SERVICE_TYPE)
|
||||||
self._setup_server(service)
|
self._setup_server(self._service)
|
||||||
|
|
||||||
# FIXME this is duplicated with StreamReader
|
# FIXME this is duplicated with StreamReader
|
||||||
def _setup_server(self, service):
|
def _setup_server(self, service):
|
||||||
@ -47,3 +47,6 @@ class LocalModel(AbstractModel):
|
|||||||
logging.debug('Start model server on port %d' % (port))
|
logging.debug('Start model server on port %d' % (port))
|
||||||
p2p_server = network.GlibXMLRPCServer(("", port))
|
p2p_server = network.GlibXMLRPCServer(("", port))
|
||||||
p2p_server.register_instance(ModelRequestHandler(self))
|
p2p_server.register_instance(ModelRequestHandler(self))
|
||||||
|
|
||||||
|
def shutdown(self):
|
||||||
|
self._pservice.unregister_service(self._service)
|
||||||
|
Loading…
Reference in New Issue
Block a user