Listen on buddy for icon changes

This commit is contained in:
Marco Pesenti Gritti 2006-05-22 16:35:31 -04:00
parent 4fb745e204
commit d5ff67caa5
6 changed files with 21 additions and 22 deletions

View File

@ -582,6 +582,10 @@ class GroupChat(Chat):
gobject.idle_add(self._request_buddy_icon, buddy) gobject.idle_add(self._request_buddy_icon, buddy)
elif action == Group.SERVICE_REMOVED: elif action == Group.SERVICE_REMOVED:
pass 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): def _on_group_presence_event(self, action, buddy):
if buddy.get_nick_name() == self._group.get_owner().get_nick_name(): 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) aniter = self._buddy_list_model.append(None)
self._buddy_list_model.set(aniter, self._buddy_list_model.set(aniter,
self._MODEL_COL_NICK, buddy.get_nick_name(), self._MODEL_COL_NICK, buddy.get_nick_name(),
self._MODEL_COL_ICON, buddy.get_icon_pixbuf(),
self._MODEL_COL_BUDDY, buddy) self._MODEL_COL_BUDDY, buddy)
buddy.connect('icon-changed', self.__buddy_icon_changed_cb)
elif action == Group.BUDDY_LEAVE: elif action == Group.BUDDY_LEAVE:
aniter = self._get_iter_for_buddy(buddy) aniter = self._get_iter_for_buddy(buddy)
if aniter: if aniter:

View File

@ -3,7 +3,7 @@ import os
import pygtk import pygtk
pygtk.require('2.0') pygtk.require('2.0')
import gtk import gtk, gobject
from Service import Service from Service import Service
from sugar import env from sugar import env
@ -20,9 +20,14 @@ def recognize_buddy_service_type(stype):
def get_recognized_buddy_service_types(): def get_recognized_buddy_service_types():
return __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): def __init__(self, service):
gobject.GObject.__init__(self)
self._services = {} self._services = {}
self._services[service.get_type()] = service self._services[service.get_type()] = service
self._nick_name = service.get_name() self._nick_name = service.get_name()
@ -70,6 +75,7 @@ class Buddy(object):
"""Can only set icon for other buddies. The Owner """Can only set icon for other buddies. The Owner
takes care of setting it's own icon.""" takes care of setting it's own icon."""
self._icon = icon self._icon = icon
self.emit('icon-changed')
class Owner(Buddy): class Owner(Buddy):
@ -105,13 +111,3 @@ class Owner(Buddy):
def register(self): def register(self):
self._presence_service.register(self._group) 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

View File

@ -90,10 +90,6 @@ class LocalGroup(Group):
if self._buddies.has_key(name): if self._buddies.has_key(name):
return self._buddies[name] return self._buddies[name]
return None 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): def _add_buddy(self, buddy):
bid = buddy.get_nick_name() bid = buddy.get_nick_name()
@ -134,7 +130,7 @@ class LocalGroup(Group):
if key == 'group_address': if key == 'group_address':
service.set_group_address(value) 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(): if stype in get_recognized_buddy_service_types():
# Service recognized as Buddy services either create a new # Service recognized as Buddy services either create a new
# buddy if one doesn't exist yet, or get added to the existing # buddy if one doesn't exist yet, or get added to the existing

View File

@ -35,12 +35,10 @@ class Service(object):
def is_multicast(self): def is_multicast(self):
return self._group_address != None return self._group_address != None
def register(self, group): def register(self, group):
pannounce = presence.PresenceAnnounce() pannounce = presence.PresenceAnnounce()
if self._group_address: if self._group_address:
pannounce.register_service(self._name, self._port, self._stype, pannounce.register_service(self._name, self._port, self._stype,
group_address = self._group_address) group_address = self._group_address)
else: else:
pannounce.register_service(self._name, self._port, self._stype) pannounce.register_service(self._name, self._port, self._stype)
# Notify the group that we're registering a new service
group.notify_service_registered(self)

View File

@ -69,7 +69,8 @@ class UnicastStreamWriter(UnicastStreamWriterBase):
method = getattr(self._writer, method_name) method = getattr(self._writer, method_name)
return method(*args) return method(*args)
except (socket.error, xmlrpclib.Fault, xmlrpclib.ProtocolError): except (socket.error, xmlrpclib.Fault, xmlrpclib.ProtocolError):
traceback.print_exc() pass
#traceback.print_exc()
return None return None

View File

@ -110,6 +110,10 @@ class Activity(dbus.service.Object):
scaled_pixbuf = pixbuf.scale_simple(16, 16, gtk.gdk.INTERP_BILINEAR) scaled_pixbuf = pixbuf.scale_simple(16, 16, gtk.gdk.INTERP_BILINEAR)
self.activity_set_icon(scaled_pixbuf) self.activity_set_icon(scaled_pixbuf)
@dbus.service.method("com.redhat.Sugar.Activity", \
in_signature="", \
out_signature="")
def lost_focus(self): def lost_focus(self):
self.activity_on_lost_focus() self.activity_on_lost_focus()