xf86-input-neko: extract init touch to own func.

This commit is contained in:
Miroslav Šedivý 2023-09-07 16:06:20 +02:00
parent d82b640ecc
commit 6f61e0262a

View File

@ -56,9 +56,8 @@
#include <xserver-properties.h> #include <xserver-properties.h>
#include <pthread.h> #include <pthread.h>
#define MAXBUTTONS 11 /* > 10 */ #define MAX_USED_VALUATORS 3 /* x, y, pressure */
#define TOUCH_NUM_AXES 3 /* x, y, pressure */ #define TOUCH_MAX_SLOTS 10 /* max number of simultaneous touches */
#define TOUCH_MAX_SLOTS 10
struct neko_message struct neko_message
{ {
@ -176,41 +175,38 @@ PointerCtrl(__attribute__ ((unused)) DeviceIntPtr device,
} }
static int static int
DeviceControl(DeviceIntPtr device, int what) InitTouch(InputInfoPtr pInfo)
{ {
// device pInfo
InputInfoPtr pInfo = device->public.devicePrivate;
// custom private data // custom private data
struct neko_priv *priv = pInfo->private; struct neko_priv *priv = pInfo->private;
switch (what) { const int nbtns = 11;
case DEVICE_INIT: const int naxes = 3;
device->public.on = FALSE;
unsigned char map[MAXBUTTONS + 1]; unsigned char map[nbtns + 1];
Atom labels[MAXBUTTONS]; Atom btn_labels[nbtns];
Atom axis_labels[TOUCH_NUM_AXES]; Atom axis_labels[naxes];
// init button map // init button map
memset(map, 0, sizeof(map)); memset(map, 0, sizeof(map));
for (int i = 0; i < MAXBUTTONS; i++) for (int i = 0; i < nbtns; i++)
{ {
map[i + 1] = i + 1; map[i + 1] = i + 1;
} }
// init labels // init btn_labels
memset(labels, 0, ARRAY_SIZE(labels) * sizeof(Atom)); memset(btn_labels, 0, ARRAY_SIZE(btn_labels) * sizeof(Atom));
labels[0] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_LEFT); btn_labels[0] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_LEFT);
labels[1] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_MIDDLE); btn_labels[1] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_MIDDLE);
labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT); btn_labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT);
labels[3] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_UP); btn_labels[3] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_UP);
labels[4] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_DOWN); btn_labels[4] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_DOWN);
labels[5] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_HWHEEL_LEFT); btn_labels[5] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_HWHEEL_LEFT);
labels[6] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_HWHEEL_RIGHT); btn_labels[6] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_HWHEEL_RIGHT);
labels[7] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_SIDE); btn_labels[7] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_SIDE);
labels[8] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_EXTRA); btn_labels[8] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_EXTRA);
labels[9] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_FORWARD); btn_labels[9] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_FORWARD);
labels[10] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_BACK); btn_labels[10] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_BACK);
// init axis labels // init axis labels
memset(axis_labels, 0, ARRAY_SIZE(axis_labels) * sizeof(Atom)); memset(axis_labels, 0, ARRAY_SIZE(axis_labels) * sizeof(Atom));
@ -219,12 +215,12 @@ DeviceControl(DeviceIntPtr device, int what)
axis_labels[2] = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_MT_PRESSURE); axis_labels[2] = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_MT_PRESSURE);
/* initialize mouse emulation valuators */ /* initialize mouse emulation valuators */
if (InitPointerDeviceStruct((DevicePtr)device, if (InitPointerDeviceStruct((DevicePtr)pInfo->dev,
map, map,
MAXBUTTONS, labels, nbtns, btn_labels,
PointerCtrl, PointerCtrl,
GetMotionHistorySize(), GetMotionHistorySize(),
TOUCH_NUM_AXES, axis_labels) == FALSE) naxes, axis_labels) == FALSE)
{ {
xf86IDrvMsg(pInfo, X_ERROR, xf86IDrvMsg(pInfo, X_ERROR,
"unable to allocate PointerDeviceStruct\n"); "unable to allocate PointerDeviceStruct\n");
@ -251,7 +247,7 @@ DeviceControl(DeviceIntPtr device, int what)
int maxval; int maxval;
int resolution; int resolution;
*/ */
xf86InitValuatorAxisStruct(device, 0, xf86InitValuatorAxisStruct(pInfo->dev, 0,
XIGetKnownProperty(AXIS_LABEL_PROP_ABS_MT_POSITION_X), XIGetKnownProperty(AXIS_LABEL_PROP_ABS_MT_POSITION_X),
0, /* min val */ 0, /* min val */
priv->width - 1, /* max val */ priv->width - 1, /* max val */
@ -260,7 +256,7 @@ DeviceControl(DeviceIntPtr device, int what)
priv->width, /* max_res */ priv->width, /* max_res */
Absolute); Absolute);
xf86InitValuatorAxisStruct(device, 1, xf86InitValuatorAxisStruct(pInfo->dev, 1,
XIGetKnownProperty(AXIS_LABEL_PROP_ABS_MT_POSITION_Y), XIGetKnownProperty(AXIS_LABEL_PROP_ABS_MT_POSITION_Y),
0, /* min val */ 0, /* min val */
priv->height - 1, /* max val */ priv->height - 1, /* max val */
@ -269,7 +265,7 @@ DeviceControl(DeviceIntPtr device, int what)
priv->height, /* max_res */ priv->height, /* max_res */
Absolute); Absolute);
xf86InitValuatorAxisStruct(device, 2, xf86InitValuatorAxisStruct(pInfo->dev, 2,
XIGetKnownProperty(AXIS_LABEL_PROP_ABS_MT_PRESSURE), XIGetKnownProperty(AXIS_LABEL_PROP_ABS_MT_PRESSURE),
0, /* min val */ 0, /* min val */
priv->pmax, /* max val */ priv->pmax, /* max val */
@ -290,16 +286,36 @@ DeviceControl(DeviceIntPtr device, int what)
simultaneous touches is undefined or unspecified. This field should be simultaneous touches is undefined or unspecified. This field should be
used as a guide only, devices will lie about their capabilities. used as a guide only, devices will lie about their capabilities.
*/ */
if (InitTouchClassDeviceStruct(device, if (InitTouchClassDeviceStruct(pInfo->dev,
priv->slots, priv->slots,
XIDirectTouch, XIDirectTouch,
TOUCH_NUM_AXES) == FALSE) naxes) == FALSE)
{ {
xf86IDrvMsg(pInfo, X_ERROR, xf86IDrvMsg(pInfo, X_ERROR,
"unable to allocate TouchClassDeviceStruct\n"); "unable to allocate TouchClassDeviceStruct\n");
return !Success; return !Success;
} }
return Success;
}
static int
DeviceControl(DeviceIntPtr device, int what)
{
// device pInfo
InputInfoPtr pInfo = device->public.devicePrivate;
// custom private data
struct neko_priv *priv = pInfo->private;
switch (what) {
case DEVICE_INIT:
device->public.on = FALSE;
if (InitTouch(pInfo) != Success)
{
xf86IDrvMsg(pInfo, X_ERROR, "unable to init touch\n");
return !Success;
}
break; break;
case DEVICE_ON: case DEVICE_ON:
@ -402,7 +418,7 @@ PreInit(__attribute__ ((unused)) InputDriverPtr drv,
xf86ProcessCommonOptions(pInfo, pInfo->options); xf86ProcessCommonOptions(pInfo, pInfo->options);
/* create valuators */ /* create valuators */
priv->valuators = valuator_mask_new(TOUCH_NUM_AXES); priv->valuators = valuator_mask_new(MAX_USED_VALUATORS);
if (!priv->valuators) if (!priv->valuators)
{ {
xf86IDrvMsg(pInfo, X_ERROR, "%s: out of memory\n", __FUNCTION__); xf86IDrvMsg(pInfo, X_ERROR, "%s: out of memory\n", __FUNCTION__);