summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPing Cheng <pinglinux@gmail.com>2013-02-21 19:01:25 -0800
committerJason Gerecke <killertofu@gmail.com>2013-02-26 09:26:42 -0800
commit120f72f8f3fe5e74ed87c7ee3828243ba4ba054b (patch)
treea619c7d4670415b73b9f5158cece26016d4a73ba
parent06afd180edad2b39dc717d266f5012ca93bd2d8f (diff)
downloadxf86-input-wacom-120f72f8f3fe5e74ed87c7ee3828243ba4ba054b.tar.gz
Arbitration applies to puck/Wacom mouse as well
We do not allow finger competes with CURSOR. Signed-off-by: Ping Cheng <pingc@wacom.com> Reviewed-by: Jason Gerecke <killertofu@gmail.com>
-rw-r--r--src/wcmCommon.c10
-rw-r--r--src/wcmConfig.c10
-rw-r--r--src/wcmUSB.c21
-rw-r--r--src/xf86WacomDefs.h1
4 files changed, 22 insertions, 20 deletions
diff --git a/src/wcmCommon.c b/src/wcmCommon.c
index 8bf1ebb..1ab2490 100644
--- a/src/wcmCommon.c
+++ b/src/wcmCommon.c
@@ -1178,13 +1178,13 @@ static void commonDispatchDevice(WacomCommonPtr common, unsigned int channel,
if (TabletHasFeature(common, WCM_PENTOUCH))
{
- if (IsPen(priv))
+ if (IsTablet(priv))
{
common->wcmTouchDevice->common->wcmPenInProx = filtered.proximity;
- /* send touch out when pen coming in-prox for devices
- * that provideboth pen and touch events so system
- * cursor won't jump between tools.
+ /* send touch out when tablet tool coming in-prox for
+ * devices that provide both pen/puck and touch events
+ * so system cursor won't jump between tools.
*/
if (common->wcmTouchDevice->oldProximity)
{
@@ -1194,7 +1194,7 @@ static void commonDispatchDevice(WacomCommonPtr common, unsigned int channel,
}
}
else if (IsTouch(priv) && common->wcmPenInProx)
- /* Ignore touch events when pen is in prox */
+ /* Ignore touch events when tablet tool is in prox */
return;
}
diff --git a/src/wcmConfig.c b/src/wcmConfig.c
index 87200eb..1c9eae7 100644
--- a/src/wcmConfig.c
+++ b/src/wcmConfig.c
@@ -414,9 +414,9 @@ static void wcmLinkTouchAndPen(InputInfoPtr pInfo)
if (tmpcommon->tablet_id == common->tablet_id)
{
- if (IsTouch(tmppriv) && IsPen(priv))
+ if (IsTouch(tmppriv) && IsTablet(priv))
common->wcmTouchDevice = tmppriv;
- else if (IsTouch(priv) && IsPen(tmppriv))
+ else if (IsTouch(priv) && IsTablet(tmppriv))
tmpcommon->wcmTouchDevice = priv;
if (common->wcmTouchDevice ||
@@ -575,10 +575,10 @@ static int wcmPreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
pInfo->fd = -1;
}
- /* only link them once per port. We need to try for both pen and touch
- * since we do not know which tool (touch or pen) will be added first.
+ /* only link them once per port. We need to try for both tablet tool
+ * and touch since we do not know which tool will be added first.
*/
- if (IsTouch(priv) || (IsPen(priv) && !common->wcmTouchDevice))
+ if (IsTouch(priv) || (IsTablet(priv) && !common->wcmTouchDevice))
wcmLinkTouchAndPen(pInfo);
return Success;
diff --git a/src/wcmUSB.c b/src/wcmUSB.c
index 62a6d83..75caa6b 100644
--- a/src/wcmUSB.c
+++ b/src/wcmUSB.c
@@ -1552,18 +1552,19 @@ static int usbInitToolType(WacomCommonPtr common, const struct input_event *even
}
/**
- * Check if the tool is a stylus/eraser and in-prox or not.
+ * Check if the tool is a stylus/eraser/cursor and in-prox or not.
*
* @param device_type The tool type stored in wcmChannel
* @param proximity The tool's proximity state
- * @return True if stylus/eraser is in-prox; False otherwise.
+ * @return True if stylus/eraser/cursor is in-prox; False otherwise.
*/
-static Bool usbIsPenInProx(int device_type, int proximity)
+static Bool usbIsTabletToolInProx(int device_type, int proximity)
{
- Bool is_pen = (device_type == STYLUS_ID) ||
- (device_type == ERASER_ID);
- return (is_pen && proximity);
+ Bool is_tablet_tool = (device_type == STYLUS_ID) ||
+ (device_type == CURSOR_ID) ||
+ (device_type == ERASER_ID);
+ return (is_tablet_tool && proximity);
}
static void usbDispatchEvents(InputInfoPtr pInfo)
@@ -1586,15 +1587,15 @@ static void usbDispatchEvents(InputInfoPtr pInfo)
if (private->wcmPenTouch)
{
- /* We get both pen and touch data from the kernel when they
- * both are in/down. So, if we were (hence the need of dslast)
- * processing pen events, we should ignore touch events.
+ /* We get both tablet tool and touch data from the kernel when
+ * both tools are in/down. So, if we were (hence the need of dslast)
+ * processing tablet tool events, we should ignore touch events.
*
* MT events will be posted to the userland when XInput 2.1
* is ready.
*/
if ((private->wcmDeviceType == TOUCH_ID) &&
- usbIsPenInProx(dslast.device_type, dslast.proximity))
+ usbIsTabletToolInProx(dslast.device_type, dslast.proximity))
{
private->wcmEventCnt = 0;
return;
diff --git a/src/xf86WacomDefs.h b/src/xf86WacomDefs.h
index 5b54de6..fe078ec 100644
--- a/src/xf86WacomDefs.h
+++ b/src/xf86WacomDefs.h
@@ -184,6 +184,7 @@ struct _WacomModel
#define IsEraser(priv) (DEVICE_ID((priv)->flags) == ERASER_ID)
#define IsPad(priv) (DEVICE_ID((priv)->flags) == PAD_ID)
#define IsPen(priv) (IsStylus(priv) || IsEraser(priv))
+#define IsTablet(priv) (IsPen(priv) || IsCursor(priv))
#define IsUSBDevice(common) ((common)->wcmDevCls == &gWacomUSBDevice)