On Fri, Apr 01, 2011 at 11:17:15AM -0700, Jason Gerecke wrote:
> On Thu, Mar 31, 2011 at 9:21 PM, Peter Hutterer
> <peter.hutte...@who-t.net> wrote:
> > On Wed, Mar 30, 2011 at 11:51:22PM -0700, Jason Gerecke wrote:
> >> On Wed, Mar 30, 2011 at 9:04 PM, Peter Hutterer
> >> <peter.hutte...@who-t.net> wrote:
> >> > On Wed, Mar 30, 2011 at 01:54:45PM -0700, Jason Gerecke wrote:
> >> >> Since the worker functions now check that they have the appropriate
> >> >> number of arguments, its possible to decrease the number of arguments
> >> >> required by 'set'. Since all it really needs is a device number and
> >> >> a property, the minimum argc is now 2.
> >> >>
> >> >> A handy side-effect of this change is that its now possible to run
> >> >> e.g. `xsetwacom --set $ID StripLeftDown` to reset the action to
> >> >> its default.
> >> >
> >> > is that because we delete the property then so it falls back to using the
> >> > button mapping?
> >> >
> >> Correct.
> >>
> >> > this formulation is a bit unfortunate, since it doesn't actually set to 
> >> > the
> >> > default. if I map the button to say 8, then run the above command it 
> >> > would
> >> > revert back to 8, not to the default (4 or whatever it is), right?
> >> >
> >> > Cheers,
> >> >  Peter
> >> >
> >> I'm not quite sure what you mean here. If no action has been defined,
> >> the driver falls back to its predefined button. If you run e.g.
> >> `xsetwacom --set $ID LeftStripUp 8`, the action "button +8" is
> >> assigned (because of parse_action's simple button handling). When you
> >> move your finger along the strip, the driver notices an action has
> >> been set and will send the button 8 event. If you then run `xsetwacom
> >> --set $ID LeftStripUp` the action is deleted. Moving your finger along
> >> the strip again, the driver will not find an action and fall back to
> >> its predefined mapping (which should be button 5)
> >
> > Where is this 5 coming from? shouldn't this be the equivalent of "button
> > +5" in the driver?
> >
> > Cheers,
> >  Peter
> >
> getWheelButton (in wcmCommon.c) is responsible for finding both the
> "fakeButton" and "fakeKey" that could be associated with various
> device events. In the case of our hypothetical "strip left up", it
> gets the button from 'priv->striplup' and the key from
> 'priv->strip_keys[0]'. The former is defined during wcmAllocate and is
> never changed. 

in spirit with the other discussion of allowing physical mappings, this
should probably be adjustable.

> The latter is changed by wcmUpdateButtonKeyActions
> (after a long call chain beginning with wcmSetProperty) whenever X
> detects a change in the WACOM_PROP_STRIPBUTTONS property.
> getWheelButton then returns both of these to sendWheelStripEvents. If
> a "key" is defined, it will preferentially decode it and send the
> necessary events. Otherwise, it interprets the raw integer fakeButton
> as the X button to send a button press event for.
> 
> When xsetwacom is given arguments to StripLeftUp, it converts them
> into an action and modifies the appropriate offset into
> WACOM_PROP_STRIPBUTTONS. When the appropriate motion is made the
> driver notices an action is sent and sends it. When it is run without
> arguments, it clears the offset, so the same motion results in the
> driver not finding an action and sending the default button. Note that
> xsetwacom works the same way for "Button X"! Running with arguments
> sets an action the driver will preferentially use; running without
> arguments clears the action, forcing the driver to fall back on the
> raw integer defined in the button[] array.

right, so if I understand this correctly, the "default button" it uses then
is the (essentially hardcoded) striplup value. which brings me back to my
original question: it doesn't reset to the default value but rather removes
the new button mapping.  if you could change striplup, removing a button
mapping would reset to whatever striplup has as current value (and that may
not be the _default_). currently this works, but only because we don't seem
to have a way to change it. it's really just the wording that matters to me
here, even if it appears to be overly anal :)

> The only thing I find a little mystifying is how priv->strip_keys is
> initially set. My first thought was that it was done when the
> properties were first created -- this doesn't look to be true. My
> second thought was that perhaps the entire priv structure was zeroed
> out prior to initialization -- can't find evidence of this either. I
> would think unless strip_keys[] were initialized somewhere it'd be
> filled with random junk, defeating the logic used and resulting in
> completely undefined behavior...

all memory in the wacom driver is calloc'd, which means it's initialized to
0 from the onset.

Cheers,
  Peter

------------------------------------------------------------------------------
Create and publish websites with WebMatrix
Use the most popular FREE web apps or write code yourself; 
WebMatrix provides all the features you need to develop and 
publish your website. http://p.sf.net/sfu/ms-webmatrix-sf
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to