On Wed, Aug 24, 2011 at 06:57:18PM -0500, ch...@cnpbagwell.com wrote:
> From: Chris Bagwell <ch...@cnpbagwell.com>
> 
> Moved 4 different places were the touchscreen button press was done to a
> single location.
> 
> This allows to NOT send a button pressure while gesture detection
> is being performed.  That unwanted button press could do some annoying
> things when trying to do a 2 finger scroll on a touchscreen.

just looking at the patch, wouldn't this remove the button status when
gestures are disabled? before, the button state on isdv4 devices is always 1
before (when touched), now it'd be 0. same with two of the usb paths too.usb
paths too.

Cheers,
  Peter

> 
> Signed-off-by: Chris Bagwell <ch...@cnpbagwell.com>
> ---
>  src/wcmISDV4.c       |    2 +-
>  src/wcmTouchFilter.c |   27 +++++++++++++++++++++++++++
>  src/wcmUSB.c         |   12 ------------
>  3 files changed, 28 insertions(+), 13 deletions(-)
> 
> diff --git a/src/wcmISDV4.c b/src/wcmISDV4.c
> index dbc0c6a..5a123cd 100644
> --- a/src/wcmISDV4.c
> +++ b/src/wcmISDV4.c
> @@ -612,7 +612,7 @@ static int isdv4ParseTouchPacket(InputInfoPtr pInfo, 
> const unsigned char *data,
>  
>       ds->x = touchdata.x;
>       ds->y = touchdata.y;
> -     ds->buttons = ds->proximity = touchdata.status;
> +     ds->proximity = touchdata.status;
>       ds->device_type = TOUCH_ID;
>       ds->device_id = TOUCH_DEVICE_ID;
>  
> diff --git a/src/wcmTouchFilter.c b/src/wcmTouchFilter.c
> index 65b9eda..1600705 100644
> --- a/src/wcmTouchFilter.c
> +++ b/src/wcmTouchFilter.c
> @@ -194,6 +194,32 @@ static void wcmSingleFingerTap(WacomDevicePtr priv)
>       }
>  }
>  
> +/* Monitors for 1 finger touch and forces left button press or 1 finger
> + * release and will remove left button press.
> + *
> + * This function relies on wcmGestureMode will only be zero if
> + * WACOM_GESTURE_LAG_TIME has passed and still ony 1 finger on screen.
> + */
> +static void wcmSingleFingerPress(WacomDevicePtr priv)
> +{
> +     WacomCommonPtr common = priv->common;
> +     WacomChannelPtr firstChannel = common->wcmChannel;
> +     WacomChannelPtr secondChannel = common->wcmChannel + 1;
> +     WacomDeviceState ds[2] = { firstChannel->valid.states[0],
> +                                secondChannel->valid.states[0] };
> +
> +     DBG(10, priv, "\n");
> +
> +     /* This gesture is only valid on touchscreens. */
> +     if (!TabletHasFeature(priv->common, WCM_LCD))
> +             return;
> +
> +     if (ds[0].proximity && !ds[1].proximity)
> +             firstChannel->valid.states[0].buttons |= 1;
> +     if (!ds[0].proximity && !ds[1].proximity)
> +             firstChannel->valid.states[0].buttons &= ~1;
> +}
> +
>  /* parsing gesture mode according to 2FGT data */
>  void wcmGestureFilter(WacomDevicePtr priv, int channel)
>  {
> @@ -341,6 +367,7 @@ ret:
>                */
>               if (common->wcmGesture)
>                       wcmSingleFingerTap(priv);
> +             wcmSingleFingerPress(priv);
>       }
>  }
>  
> diff --git a/src/wcmUSB.c b/src/wcmUSB.c
> index 4367f19..14de990 100644
> --- a/src/wcmUSB.c
> +++ b/src/wcmUSB.c
> @@ -1110,14 +1110,6 @@ static int usbParseAbsMTEvent(WacomCommonPtr common, 
> struct input_event *event)
>                       ds->device_id = TOUCH_DEVICE_ID;
>                       ds->serial_num = private->wcmMTChannel+1;
>                       ds->sample = (int)GetTimeInMillis();
> -
> -                     /* Send left click down/up for touchscreen
> -                      * when the first finger touches/leaves the tablet.
> -                      */
> -                     if (TabletHasFeature(common, WCM_LCD) &&
> -                                     !private->wcmMTChannel)
> -                             ds->buttons = mod_buttons(ds->buttons, 0,
> -                                                       (event->value != -1));
>                       break;
>  
>               case ABS_MT_POSITION_X:
> @@ -1223,7 +1215,6 @@ static int usbParseKeyEvent(WacomCommonPtr common,
>                                       ds->device_type = TOUCH_ID;
>                                       ds->device_id = TOUCH_DEVICE_ID;
>                                       ds->proximity = event->value;
> -                                     ds->buttons = mod_buttons(ds->buttons, 
> 0, event->value);
>                               }
>                       }
>                       break;
> @@ -1253,9 +1244,6 @@ static int usbParseKeyEvent(WacomCommonPtr common,
>                       if ((ds->proximity && !dslast->proximity) ||
>                           (!ds->proximity && dslast->proximity))
>                               ds->sample = (int)GetTimeInMillis();
> -                     /* left button is always pressed for touchscreen */
> -                     if (TabletHasFeature(common, WCM_LCD))
> -                             ds->buttons = mod_buttons(ds->buttons, 0, 
> event->value);
>                       break;
>  
>               case BTN_TOOL_TRIPLETAP:
> -- 
> 1.7.6
> 
> 
> ------------------------------------------------------------------------------
> EMC VNX: the world's simplest storage, starting under $10K
> The only unified storage solution that offers unified management 
> Up to 160% more powerful than alternatives and 25% more efficient. 
> Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev
> _______________________________________________
> Linuxwacom-devel mailing list
> Linuxwacom-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel
> 

------------------------------------------------------------------------------
Special Offer -- Download ArcSight Logger for FREE!
Finally, a world-class log management solution at an even better 
price-free! And you'll get a free "Love Thy Logs" t-shirt when you
download Logger. Secure your free ArcSight Logger TODAY!
http://p.sf.net/sfu/arcsisghtdev2dev
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to