diff options
author | Manuel 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) |
commit | c4a59061db7b2eebaa4d18a4b903923f530a60d6 (patch) | |
tree | 7ed9cc68b5ad39cf31923f647ba6ea3fd55ea1b7 | |
parent | c558285618cf6dc2c72d70ca373a4aa69f901325 (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.py | 48 |
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): |