Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <mpg@redhat.com>2007-03-12 13:05:50 (GMT)
committer Marco Pesenti Gritti <mpg@redhat.com>2007-03-12 13:05:50 (GMT)
commita3a6d0cd8945c859dcebb3c6437f16ebd2f98975 (patch)
treee9ee7f4d71191e7a518bff3e76c1a1570bce3206 /shell
parentc4fbb41bcd0bb5c9c14aca126deae93606c5cd46 (diff)
Implement mouse logic
Diffstat (limited to 'shell')
-rw-r--r--shell/view/frame/frame.py56
1 files changed, 41 insertions, 15 deletions
diff --git a/shell/view/frame/frame.py b/shell/view/frame/frame.py
index 5f1ab85..85ea5d4 100644
--- a/shell/view/frame/frame.py
+++ b/shell/view/frame/frame.py
@@ -33,6 +33,8 @@ from sugar.graphics import units
STATE_SHOWING = 0
STATE_HIDING = 1
+_FRAME_HIDING_DELAY = 500
+
class _Animation(animator.Animation):
def __init__(self, frame, end):
start = frame.get_current_position()
@@ -42,6 +44,32 @@ class _Animation(animator.Animation):
def next_frame(self, current):
self._frame.move(current)
+class _MouseListener(object):
+ def __init__(self, frame):
+ self._frame = frame
+ self._hide_sid = 0
+
+ def mouse_enter(self):
+ self._show_frame()
+
+ def mouse_leave(self):
+ self._hide_frame()
+
+ def _show_frame(self):
+ if self._hide_sid != 0:
+ gobject.source_remove(self._hide_sid)
+ self._frame.show()
+
+ def _hide_frame_timeout_cb(self):
+ self._frame.hide()
+ return False
+
+ def _hide_frame(self):
+ if self._hide_sid != 0:
+ gobject.source_remove(self._hide_sid)
+ self._hide_sid = gobject.timeout_add(
+ _FRAME_HIDING_DELAY, self._hide_frame_timeout_cb)
+
class _KeyListener(object):
def __init__(self, frame):
self._frame = frame
@@ -83,9 +111,7 @@ class Frame(object):
self._state = STATE_HIDING
self._event_frame = EventFrame()
- self._event_frame.connect('enter-edge', self._enter_edge_cb)
self._event_frame.connect('enter-corner', self._enter_corner_cb)
- self._event_frame.connect('leave', self._event_frame_leave_cb)
self._event_frame.show()
self._popup_context = FramePopupContext()
@@ -106,6 +132,7 @@ class Frame(object):
screen.connect('size-changed', self._size_changed_cb)
self._key_listener = _KeyListener(self)
+ self._mouse_listener = _MouseListener(self)
def get_popup_context(self):
return self._popup_context
@@ -211,6 +238,8 @@ class Frame(object):
anim.add(_Animation(self, 0.0))
anim.start()
+ self._event_frame.show()
+
self._state = STATE_HIDING
def show(self):
@@ -221,37 +250,34 @@ class Frame(object):
anim.add(_Animation(self, 1.0))
anim.start()
+ self._event_frame.hide()
+
self._state = STATE_SHOWING
def _size_changed_cb(self, screen):
self._update_position()
def _popup_context_activated_cb(self, popup_context):
- pass
+ self._mouse_listener.mouse_enter()
def _popup_context_deactivated_cb(self, popup_context):
- pass
+ self._mouse_listener.mouse_leave()
def _enter_notify_cb(self, window, event):
- pass
+ self._mouse_listener.mouse_enter()
def _leave_notify_cb(self, window, event):
- pass
+ if not self._popup_context.is_active():
+ self._mouse_listener.mouse_leave()
def _drag_motion_cb(self, window, context, x, y, time):
- pass
+ self._mouse_listener.mouse_enter()
def _drag_leave_cb(self, window, drag_context, timestamp):
- pass
+ self._mouse_listener.mouse_leave()
- def _enter_edge_cb(self, event_frame):
- pass
-
def _enter_corner_cb(self, event_frame):
- pass
-
- def _event_frame_leave_cb(self, event_frame):
- pass
+ self._mouse_listener.mouse_enter()
def notify_key_press(self):
self._key_listener.key_press()