Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManuel Quiñones <manuq@laptop.org>2012-10-03 20:32:50 (GMT)
committer Manuel Quiñones <manuq@laptop.org>2012-10-05 13:02:37 (GMT)
commitc4a59061db7b2eebaa4d18a4b903923f530a60d6 (patch)
tree7ed9cc68b5ad39cf31923f647ba6ea3fd55ea1b7
parentc558285618cf6dc2c72d70ca373a4aa69f901325 (diff)
Home view: add active state to activity icons for tap and click feedback
- Set the activity icon state to 'active' when it is pressed. This state can then be styled in the theme. - Set the activity icon state to 'prelight' when its palette pops up. - Add a background render to the draw method to make the background of the icon styleable. We have to connect to the palette invoker 'right-click' event and reset the state in the palette 'popdown' event because the invoker captures the mouse events and does not propagate them. See documentation in popup method of _PaletteMenuWidget in toolkit palettewindow.py for reference. Signed-off-by: Manuel Quiñones <manuq@laptop.org> Acked-by: Simon Schampijer <simon@laptop.org>
-rw-r--r--src/jarabe/desktop/favoritesview.py48
1 files changed, 44 insertions, 4 deletions
diff --git a/src/jarabe/desktop/favoritesview.py b/src/jarabe/desktop/favoritesview.py
index b727e0e..4600341 100644
--- a/src/jarabe/desktop/favoritesview.py
+++ b/src/jarabe/desktop/favoritesview.py
@@ -361,8 +361,14 @@ class ActivityIcon(EventIcon):
self._journal_entries = []
self._resume_mode = True
+ self._prelight_state = False
+ self._active_state = False
+
self.connect('enter-notify-event', self.__enter_notify_event_cb)
self.connect('leave-notify-event', self.__leave_notify_event_cb)
+ self.connect('button-press-event', self.__button_press_event_cb)
+ self.palette_invoker.connect('right-click',
+ self.__invoker_right_click_cb)
self.connect_after('button-release-event',
self.__button_release_event_cb)
@@ -424,6 +430,8 @@ class ActivityIcon(EventIcon):
palette = FavoritePalette(self._activity_info, self._journal_entries)
palette.connect('activate', self.__palette_activate_cb)
palette.connect('entry-activate', self.__palette_entry_activate_cb)
+ palette.connect('popup', self.__palette_popup_cb)
+ palette.connect('popdown', self.__palette_popdown_cb)
return palette
def __palette_activate_cb(self, palette):
@@ -432,21 +440,47 @@ class ActivityIcon(EventIcon):
def __palette_entry_activate_cb(self, palette, metadata):
self._resume(metadata)
+ def __palette_popup_cb(self, palette):
+ self._prelight_state = Gtk.StateFlags.PRELIGHT
+ self._active_state = False
+ self._update_states()
+
+ def __palette_popdown_cb(self, palette):
+ self._prelight_state = False
+ self._active_state = False
+ self._update_states()
+
def __enter_notify_event_cb(self, icon, event):
- self.set_state(Gtk.StateFlags.PRELIGHT)
+ self._prelight_state = Gtk.StateFlags.PRELIGHT
+ self._update_states()
def __leave_notify_event_cb(self, icon, event):
- self.set_state(Gtk.StateFlags.NORMAL)
+ if self.palette.is_up():
+ return
+ self._prelight_state = False
+ self._update_states()
- def do_draw(self, cr):
- EventIcon.do_draw(self, cr)
+ def __button_press_event_cb(self, icon, event):
+ self._active_state = Gtk.StateFlags.ACTIVE
+ self._update_states()
+ def _update_states(self):
+ state = self._active_state if self._active_state \
+ else self._prelight_state
+ self.set_state(state)
+
+ def do_draw(self, cr):
allocation = self.get_allocation()
context = self.get_style_context()
+ Gtk.render_background(context, cr, 0, 0,
+ allocation.width,
+ allocation.height)
Gtk.render_frame(context, cr, 0, 0,
allocation.width,
allocation.height)
+ EventIcon.do_draw(self, cr)
+
def do_get_preferred_width(self):
width = EventIcon.do_get_preferred_width(self)[0]
width += ActivityIcon._BORDER_WIDTH * 2
@@ -457,7 +491,13 @@ class ActivityIcon(EventIcon):
height += ActivityIcon._BORDER_WIDTH * 2
return (height, height)
+ def __invoker_right_click_cb(self, invoker):
+ self._active_state = False
+ self._update_states()
+
def __button_release_event_cb(self, icon, event):
+ self._active_state = False
+ self._update_states()
self._activate()
def _resume(self, journal_entry):