yes to the pressure, no to the fingers down valuator. that is not a value that should be exposed as an axis. it's better to provide this through proper multitouch support.
On Tue, Oct 12, 2010 at 02:46:34PM -0400, Joe Shaw wrote: > Signed-off-by: Joe Shaw <[email protected]> > --- > src/synaptics.c | 46 +++++++++++++++++++++++++++++++++++++++++++--- > 1 files changed, 43 insertions(+), 3 deletions(-) > > diff --git a/src/synaptics.c b/src/synaptics.c > index b490009..a1cbe87 100644 > --- a/src/synaptics.c > +++ b/src/synaptics.c > @@ -114,6 +114,8 @@ typedef enum { > > #define INPUT_BUFFER_SIZE 200 > > +#define NUM_AXES 4 > + > > /***************************************************************************** > * Forward declaration > > ****************************************************************************/ > @@ -926,6 +928,10 @@ static void InitAxesLabels(Atom *labels, int nlabels) > switch(nlabels) > { > default: > + case 4: > + labels[3] = None; // FIXME? Not sure how to do this given > there's no corresponding property /* */ c style comments please > + case 3: > + labels[2] = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_PRESSURE); > case 2: > labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y); > case 1: > @@ -971,10 +977,10 @@ DeviceInit(DeviceIntPtr dev) > int min, max; > #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 > Atom btn_labels[SYN_MAX_BUTTONS] = { 0 }; > - Atom axes_labels[2] = { 0 }; > + Atom axes_labels[NUM_AXES] = { 0 }; > DeviceVelocityPtr pVel; > > - InitAxesLabels(axes_labels, 2); > + InitAxesLabels(axes_labels, NUM_AXES); At this point, has_pressure is set, so this needs to be conditional on whether the touchpad reports pressure. > InitButtonLabels(btn_labels, SYN_MAX_BUTTONS); > #endif > > @@ -991,7 +997,7 @@ DeviceInit(DeviceIntPtr dev) > btn_labels, > #endif > SynapticsCtrl, > - GetMotionHistorySize(), 2 > + GetMotionHistorySize(), NUM_AXES > #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 > , axes_labels > #endif > @@ -1076,6 +1082,37 @@ DeviceInit(DeviceIntPtr dev) > min, max, priv->resy * 1000, 0, priv->resy * 1000); > xf86InitValuatorDefaults(dev, 1); > > + /* Z/pressure valuator */ > + if (priv->minp < priv->maxp) > + { > + min = priv->minp; > + max = priv->maxp; > + } else > + { > + min = 0; > + max = -1; > + } > + > + xf86InitValuatorAxisStruct(dev, 2, > +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 > + axes_labels[2], > +#endif > + min, max, 1, 0, 1); > + xf86InitValuatorDefaults(dev, 2); same for this bit, conditional on has_pressure please. > + > + /* Valuator for number of fingers */ > + xf86InitValuatorAxisStruct(dev, 3, > +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 > + axes_labels[3], > +#endif > + 0, 3, /* Supports up to 3 fingers for now */ > + 1, 0, 1); > + xf86InitValuatorDefaults(dev, 3); > + > +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 0 > + xf86MotionHistoryAllocate(local); > +#endif > + we don't support ABI 0 anymore, so you can skip the last few lines. > if (!alloc_param_data(pInfo)) > return !Success; > > @@ -2461,6 +2498,9 @@ HandleState(InputInfoPtr pInfo, struct SynapticsHwState > *hw) > } > } > > + if (inside_active_area) > + xf86PostMotionEvent(local->dev, 1, 2, 2, hw->z, hw->numFingers); > + Please post the pressure as part of the other events, there's no need for a separate event. Cheers, Peter > if (priv->mid_emu_state == MBE_LEFT_CLICK) > { > post_button_click(pInfo, 1); > -- > 1.7.3.1 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
