Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--shell/view/frame/frame.py15
-rw-r--r--sugar/graphics/animator.py15
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):