diff --git a/services/presence2/buddy.py b/services/presence2/buddy.py index e010d19c..622fcf98 100644 --- a/services/presence2/buddy.py +++ b/services/presence2/buddy.py @@ -48,7 +48,7 @@ class Buddy(dbus.service.Object): self._icon_cache = icon_cache - self._handle = handle + self.handles = {} # tp client -> handle self._nick_name = None self._color = None diff --git a/services/presence2/presenceservice.py b/services/presence2/presenceservice.py index 2692f1aa..fa115a80 100644 --- a/services/presence2/presenceservice.py +++ b/services/presence2/presenceservice.py @@ -80,6 +80,7 @@ class PresenceService(dbus.service.Object): pass def _contact_online(self, tp, handle, key): + new_buddy = False buddy = self._buddies.get(key) if not buddy: @@ -89,21 +90,30 @@ class PresenceService(dbus.service.Object): buddy.set_key(key) print "create buddy" self._buddies[key] = buddy + new_buddy = True buddies = self._handles[tp] buddies[handle] = buddy - self.BuddyAppeared(buddy.object_path()) + # store the handle of the buddy for this CM + buddy.handles[tp] = handle + + if new_buddy: + self.BuddyAppeared(buddy.object_path()) def _contact_offline(self, tp, handle): buddy = self._handles[tp].pop(handle) key = buddy.get_key() - # TODO: check if we don't see this buddy using the other CM - self._buddies.pop(key) - print "remove buddy" + # the handle of the buddy for this CM is not valid anymore + buddy.handles.pop(tp) - self.BuddyDisappeared(buddy.object_path()) + if not buddy.handles: + # we remove the last handle of the buddy, so we don't see + # it anymore. + self._buddies.pop(key) + print "remove buddy" + self.BuddyDisappeared(buddy.object_path()) def _get_next_object_id(self): """Increment and return the object ID counter.""" diff --git a/services/presence2/server_plugin.py b/services/presence2/server_plugin.py index 09ad1573..06d15873 100644 --- a/services/presence2/server_plugin.py +++ b/services/presence2/server_plugin.py @@ -190,7 +190,6 @@ class ServerPlugin(gobject.GObject): not self._ever_connected: # Hmm; probably aren't registered on the server, try reconnecting # and registering - self.disconnect() del self._conn self._conn = self._init_connection(register=True) self.start() diff --git a/sugar/graphics/entry.py b/sugar/graphics/entry.py index 02e601e1..def08c9e 100644 --- a/sugar/graphics/entry.py +++ b/sugar/graphics/entry.py @@ -39,7 +39,7 @@ class Entry(hippo.CanvasBox, hippo.CanvasItem): 'button-activated': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([int])) } - def __init__(self): + def __init__(self, text=''): hippo.CanvasBox.__init__(self, orientation=hippo.ORIENTATION_HORIZONTAL) self.props.yalign = hippo.ALIGNMENT_CENTER @@ -51,6 +51,7 @@ class Entry(hippo.CanvasBox, hippo.CanvasItem): self._entry = self.create_entry() self._entry.props.has_frame = False + self._entry.props.text = text self._update_colors(focused=False) self._entry.modify_text(gtk.STATE_SELECTED, color.BLACK.get_gdk_color()) diff --git a/sugar/graphics/font.py b/sugar/graphics/font.py index 023dc372..aa4f2dcb 100644 --- a/sugar/graphics/font.py +++ b/sugar/graphics/font.py @@ -3,7 +3,8 @@ import pango from sugar.graphics import units _system_fonts = { - 'default' : 'Bitstream Vera Sans %d' % units.points_to_pixels(9) + 'default' : 'Bitstream Vera Sans %d' % units.points_to_pixels(9), + 'default-bold' : 'Bitstream Vera Sans bold %d' % units.points_to_pixels(9) } class Font(object): @@ -21,3 +22,4 @@ class SystemFont(Font): Font.__init__(self, _system_fonts[font_id]) DEFAULT = SystemFont('default') +DEFAULT_BOLD = SystemFont('default-bold') diff --git a/sugar/graphics/toolbar.py b/sugar/graphics/toolbar.py index 5cd0f65d..3f24afe6 100644 --- a/sugar/graphics/toolbar.py +++ b/sugar/graphics/toolbar.py @@ -1,9 +1,14 @@ import gobject import hippo +from sugar.graphics import units + class Toolbar(hippo.CanvasBox): __gtype_name__ = 'Toolbar' def __init__(self, orientation=hippo.ORIENTATION_HORIZONTAL): hippo.CanvasBox.__init__(self, orientation=orientation, - background_color=0x414141ff) + background_color=0x414141ff, + box_height=units.grid_to_pixels(1), + spacing=units.points_to_pixels(5) +)