[Sugar-devel] [PATCH sugar] Frame: new behavior for revealing/hiding the Frame with the mouse
Manuel Quiñones
manuq at laptop.org
Thu Aug 16 18:48:04 EDT 2012
I've tested an earlier patch for this and now I reviewed it. This is
a much more solid interaction with the frame, and less error prone.
All looks good. Please commit.
2012/8/16 Simon Schampijer <simon at schampijer.de>:
> After discussing with Gary I prepared this patch to change the
> interaction with the Frame in the following manner:
>
> - you can reveal the Frame by going with the cursor in one of the
> hot corners
>
> - you can hide the Frame by going with the cursor in one of the
> hot corners (and the Frame is visible)
>
> - the Frame is not hidden on mouse out (leaving the Frame)
>
> - (as before) you can hide/reveal the Frame with the designated keys
>
> - the Frame is hidden when you switch between activities
> (todo: hide as well when resume in the Palette is clicked)
>
> - the Frame is hidden when a zoom level is selected
>
> - drag & drop is currently not working, SL #3811
>
> Signed-off-by: Simon Schampijer <simon at laptop.org>
Acked-by: Manuel Quiñones <manuq at laptop.org>
> ---
> src/jarabe/frame/activitiestray.py | 2 ++
> src/jarabe/frame/frame.py | 51 ++++++++++----------------------------
> src/jarabe/frame/zoomtoolbar.py | 6 +++++
> 3 files changed, 21 insertions(+), 38 deletions(-)
>
> diff --git a/src/jarabe/frame/activitiestray.py b/src/jarabe/frame/activitiestray.py
> index 9590bce..d386b3b 100644
> --- a/src/jarabe/frame/activitiestray.py
> +++ b/src/jarabe/frame/activitiestray.py
> @@ -287,6 +287,8 @@ class ActivitiesTray(HTray):
> window = home_activity.get_window()
> if window:
> window.activate(gtk.get_current_event_time())
> + frame = jarabe.frame.get_view()
> + frame.hide()
>
> def __remove_invite_cb(self, icon, invite):
> self._invites.remove_invite(invite)
> diff --git a/src/jarabe/frame/frame.py b/src/jarabe/frame/frame.py
> index 7407e18..9c0129f 100644
> --- a/src/jarabe/frame/frame.py
> +++ b/src/jarabe/frame/frame.py
> @@ -57,29 +57,12 @@ class _Animation(animator.Animation):
> 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):
> - if self._frame.mode == Frame.MODE_MOUSE:
> - self._hide_frame()
> -
> - def _show_frame(self):
> - if self._hide_sid != 0:
> - gobject.source_remove(self._hide_sid)
> - self._frame.show(Frame.MODE_MOUSE)
> -
> - 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)
> + if self._frame.visible:
> + self._frame.hide()
> + else:
> + self._frame.show()
>
>
> class _KeyListener(object):
> @@ -88,23 +71,16 @@ class _KeyListener(object):
>
> def key_press(self):
> if self._frame.visible:
> - if self._frame.mode == Frame.MODE_KEYBOARD:
> - self._frame.hide()
> + self._frame.hide()
> else:
> - self._frame.show(Frame.MODE_KEYBOARD)
> + self._frame.show()
>
>
> class Frame(object):
> - MODE_MOUSE = 0
> - MODE_KEYBOARD = 1
> - MODE_NON_INTERACTIVE = 2
> -
> def __init__(self):
> logging.debug('STARTUP: Loading the frame')
> - self.mode = None
>
> self._palette_group = palettegroup.get_group('frame')
> - self._palette_group.connect('popdown', self._palette_group_popdown_cb)
>
> self._left_panel = None
> self._right_panel = None
> @@ -143,6 +119,9 @@ class Frame(object):
> visible = property(is_visible, None)
>
> def hide(self):
> + if not self.visible:
> + return
> +
> if self._animator:
> self._animator.stop()
>
> @@ -152,14 +131,12 @@ class Frame(object):
>
> self.mode = None
>
> - def show(self, mode):
> + def show(self):
> if self.visible:
> return
> if self._animator:
> self._animator.stop()
>
> - self.mode = mode
> -
> self._animator = animator.Animator(0.5)
> self._animator.add(_Animation(self, 1.0))
> self._animator.start()
> @@ -180,6 +157,7 @@ class Frame(object):
> zoom_toolbar = ZoomToolbar()
> panel.append(zoom_toolbar, expand=False)
> zoom_toolbar.show()
> + zoom_toolbar.connect('level-clicked', self._level_clicked_cb)
>
> activities_tray = ActivitiesTray()
> panel.append(activities_tray)
> @@ -208,7 +186,6 @@ class Frame(object):
> def _create_left_panel(self):
> panel = ClipboardPanelWindow(self, gtk.POS_LEFT)
>
> - self._connect_to_panel(panel)
> panel.connect('drag-motion', self._drag_motion_cb)
> panel.connect('drag-leave', self._drag_leave_cb)
>
> @@ -216,7 +193,6 @@ class Frame(object):
>
> def _create_panel(self, orientation):
> panel = FrameWindow(orientation)
> - self._connect_to_panel(panel)
>
> return panel
>
> @@ -230,9 +206,8 @@ class Frame(object):
> if not panel.props.visible:
> panel.show()
>
> - def _connect_to_panel(self, panel):
> - panel.connect('enter-notify-event', self._enter_notify_cb)
> - panel.connect('leave-notify-event', self._leave_notify_cb)
> + def _level_clicked_cb(self, zoom_toolbar):
> + self.hide()
>
> def _update_position(self):
> screen_h = gtk.gdk.screen_height()
> diff --git a/src/jarabe/frame/zoomtoolbar.py b/src/jarabe/frame/zoomtoolbar.py
> index c28fe1c..b71f4f3 100644
> --- a/src/jarabe/frame/zoomtoolbar.py
> +++ b/src/jarabe/frame/zoomtoolbar.py
> @@ -20,6 +20,7 @@ import logging
>
> import glib
> import gtk
> +import gobject
>
> from sugar.graphics import style
> from sugar.graphics.palette import Palette
> @@ -30,6 +31,10 @@ from jarabe.model import shell
>
>
> class ZoomToolbar(gtk.Toolbar):
> + __gsignals__ = {
> + 'level-clicked': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
> + ([]))
> + }
> def __init__(self):
> gtk.Toolbar.__init__(self)
>
> @@ -76,6 +81,7 @@ class ZoomToolbar(gtk.Toolbar):
> return
>
> shell.get_model().set_zoom_level(level)
> + self.emit('level-clicked')
>
> def __zoom_level_changed_cb(self, **kwargs):
> self._set_zoom_level(kwargs['new_level'])
> --
> 1.7.11.4
>
> _______________________________________________
> Sugar-devel mailing list
> Sugar-devel at lists.sugarlabs.org
> http://lists.sugarlabs.org/listinfo/sugar-devel
--
.. manuq ..
More information about the Sugar-devel
mailing list