diff options
author | Marco Pesenti Gritti <mpg@redhat.com> | 2007-03-12 15:57:52 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <mpg@redhat.com> | 2007-03-12 15:57:52 (GMT) |
commit | ce91f2df995fa07b7dd6a2f5777e7785e2c08d48 (patch) | |
tree | bc41aeec66efd4b8fb6c07e84e96667a1673ac4d | |
parent | 978965bfa8e042b9daa2b0d4a5bc28a758a355a6 (diff) |
Force hiding when running an activity even if the user hover the frame again.
-rw-r--r-- | shell/view/frame/frame.py | 15 | ||||
-rw-r--r-- | sugar/graphics/animator.py | 15 |
2 files changed, 24 insertions, 6 deletions
diff --git a/shell/view/frame/frame.py b/shell/view/frame/frame.py index de375e6..b21a223 100644 --- a/shell/view/frame/frame.py +++ b/shell/view/frame/frame.py @@ -36,7 +36,7 @@ STATE_HIDING = 1 MODE_NONE = 0 MODE_MOUSE = 1 MODE_KEYBOARD = 2 -MODE_NOT_INTERACTIVE = 3 +MODE_FORCE = 3 _FRAME_HIDING_DELAY = 500 @@ -152,7 +152,7 @@ class Frame(object): self._key_listener = _KeyListener(self) self._mouse_listener = _MouseListener(self) - def hide(self): + def hide(self, force=False): if self.state == STATE_HIDING: return if self._animator: @@ -165,7 +165,11 @@ class Frame(object): self._event_frame.show() self.state = STATE_HIDING - self.mode = MODE_NONE + if force: + self.mode = MODE_NONE + else: + self.mode = MODE_FORCE + self._animator.connect('completed', self._hide_completed_cb) def show(self): if self.state == STATE_SHOWING: @@ -180,7 +184,7 @@ class Frame(object): self._event_frame.hide() self.state = STATE_SHOWING - self.mode = MODE_NOT_INTERACTIVE + self.mode = MODE_FORCE def get_popup_context(self): return self._popup_context @@ -281,6 +285,9 @@ class Frame(object): screen_w, 0, screen_w - units.grid_to_pixels(1), 0) + def _hide_completed_cb(self, animator): + self.mode = MODE_NONE + def _size_changed_cb(self, screen): self._update_position() diff --git a/sugar/graphics/animator.py b/sugar/graphics/animator.py index def823c..cf6ef27 100644 --- a/sugar/graphics/animator.py +++ b/sugar/graphics/animator.py @@ -21,8 +21,14 @@ import gobject EASE_OUT_EXPO = 1 -class Animator(object): +class Animator(gobject.GObject): + __gsignals__ = { + 'completed': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, ([])), + } + def __init__(self, time, fps, easing=EASE_OUT_EXPO): + gobject.GObject.__init__(self) self._animations = [] self._time = time self._interval = 1.0 / fps @@ -44,13 +50,18 @@ class Animator(object): if self._timeout_sid: gobject.source_remove(self._timeout_sid) self._timeout_sid = 0 + self.emit('completed') def _next_frame_cb(self): current_time = min (self._time, time.time() - self._start_time) for animation in self._animations: animation.do_frame(current_time, self._time, self._easing) - return (current_time != self._time) + if current_time == self._time: + self.stop() + return False + else: + return True class Animation(object): def __init__(self, start, end): |