On Wed, Nov 21, 2012 at 12:14:53PM -0800, Ping Cheng wrote:
> Clients should know the maximum number of contacts a touch device
> support before they get touch events.
> 
> Signed-off-by: Ping Cheng <pi...@wacom.com>
> 
> ---
> The following TO-Do takes more time than I have now. I list it
> here so we do not forget them.
> 
> X server supports pointer emulation for touch device. We should
> let X server take care of single touch events for both MT and
> single touch devices that are running on newer servers;
> 
> Touch events are currently all posted in relative mode (touchpad).
> We need to support absolute mode (touchscreen) devices.
> ---
>  src/wcmUSB.c        |    3 +++
>  src/xf86Wacom.c     |    6 +++++-
>  src/xf86WacomDefs.h |    1 +
>  3 files changed, 9 insertions(+), 1 deletion(-)
> 
> diff --git a/src/wcmUSB.c b/src/wcmUSB.c
> index 5cc7830..acce5ee 100644
> --- a/src/wcmUSB.c
> +++ b/src/wcmUSB.c
> @@ -681,6 +681,9 @@ int usbWcmGetRanges(InputInfoPtr pInfo)
>       {
>               private->wcmUseMT = 1;
>  
> +             if (!ioctl(pInfo->fd, EVIOCGABS(ABS_MT_SLOT), &absinfo))
> +                     common->wcmMaxContacts = absinfo.maximum + 1;
> +
>               /* pen and MT on the same logical port */
>               if (ISBITSET(common->wcmKeys, BTN_TOOL_PEN))
>                       private->wcmPenTouch = TRUE;
> diff --git a/src/xf86Wacom.c b/src/xf86Wacom.c
> index bb11cf4..808f5f8 100644
> --- a/src/xf86Wacom.c
> +++ b/src/xf86Wacom.c
> @@ -323,6 +323,7 @@ static int wcmDevInit(DeviceIntPtr pWcm)
>  {
>       InputInfoPtr pInfo = (InputInfoPtr)pWcm->public.devicePrivate;
>       WacomDevicePtr priv = (WacomDevicePtr)pInfo->private;
> +     WacomCommonPtr common = priv->common;
>       unsigned char butmap[WCM_MAX_BUTTONS+1];
>       int nbaxes, nbbuttons, nbkeys;
>       int loop;
> @@ -421,7 +422,10 @@ static int wcmDevInit(DeviceIntPtr pWcm)
>  
>  #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 16
>       if (IsTouch(priv)) {
> -             if (!InitTouchClassDeviceStruct(pInfo->dev, 0, 
> XIDependentTouch, 2)) {
> +             if (!common->wcmMaxContacts)
> +                     common->wcmMaxContacts = 1;

a default of 0 means "don't know", and we should leave it at that.

Cheers,
   Peter

> +
> +             if (!InitTouchClassDeviceStruct(pInfo->dev, 
> common->wcmMaxContacts, XIDependentTouch, 2)) {
>                       xf86Msg(X_ERROR, "Unable to init touch class device 
> struct!\n");
>                       return FALSE;
>               }
> diff --git a/src/xf86WacomDefs.h b/src/xf86WacomDefs.h
> index 7df0e95..abfde70 100644
> --- a/src/xf86WacomDefs.h
> +++ b/src/xf86WacomDefs.h
> @@ -446,6 +446,7 @@ struct _WacomCommonRec
>                                    /* tablet Z resolution is equivalent
>                                     * to wcmMaxZ which is equal to 100% 
> pressure */
>       int wcmMaxDist;              /* tablet max distance value */
> +     int wcmMaxContacts;          /* MT device max number of contacts */
>  
>       /*
>        * TODO Remove wcmTiltOff*, once the kernel drivers reporting
> -- 
> 1.7.10.4

------------------------------------------------------------------------------
LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
Remotely access PCs and mobile devices and provide instant support
Improve your efficiency, and focus on delivering more value-add services
Discover what IT Professionals Know. Rescue delivers
http://p.sf.net/sfu/logmein_12329d2d
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to