Set correct device type and mode in XInput structures.
This commit is contained in:
parent
3a858b5a6e
commit
e9b14fe7a9
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2005 Matthieu Herrb
|
* Copyright (c) 2005-2009 Matthieu Herrb
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software for any
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
* purpose with or without fee is hereby granted, provided that the above
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
@ -13,7 +13,7 @@
|
|||||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
/* $OpenBSD: ws.c,v 1.4 2009/11/22 23:00:43 matthieu Exp $ */
|
/* $OpenBSD: ws.c,v 1.5 2009/11/23 12:35:40 matthieu Exp $ */
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <dev/wscons/wsconsio.h>
|
#include <dev/wscons/wsconsio.h>
|
||||||
|
|
||||||
@ -41,6 +42,7 @@
|
|||||||
|
|
||||||
typedef struct WSDevice {
|
typedef struct WSDevice {
|
||||||
char *devName; /* device name */
|
char *devName; /* device name */
|
||||||
|
int type; /* ws device type */
|
||||||
unsigned int buttons; /* # of buttons */
|
unsigned int buttons; /* # of buttons */
|
||||||
unsigned int lastButtons; /* last state of buttons */
|
unsigned int lastButtons; /* last state of buttons */
|
||||||
int x, y; /* current abs coordinates */
|
int x, y; /* current abs coordinates */
|
||||||
@ -283,16 +285,26 @@ wsPreInit(InputDriverPtr drv, IDevPtr dev, int flags)
|
|||||||
" or \"UD\"\n");
|
" or \"UD\"\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (wsOpen(pInfo) != Success) {
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
if (ioctl(pInfo->fd, WSMOUSEIO_GTYPE, &priv->type) != 0) {
|
||||||
|
wsClose(pInfo);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
if (priv->type == WSMOUSE_TYPE_TPANEL)
|
||||||
|
pInfo->type_name = XI_TOUCHSCREEN;
|
||||||
|
else
|
||||||
|
pInfo->type_name = XI_MOUSE;
|
||||||
|
wsClose(pInfo);
|
||||||
|
|
||||||
pInfo->name = dev->identifier;
|
pInfo->name = dev->identifier;
|
||||||
pInfo->type_name = "wscons pointer";
|
|
||||||
pInfo->device_control = wsProc;
|
pInfo->device_control = wsProc;
|
||||||
pInfo->read_input = wsReadInput;
|
pInfo->read_input = wsReadInput;
|
||||||
pInfo->control_proc = wsChangeControl;
|
pInfo->control_proc = wsChangeControl;
|
||||||
pInfo->switch_mode = wsSwitchMode;
|
pInfo->switch_mode = wsSwitchMode;
|
||||||
pInfo->conversion_proc = wsConvert;
|
pInfo->conversion_proc = wsConvert;
|
||||||
pInfo->reverse_conversion_proc = NULL;
|
pInfo->reverse_conversion_proc = NULL;
|
||||||
pInfo->fd = -1;
|
|
||||||
pInfo->private = priv;
|
pInfo->private = priv;
|
||||||
pInfo->old_x = -1;
|
pInfo->old_x = -1;
|
||||||
pInfo->old_y = -1;
|
pInfo->old_y = -1;
|
||||||
@ -332,26 +344,29 @@ wsProc(DeviceIntPtr pWS, int what)
|
|||||||
|
|
||||||
for (i = 0; i < NBUTTONS; i++)
|
for (i = 0; i < NBUTTONS; i++)
|
||||||
map[i + 1] = i + 1;
|
map[i + 1] = i + 1;
|
||||||
InitPointerDeviceStruct((DevicePtr)pWS, map,
|
if (!InitButtonClassDeviceStruct(pWS,
|
||||||
min(priv->buttons, NBUTTONS),
|
min(priv->buttons, NBUTTONS),
|
||||||
#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
|
#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
|
||||||
btn_labels,
|
btn_labels,
|
||||||
#endif
|
|
||||||
#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 0
|
|
||||||
miPointerGetMotionEvents,
|
|
||||||
#elif GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 3
|
|
||||||
GetMotionHistory,
|
|
||||||
#endif
|
|
||||||
wsControlProc,
|
|
||||||
#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 0
|
|
||||||
miPointerGetMotionBufferSize()
|
|
||||||
#else
|
|
||||||
GetMotionHistorySize(), NAXES
|
|
||||||
#endif
|
#endif
|
||||||
|
map))
|
||||||
|
return !Success;
|
||||||
|
|
||||||
|
if (!InitValuatorClassDeviceStruct(pWS,
|
||||||
|
NAXES,
|
||||||
#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
|
#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
|
||||||
, axes_labels
|
axes_labels,
|
||||||
#endif
|
#endif
|
||||||
);
|
#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 3
|
||||||
|
xf86GetMotionEvents,
|
||||||
|
#endif
|
||||||
|
GetMotionHistorySize(),
|
||||||
|
priv->type == WSMOUSE_TYPE_TPANEL ?
|
||||||
|
Absolute : Relative))
|
||||||
|
return !Success;
|
||||||
|
if (!InitPtrFeedbackClassDeviceStruct(pWS, wsControlProc))
|
||||||
|
return !Success;
|
||||||
|
|
||||||
xf86InitValuatorAxisStruct(pWS,
|
xf86InitValuatorAxisStruct(pWS,
|
||||||
#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
|
#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
|
||||||
axes_labels[0],
|
axes_labels[0],
|
||||||
@ -685,4 +700,3 @@ wsControlProc(DeviceIntPtr device, PtrCtrl *ctrl)
|
|||||||
priv->den = ctrl->den;
|
priv->den = ctrl->den;
|
||||||
priv->threshold = ctrl->threshold;
|
priv->threshold = ctrl->threshold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user