[sugar] [PATCH] #447: grab/scroll key

pgf at laptop.org pgf
Sun Jul 13 11:20:33 EDT 2008


brian wrote:
 > Brilliant work, Erik! I had a chance to play with your first working
 > hand scroll, and it's beyond explanation how fun it is to be able to
 > scroll around using the touchpad without aiming for a gtkScrollBar.
 > 
 > For all to consider: there are two grab buttons. What if one tended to
 > grab + move *objects*, and the other grabs + moves
 > *scenes/backgrounds*? From what I've heard, kids tend to have a hard
 > time left-clicking and dragging with their same hand (as with the
 > touchpad). 

adults too.  recently while demoing one of the tamtam's, it was
startling to see how much click-and-dragging was necessary (e.g.,
for a volume slider).  i suppose that would quickly become a two-handed
operation.  and i have no idea how or whether the grab buttons could
help this.  they probably can't.

paul

 > So, for applications like Browse, both grab buttons could
 > still just scroll up/down. But for graphical editors (e.g., layout
 > programs, Physics, Model, anything with a scene and objects), this UI
 > behavior may be a real time saver and fun to use. This would require
 > giving applications the ability to process events from these two
 > scroll buttons in a way that identifies them separately.
 > 
 > Bravo, sir,
 > Brian
 > 
 > On Thu, Jul 10, 2008 at 2:39 AM, Erik Garrison <erik at laptop.org> wrote:
 > > Sugar devs:
 > >
 > > This is a copy of my bug report for #447.  I have completed a first pass
 > > of the grab key implementation.
 > >
 > > -Erik
 > >
 > >
 > > Summary:
 > >
 > > I used the grab keys to convert the touchpad into a virtual
 > > mouse scrollwheel. Holding down the grab key and moving the mouse a
 > > small number pixels causes a fake mouse button 4/5/6/7 press, depending
 > > on the direction of motion. This approach works in all applications
 > > which support mouse scroll buttons.
 > >
 > > Patches:
 > >
 > > The attached patch to sugar-toolkit adds glib/C-side hooks to grab an
 > > ungrab the mouse, and pass motion-notify events to the python side of
 > > the Sugar shell. I have packaged this patch in an rpm which should be
 > > installable on an XO running a recent joyride (tested on joyride-2123).
 > >
 > > (RPMS: tested but slightly older git snapshot:
 > > 
 > http://dev.laptop.org/~erik/rpms/sugar-toolkit-debuginfo-0.81.5-4.20080705gitab8
 > c054dfb.fc9.i386.rpm
 > > or, untested but slightly newer git snapshot:
 > > http://dev.laptop.org/~erik/rpms/sugar-toolkit-0.81.6-1.fc9.i386.rpm)
 > >
 > > The attached patch to sugar (specifically keyhandler.py) adds the
 > > python-side hooks required to enable the grab/scroll button
 > > functionality.
 > >
 > > The patches work in the following manner:
 > >
 > >    When the left or right grab buttons are pressed, XGrabPointer is
 > >    called. Subsequently, we capture all of the motion-notify events
 > >    which occur when the user moves the mouse, and each event hits
 > >    KeyHandler._motion_notify_cb() with the coordinates of the mouse.
 > >    After we move N pixels (currently 10) we issue a fake mouse scroll
 > >    button press corresponding to the direction of motion of the mouse
 > >    (4/5/6/7). To issue the fake button press I have found it is
 > >    necessary to ungrab the mouse, issue the press, and then re-grab.
 > >
 > > Known issues:
 > >
 > >    In some cases key-releases are not registered. This is problematic
 > >    because without the release signal the mouse grabbing does not
 > >    stop and Sugar becomes entirely unusable. I have not been able to
 > >    establish why, but have noticed that hitting the journal view key
 > >    after Sugar startup before any of the other special keys
 > >    (registered in keyhandler.py) tends to resolve the issue for the
 > >    Super_L and Super_R keys (the grab buttons).
 > >
 > >    The mouse still scrolls around the screen, and the cursor is
 > >    visible during the grab. Solution: Hide the mouse; When a grab key
 > >    press is registered, hide the mouse by setting the cursor pixmap
 > >    to a blank map (and set it back when the grab key release is
 > >    registered).
 > >
 > >    Eventually, after scrolling in one direction, the mouse can move
 > >    out of or to the edge of the scrolling window and the scrolling
 > >    stops. Solution: Every time we issue a fake button press, warp the
 > >    mouse back to the position it was at when we first pressed the
 > >    grab key.
 > >
 > >
 > >
 > > _______________________________________________
 > > Sugar mailing list
 > > Sugar at lists.laptop.org
 > > http://lists.laptop.org/listinfo/sugar
 > >
 > >
 > _______________________________________________
 > Sugar mailing list
 > Sugar at lists.laptop.org
 > http://lists.laptop.org/listinfo/sugar

=---------------------
 paul fox, pgf at laptop.org



More information about the Sugar-devel mailing list