Original spec by frafu with extended design details and implications.

Summary

Add additional configuration to the mouse behaviour in X and/or Gnome to make the desktop more accessible for users of alternative pointers and those with difficulty using a normally configured mouse. This spec describes five enhancements:

  1. left-click-hold context menu: left click&hold to open the contextual menu

  2. dwell-clicking: perform a left click, a left double click, a right click or a left click&drag without pressing any mousebutton.

  3. tremor-suppresing: Some users are not able to keep the mouse completely motionless and would welcome an option to smooth out mouse movements.

  4. mouse-gestures: triggering of specific actions by doing gestures with the mouse

Rationale

The standard functions of the pointer (usually the mouse) has not much changed over the years. It is used to point, to select, to click&drag and to open the contextual menu. However some of this functionality is not available to users of special adaptive pointers and others (like the elderly) can find the mouse difficult to use. Some simple (optional) tweaks to the mouse driver functionality is needed to fix this. Some of these features will also be useful for 'average' users and power users.

Use cases

left-click-hold context menu:

dwell-clicking:

tremor-suppresing:

mouse-gestures:

Scope

Add functionality to the xorg mouse driver and implement a configuration panel in Gnome.

Design

MouseTweak #1:

MouseTweak #2:

MouseTweak #3:

MousePrefTremorTabV05.png

MouseTweak #4:

MouseGesturesConfigurationV04.png

Above you can see a sample GUI for the mouse gestures functionality of the pointer. There are 3 ways for doing mouse gestures:

  1. by clicking a mouse button and optionally holding a modifier
    • The user can choose between a left button single click&hold, a left button double click&hold, a right button click&hold and a middle button click&hold.

    • The "Click normally if there is no movement in:" setting is especially useful to distinguish a click&drag from the mouse gestures.

    • If the gesture takes more time than the timeout allows, the gesture is ignored.
  2. by indicating the gesturing with a key
    • Of course, in this mode, the user should use a key that he does not need in normal usage. A Function key or a modifier could be good candidates
  3. by starting the gesture in determined time intervals.
    • When gesturing in this mode, the pointer has 2 different states:
      • Pointerstate: the pointer behaves as a normal mouse when it is moved and clicked.
      • Gesturestate: if the pointer is moved while in gesturestate, the movement is interpreted as a gesture.
    • The state of the pointer at the start of the movement determines whether it is a mouse gesture or not.
    • When the pointer is motionless, it toggles continually between pointerstate and gesturestate.
    • The pointer keeps the state it had at the start of the movement as long as it is moved.
    • The length of the pointerstate+gesturestate can be defined by the cycle parameter.
    • There is also a parameter available for the user to define how much time of the cycle the pointer has to be in pointerstate; the rest of the time of the cycle the pointer is in gesturestate. The cycle begins in pointerstate.
    • At the end of a movement (regardless of it being a gesture or not), a new cycle begins. There is one exception: if the action of a gesture is "toggle visibility of the pointer", the pointer remains in gesturestate as long as the pointer is invisible.
    • The user is able to distinguish visually whether the pointer is in pointerstate or gesturestate; for example by changing its shape or colour.
    • The "Change the colour of the path when the gesture is not recognized" checkbox is greyed when the "Draw the path of gesture" checkbox is disabled.

When clicking on the "Define Gestures..." button, the user gets to the dialogue where he can define the mouse gestures for all and for specific applications:

MouseGesturesDefinitionDialogueV04.png

MouseGestureEditingDialogueV04.png

MouseGestureEditingPopupMenuV04.png

Implementation

I don't know whether it can be useful, but in the following zip package you can find the files that I created with glade to present the sample gui:

mousetweaks.gladeversion2.12.1.zip

MouseTweak #1:

* Under MacOSX there are at least 2 utilities (1. One Finger Snap, 2. Look Mom No Hands,...) to open the contextual menu with a left click&hold. Both are not free.

Code

MouseTweak #2:

* gok provides dwelling functionality, but only locally in the gok application; not systemwide. Could it be a starting point?

* kmousetool is an utility that does a left click whenever the mouse stops moving; right click has been introduced through a gesture, but with a major drawback: it is not possible to do a right click without the left click as it always does a left click when the mouse stops. I tried to contact the author about this but did not get any reply. I think that the original MouseTool software is now shareware. On the other hand, there is also a version of kmousetool that is part of the kdeaccessibility software.

Code

MouseTweak #3:

Code

MouseTweak #4:

The following may provide some starting points for the implementation:

[ForumThread http://ubuntuforums.org/showthread.php?p=2012107]

Code

Unresolved issues

MouseTweak #1:

MouseTweak #2:

MouseTweak #3:

MouseTweak #4:

BoF agenda and discussion

MouseTweak #1:

MouseTweak #2:

MouseTweak #3:

MouseTweak #4:

Comments

MouseTweak #1:

MouseTweak #2:

MouseTweak #3:

* mikecorn says on the #ubuntu-devel-discuss:

MouseTweak #4:


CategorySpec

Accessibility/Specs/MouseTweaks/Details (last edited 2008-08-06 16:41:45 by localhost)