diff --git a/sugar/chat/chat.py b/sugar/chat/chat.py index b229dbba..6e246eac 100755 --- a/sugar/chat/chat.py +++ b/sugar/chat/chat.py @@ -582,6 +582,10 @@ class GroupChat(Chat): gobject.idle_add(self._request_buddy_icon, buddy) elif action == Group.SERVICE_REMOVED: pass + + def __buddy_icon_changed_cb(self, buddy): + it = self._get_iter_for_buddy(buddy) + self._buddy_list_model.set(it, self._MODEL_COL_ICON, buddy.get_icon_pixbuf()) def _on_group_presence_event(self, action, buddy): if buddy.get_nick_name() == self._group.get_owner().get_nick_name(): @@ -591,8 +595,8 @@ class GroupChat(Chat): aniter = self._buddy_list_model.append(None) self._buddy_list_model.set(aniter, self._MODEL_COL_NICK, buddy.get_nick_name(), - self._MODEL_COL_ICON, buddy.get_icon_pixbuf(), self._MODEL_COL_BUDDY, buddy) + buddy.connect('icon-changed', self.__buddy_icon_changed_cb) elif action == Group.BUDDY_LEAVE: aniter = self._get_iter_for_buddy(buddy) if aniter: diff --git a/sugar/p2p/Buddy.py b/sugar/p2p/Buddy.py index aa7774b3..6847dfb1 100644 --- a/sugar/p2p/Buddy.py +++ b/sugar/p2p/Buddy.py @@ -3,7 +3,7 @@ import os import pygtk pygtk.require('2.0') -import gtk +import gtk, gobject from Service import Service from sugar import env @@ -20,9 +20,14 @@ def recognize_buddy_service_type(stype): def get_recognized_buddy_service_types(): return __buddy_service_types[:] +class Buddy(gobject.GObject): + __gsignals__ = { + 'icon-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([])) + } -class Buddy(object): def __init__(self, service): + gobject.GObject.__init__(self) self._services = {} self._services[service.get_type()] = service self._nick_name = service.get_name() @@ -70,6 +75,7 @@ class Buddy(object): """Can only set icon for other buddies. The Owner takes care of setting it's own icon.""" self._icon = icon + self.emit('icon-changed') class Owner(Buddy): @@ -105,13 +111,3 @@ class Owner(Buddy): def register(self): self._presence_service.register(self._group) - - def notify_service_registered(self, service): - """New services registered in our group are automatically owned - by us.""" - self._services[service.get_type()] = service - - def add_service(self, service): - """Do nothing here, since all services we need to know about - are registered with us by our group.""" - pass diff --git a/sugar/p2p/Group.py b/sugar/p2p/Group.py index c3d7d6d6..48e6a290 100644 --- a/sugar/p2p/Group.py +++ b/sugar/p2p/Group.py @@ -90,10 +90,6 @@ class LocalGroup(Group): if self._buddies.has_key(name): return self._buddies[name] return None - - def notify_service_registered(self, service): - """A new service is automatically owned by the owner of this group.""" - self._owner.notify_service_registered(service) def _add_buddy(self, buddy): bid = buddy.get_nick_name() @@ -134,7 +130,7 @@ class LocalGroup(Group): if key == 'group_address': service.set_group_address(value) - #print "ServiceResolved: name=%s, stype=%s, port=%s, address=%s" % (name, stype, port, address) + # print "ServiceResolved: name=%s, stype=%s, port=%s, address=%s" % (name, stype, port, address) if stype in get_recognized_buddy_service_types(): # Service recognized as Buddy services either create a new # buddy if one doesn't exist yet, or get added to the existing diff --git a/sugar/p2p/Service.py b/sugar/p2p/Service.py index 8bc73f71..2fa102d2 100644 --- a/sugar/p2p/Service.py +++ b/sugar/p2p/Service.py @@ -35,12 +35,10 @@ class Service(object): def is_multicast(self): return self._group_address != None - def register(self, group): + def register(self, group): pannounce = presence.PresenceAnnounce() if self._group_address: pannounce.register_service(self._name, self._port, self._stype, group_address = self._group_address) else: pannounce.register_service(self._name, self._port, self._stype) - # Notify the group that we're registering a new service - group.notify_service_registered(self) diff --git a/sugar/p2p/Stream.py b/sugar/p2p/Stream.py index 2467f5a2..ef95d602 100644 --- a/sugar/p2p/Stream.py +++ b/sugar/p2p/Stream.py @@ -69,7 +69,8 @@ class UnicastStreamWriter(UnicastStreamWriterBase): method = getattr(self._writer, method_name) return method(*args) except (socket.error, xmlrpclib.Fault, xmlrpclib.ProtocolError): - traceback.print_exc() + pass + #traceback.print_exc() return None diff --git a/sugar/shell/activity.py b/sugar/shell/activity.py index d15f1b18..f7e59093 100644 --- a/sugar/shell/activity.py +++ b/sugar/shell/activity.py @@ -110,6 +110,10 @@ class Activity(dbus.service.Object): scaled_pixbuf = pixbuf.scale_simple(16, 16, gtk.gdk.INTERP_BILINEAR) self.activity_set_icon(scaled_pixbuf) + @dbus.service.method("com.redhat.Sugar.Activity", \ + in_signature="", \ + out_signature="") + def lost_focus(self): self.activity_on_lost_focus()