[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