[Sugar-devel] [PATCH sugar] Making the buddy icons in the Views reveal the Palette on left click or touch

Simon Schampijer simon at schampijer.de
Wed Aug 15 13:01:36 EDT 2012


The owner icon (in the Home, Group and Neighborhood View) has
no primary action. On left click we agreed to always reveal the
Palette. This will give a better experience for users with a
mouse/trackpad and for those with a touchscreen.

This patch also changes the behavior of the buddy icons that
represent other learners which appear in the Neighborhood
and Group View. Here as well we do not have currently a primary
action. Left click does currently not do anything. We change this
to revealing the Palette on left click now as well.

Signed-off-by: Simon Schampijer <simon at laptop.org>
---
 src/jarabe/desktop/groupbox.py | 11 +++--------
 src/jarabe/desktop/meshbox.py  | 11 ++---------
 src/jarabe/view/buddyicon.py   |  6 ++++++
 3 files changed, 11 insertions(+), 17 deletions(-)

diff --git a/src/jarabe/desktop/groupbox.py b/src/jarabe/desktop/groupbox.py
index 4fcd6c2..8beec90 100644
--- a/src/jarabe/desktop/groupbox.py
+++ b/src/jarabe/desktop/groupbox.py
@@ -21,6 +21,7 @@ import gconf
 from sugar.graphics import style
 from sugar.graphics.xocolor import XoColor
 
+from jarabe.view.buddyicon import BuddyIcon
 from jarabe.view.buddymenu import BuddyMenu
 from jarabe.view.eventicon import EventIcon
 from jarabe.model.buddy import get_owner_instance
@@ -38,15 +39,9 @@ class GroupBox(ViewContainer):
 
         layout = SpreadLayout()
 
-        client = gconf.client_get_default()
-        color = XoColor(client.get_string('/desktop/sugar/user/color'))
-        owner_icon = EventIcon(icon_name='computer-xo', cache=True,
-                               xo_color=color)
         # Round off icon size to an even number to ensure that the icon
-        # is placed evenly in the grid
-        owner_icon.props.pixel_size = style.LARGE_ICON_SIZE & ~1
-        owner_icon.set_palette(BuddyMenu(get_owner_instance()))
-
+        owner_icon = BuddyIcon(get_owner_instance(),
+                               style.LARGE_ICON_SIZE & ~1)
         ViewContainer.__init__(self, layout, owner_icon)
 
         self._friends = {}
diff --git a/src/jarabe/desktop/meshbox.py b/src/jarabe/desktop/meshbox.py
index 1de3779..8ac5047 100644
--- a/src/jarabe/desktop/meshbox.py
+++ b/src/jarabe/desktop/meshbox.py
@@ -410,18 +410,11 @@ class MeshContainer(ViewContainer):
     __gtype_name__ = 'SugarMeshContainer'
 
     def __init__(self):
-
         layout = SpreadLayout()
 
-        client = gconf.client_get_default()
-        color = XoColor(client.get_string('/desktop/sugar/user/color'))
-        owner_icon = EventIcon(icon_name='computer-xo', cache=True,
-                               xo_color=color)
         # Round off icon size to an even number to ensure that the icon
-        # is placed evenly in the grid
-        owner_icon.props.pixel_size = style.STANDARD_ICON_SIZE & ~1
-        owner_icon.set_palette(BuddyMenu(get_owner_instance()))
-
+        owner_icon = BuddyIcon(get_owner_instance(),
+                               style.STANDARD_ICON_SIZE & ~1)
         ViewContainer.__init__(self, layout, owner_icon)
 
 
diff --git a/src/jarabe/view/buddyicon.py b/src/jarabe/view/buddyicon.py
index 663bd92..e84e881 100644
--- a/src/jarabe/view/buddyicon.py
+++ b/src/jarabe/view/buddyicon.py
@@ -15,6 +15,7 @@
 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
 from sugar.graphics import style
+from sugar.graphics.palette import Palette
 
 from jarabe.view.buddymenu import BuddyMenu
 from jarabe.view.eventicon import EventIcon
@@ -33,6 +34,8 @@ class BuddyIcon(EventIcon):
         self._buddy.connect('notify::present', self.__buddy_notify_present_cb)
         self._buddy.connect('notify::color', self.__buddy_notify_color_cb)
 
+        self.connect('button-release-event', self.__button_release_event_cb)
+
         self.palette_invoker.cache_palette = False
 
         self._update_color()
@@ -40,6 +43,9 @@ class BuddyIcon(EventIcon):
     def create_palette(self):
         return BuddyMenu(self._buddy)
 
+    def __button_release_event_cb(self, icon, event):
+        self.props.palette.popup(immediate=True, state=Palette.SECONDARY)
+
     def __buddy_notify_present_cb(self, buddy, pspec):
         # Update the icon's color when the buddy comes and goes
         self._update_color()
-- 
1.7.11.4



More information about the Sugar-devel mailing list