input: Add labels to buttons and valuators - ABI_XINPUT_VERSION 7
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
17f9723f48
commit
a30fef9956
|
@ -1153,7 +1153,7 @@ InitProximityClassDeviceStruct(DeviceIntPtr dev)
|
||||||
* @see InitValuatorClassDeviceStruct
|
* @see InitValuatorClassDeviceStruct
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
InitValuatorAxisStruct(DeviceIntPtr dev, int axnum, int minval, int maxval,
|
InitValuatorAxisStruct(DeviceIntPtr dev, int axnum, Atom label, int minval, int maxval,
|
||||||
int resolution, int min_res, int max_res)
|
int resolution, int min_res, int max_res)
|
||||||
{
|
{
|
||||||
AxisInfoPtr ax;
|
AxisInfoPtr ax;
|
||||||
|
@ -1170,6 +1170,7 @@ InitValuatorAxisStruct(DeviceIntPtr dev, int axnum, int minval, int maxval,
|
||||||
ax->resolution = resolution;
|
ax->resolution = resolution;
|
||||||
ax->min_resolution = min_res;
|
ax->min_resolution = min_res;
|
||||||
ax->max_resolution = max_res;
|
ax->max_resolution = max_res;
|
||||||
|
ax->label = label;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -554,16 +554,33 @@ CoreKeyboardProc(DeviceIntPtr pDev, int what)
|
||||||
static int
|
static int
|
||||||
CorePointerProc(DeviceIntPtr pDev, int what)
|
CorePointerProc(DeviceIntPtr pDev, int what)
|
||||||
{
|
{
|
||||||
BYTE map[33];
|
#define NBUTTONS 32
|
||||||
|
#define NAXES 2
|
||||||
|
BYTE map[NBUTTONS + 1];
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
Atom btn_labels[NBUTTONS] = {0};
|
||||||
|
Atom axes_labels[NAXES] = {0};
|
||||||
|
|
||||||
switch (what) {
|
switch (what) {
|
||||||
case DEVICE_INIT:
|
case DEVICE_INIT:
|
||||||
for (i = 1; i <= 32; i++)
|
for (i = 1; i <= NBUTTONS; i++)
|
||||||
map[i] = i;
|
map[i] = i;
|
||||||
if (!InitPointerDeviceStruct((DevicePtr)pDev, map, 32,
|
|
||||||
|
btn_labels[0] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_LEFT);
|
||||||
|
btn_labels[1] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_MIDDLE);
|
||||||
|
btn_labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT);
|
||||||
|
btn_labels[3] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_UP);
|
||||||
|
btn_labels[4] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_DOWN);
|
||||||
|
btn_labels[5] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_HWHEEL_LEFT);
|
||||||
|
btn_labels[6] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_HWHEEL_RIGHT);
|
||||||
|
/* don't know about the rest */
|
||||||
|
|
||||||
|
axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_X);
|
||||||
|
axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y);
|
||||||
|
|
||||||
|
if (!InitPointerDeviceStruct((DevicePtr)pDev, map, NBUTTONS, btn_labels,
|
||||||
(PtrCtrlProcPtr)NoopDDA,
|
(PtrCtrlProcPtr)NoopDDA,
|
||||||
GetMotionHistorySize(), 2))
|
GetMotionHistorySize(), NAXES, axes_labels))
|
||||||
{
|
{
|
||||||
ErrorF("Could not initialize device '%s'. Out of memory.\n",
|
ErrorF("Could not initialize device '%s'. Out of memory.\n",
|
||||||
pDev->name);
|
pDev->name);
|
||||||
|
@ -583,6 +600,9 @@ CorePointerProc(DeviceIntPtr pDev, int what)
|
||||||
}
|
}
|
||||||
|
|
||||||
return Success;
|
return Success;
|
||||||
|
|
||||||
|
#undef NBUTTONS
|
||||||
|
#undef NAXES
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1133,7 +1153,7 @@ SetKeySymsMap(KeySymsPtr dst, KeySymsPtr src)
|
||||||
}
|
}
|
||||||
|
|
||||||
_X_EXPORT Bool
|
_X_EXPORT Bool
|
||||||
InitButtonClassDeviceStruct(DeviceIntPtr dev, int numButtons,
|
InitButtonClassDeviceStruct(DeviceIntPtr dev, int numButtons, Atom* labels,
|
||||||
CARD8 *map)
|
CARD8 *map)
|
||||||
{
|
{
|
||||||
ButtonClassPtr butc;
|
ButtonClassPtr butc;
|
||||||
|
@ -1146,12 +1166,13 @@ InitButtonClassDeviceStruct(DeviceIntPtr dev, int numButtons,
|
||||||
butc->sourceid = dev->id;
|
butc->sourceid = dev->id;
|
||||||
for (i = 1; i <= numButtons; i++)
|
for (i = 1; i <= numButtons; i++)
|
||||||
butc->map[i] = map[i];
|
butc->map[i] = map[i];
|
||||||
|
memcpy(butc->labels, labels, numButtons * sizeof(Atom));
|
||||||
dev->button = butc;
|
dev->button = butc;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
Bool
|
Bool
|
||||||
InitValuatorClassDeviceStruct(DeviceIntPtr dev, int numAxes,
|
InitValuatorClassDeviceStruct(DeviceIntPtr dev, int numAxes, Atom *labels,
|
||||||
int numMotionEvents, int mode)
|
int numMotionEvents, int mode)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -1190,7 +1211,7 @@ InitValuatorClassDeviceStruct(DeviceIntPtr dev, int numAxes,
|
||||||
AllocateMotionHistory(dev);
|
AllocateMotionHistory(dev);
|
||||||
|
|
||||||
for (i=0; i<numAxes; i++) {
|
for (i=0; i<numAxes; i++) {
|
||||||
InitValuatorAxisStruct(dev, i, NO_AXIS_LIMITS, NO_AXIS_LIMITS,
|
InitValuatorAxisStruct(dev, i, labels[i], NO_AXIS_LIMITS, NO_AXIS_LIMITS,
|
||||||
0, 0, 0);
|
0, 0, 0);
|
||||||
valc->axisVal[i]=0;
|
valc->axisVal[i]=0;
|
||||||
}
|
}
|
||||||
|
@ -1459,14 +1480,14 @@ InitIntegerFeedbackClassDeviceStruct (DeviceIntPtr dev, IntegerCtrlProcPtr contr
|
||||||
}
|
}
|
||||||
|
|
||||||
Bool
|
Bool
|
||||||
InitPointerDeviceStruct(DevicePtr device, CARD8 *map, int numButtons,
|
InitPointerDeviceStruct(DevicePtr device, CARD8 *map, int numButtons, Atom* btn_labels,
|
||||||
PtrCtrlProcPtr controlProc, int numMotionEvents,
|
PtrCtrlProcPtr controlProc, int numMotionEvents,
|
||||||
int numAxes)
|
int numAxes, Atom *axes_labels)
|
||||||
{
|
{
|
||||||
DeviceIntPtr dev = (DeviceIntPtr)device;
|
DeviceIntPtr dev = (DeviceIntPtr)device;
|
||||||
|
|
||||||
return(InitButtonClassDeviceStruct(dev, numButtons, map) &&
|
return(InitButtonClassDeviceStruct(dev, numButtons, btn_labels, map) &&
|
||||||
InitValuatorClassDeviceStruct(dev, numAxes,
|
InitValuatorClassDeviceStruct(dev, numAxes, axes_labels,
|
||||||
numMotionEvents, 0) &&
|
numMotionEvents, 0) &&
|
||||||
InitPtrFeedbackClassDeviceStruct(dev, controlProc));
|
InitPtrFeedbackClassDeviceStruct(dev, controlProc));
|
||||||
}
|
}
|
||||||
|
|
|
@ -214,7 +214,7 @@ CreateClassesChangedEvent(EventList* event,
|
||||||
{
|
{
|
||||||
dce->buttons.num_buttons = slave->button->numButtons;
|
dce->buttons.num_buttons = slave->button->numButtons;
|
||||||
for (i = 0; i < dce->buttons.num_buttons; i++)
|
for (i = 0; i < dce->buttons.num_buttons; i++)
|
||||||
dce->buttons.names[i] = 0; /* FIXME */
|
dce->buttons.names[i] = slave->button->labels[i];
|
||||||
}
|
}
|
||||||
if (slave->valuator)
|
if (slave->valuator)
|
||||||
{
|
{
|
||||||
|
@ -226,7 +226,7 @@ CreateClassesChangedEvent(EventList* event,
|
||||||
dce->valuators[i].resolution = slave->valuator->axes[i].resolution;
|
dce->valuators[i].resolution = slave->valuator->axes[i].resolution;
|
||||||
/* This should, eventually, be a per-axis mode */
|
/* This should, eventually, be a per-axis mode */
|
||||||
dce->valuators[i].mode = slave->valuator->mode;
|
dce->valuators[i].mode = slave->valuator->mode;
|
||||||
dce->valuators[i].name = 0; /* FIXME: */
|
dce->valuators[i].name = slave->valuator->axes[i].label;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (slave->key)
|
if (slave->key)
|
||||||
|
|
|
@ -46,6 +46,7 @@
|
||||||
#include "exevents.h"
|
#include "exevents.h"
|
||||||
#include "extinit.h"
|
#include "extinit.h"
|
||||||
#include "exglobals.h"
|
#include "exglobals.h"
|
||||||
|
#include "xserver-properties.h"
|
||||||
|
|
||||||
#define AtomFromName(x) MakeAtom(x, strlen(x), 1)
|
#define AtomFromName(x) MakeAtom(x, strlen(x), 1)
|
||||||
|
|
||||||
|
@ -382,6 +383,8 @@ KdPointerProc(DeviceIntPtr pDevice, int onoff)
|
||||||
DevicePtr pDev = (DevicePtr)pDevice;
|
DevicePtr pDev = (DevicePtr)pDevice;
|
||||||
KdPointerInfo *pi;
|
KdPointerInfo *pi;
|
||||||
Atom xiclass;
|
Atom xiclass;
|
||||||
|
Atom *btn_labels;
|
||||||
|
Atom *axes_labels;
|
||||||
|
|
||||||
if (!pDev)
|
if (!pDev)
|
||||||
return BadImplementation;
|
return BadImplementation;
|
||||||
|
@ -429,9 +432,47 @@ KdPointerProc(DeviceIntPtr pDevice, int onoff)
|
||||||
return !Success;
|
return !Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
InitPointerDeviceStruct(pDev, pi->map, pi->nButtons,
|
btn_labels = xcalloc(pi->nButtons, sizeof(Atom));
|
||||||
|
if (!btn_labels)
|
||||||
|
return BadAlloc;
|
||||||
|
axes_labels = xcalloc(pi->nAxes, sizeof(Atom));
|
||||||
|
if (!axes_labels) {
|
||||||
|
xfree(btn_labels);
|
||||||
|
return BadAlloc;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(pi->nAxes)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case 7:
|
||||||
|
btn_labels[6] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_HWHEEL_RIGHT);
|
||||||
|
case 6:
|
||||||
|
btn_labels[5] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_HWHEEL_LEFT);
|
||||||
|
case 5:
|
||||||
|
btn_labels[4] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_DOWN);
|
||||||
|
case 4:
|
||||||
|
btn_labels[3] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_UP);
|
||||||
|
case 3:
|
||||||
|
btn_labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT);
|
||||||
|
case 2:
|
||||||
|
btn_labels[1] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_MIDDLE);
|
||||||
|
case 1:
|
||||||
|
btn_labels[0] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_LEFT);
|
||||||
|
case 0:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pi->nAxes >= 2) {
|
||||||
|
axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_X);
|
||||||
|
axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
InitPointerDeviceStruct(pDev, pi->map, pi->nButtons, btn_labels,
|
||||||
(PtrCtrlProcPtr)NoopDDA,
|
(PtrCtrlProcPtr)NoopDDA,
|
||||||
GetMotionHistorySize(), pi->nAxes);
|
GetMotionHistorySize(), pi->nAxes, axes_labels);
|
||||||
|
|
||||||
|
xfree(btn_labels);
|
||||||
|
xfree(axes_labels);
|
||||||
|
|
||||||
if (pi->inputClass == KD_TOUCHSCREEN) {
|
if (pi->inputClass == KD_TOUCHSCREEN) {
|
||||||
InitAbsoluteClassDeviceStruct(pDevice);
|
InitAbsoluteClassDeviceStruct(pDevice);
|
||||||
|
|
|
@ -41,6 +41,8 @@ from The Open Group.
|
||||||
#include "lk201kbd.h"
|
#include "lk201kbd.h"
|
||||||
#include "xkbsrv.h"
|
#include "xkbsrv.h"
|
||||||
#include <X11/keysym.h>
|
#include <X11/keysym.h>
|
||||||
|
#include "xserver-properties.h"
|
||||||
|
#include "exevents.h"
|
||||||
|
|
||||||
Bool
|
Bool
|
||||||
LegalModifier(unsigned int key, DeviceIntPtr pDev)
|
LegalModifier(unsigned int key, DeviceIntPtr pDev)
|
||||||
|
@ -87,8 +89,13 @@ vfbKeybdProc(DeviceIntPtr pDevice, int onoff)
|
||||||
static int
|
static int
|
||||||
vfbMouseProc(DeviceIntPtr pDevice, int onoff)
|
vfbMouseProc(DeviceIntPtr pDevice, int onoff)
|
||||||
{
|
{
|
||||||
BYTE map[4];
|
#define NBUTTONS 3
|
||||||
|
#define NAXES 2
|
||||||
|
|
||||||
|
BYTE map[NBUTTONS + 1];
|
||||||
DevicePtr pDev = (DevicePtr)pDevice;
|
DevicePtr pDev = (DevicePtr)pDevice;
|
||||||
|
Atom btn_labels[NBUTTONS] = {0};
|
||||||
|
Atom axes_labels[NAXES] = {0};
|
||||||
|
|
||||||
switch (onoff)
|
switch (onoff)
|
||||||
{
|
{
|
||||||
|
@ -96,8 +103,16 @@ vfbMouseProc(DeviceIntPtr pDevice, int onoff)
|
||||||
map[1] = 1;
|
map[1] = 1;
|
||||||
map[2] = 2;
|
map[2] = 2;
|
||||||
map[3] = 3;
|
map[3] = 3;
|
||||||
InitPointerDeviceStruct(pDev, map, 3,
|
|
||||||
(PtrCtrlProcPtr)NoopDDA, GetMotionHistorySize(), 2);
|
btn_labels[0] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_LEFT);
|
||||||
|
btn_labels[1] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_MIDDLE);
|
||||||
|
btn_labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT);
|
||||||
|
|
||||||
|
axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_X);
|
||||||
|
axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y);
|
||||||
|
|
||||||
|
InitPointerDeviceStruct(pDev, map, NBUTTONS, btn_labels,
|
||||||
|
(PtrCtrlProcPtr)NoopDDA, GetMotionHistorySize(), NAXES, axes_labels);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DEVICE_ON:
|
case DEVICE_ON:
|
||||||
|
@ -112,6 +127,9 @@ vfbMouseProc(DeviceIntPtr pDevice, int onoff)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return Success;
|
return Success;
|
||||||
|
|
||||||
|
#undef NBUTTONS
|
||||||
|
#undef NAXES
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -83,7 +83,7 @@ typedef enum {
|
||||||
*/
|
*/
|
||||||
#define ABI_ANSIC_VERSION SET_ABI_VERSION(0, 4)
|
#define ABI_ANSIC_VERSION SET_ABI_VERSION(0, 4)
|
||||||
#define ABI_VIDEODRV_VERSION SET_ABI_VERSION(5, 0)
|
#define ABI_VIDEODRV_VERSION SET_ABI_VERSION(5, 0)
|
||||||
#define ABI_XINPUT_VERSION SET_ABI_VERSION(6, 0)
|
#define ABI_XINPUT_VERSION SET_ABI_VERSION(7, 0)
|
||||||
#define ABI_EXTENSION_VERSION SET_ABI_VERSION(2, 0)
|
#define ABI_EXTENSION_VERSION SET_ABI_VERSION(2, 0)
|
||||||
#define ABI_FONT_VERSION SET_ABI_VERSION(0, 6)
|
#define ABI_FONT_VERSION SET_ABI_VERSION(0, 6)
|
||||||
|
|
||||||
|
|
|
@ -1010,13 +1010,13 @@ xf86XInputSetScreen(LocalDevicePtr local,
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
xf86InitValuatorAxisStruct(DeviceIntPtr dev, int axnum, int minval, int maxval,
|
xf86InitValuatorAxisStruct(DeviceIntPtr dev, int axnum, Atom label, int minval, int maxval,
|
||||||
int resolution, int min_res, int max_res)
|
int resolution, int min_res, int max_res)
|
||||||
{
|
{
|
||||||
if (!dev || !dev->valuator)
|
if (!dev || !dev->valuator)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
InitValuatorAxisStruct(dev, axnum, minval, maxval, resolution, min_res,
|
InitValuatorAxisStruct(dev, axnum, label, minval, maxval, resolution, min_res,
|
||||||
max_res);
|
max_res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -171,7 +171,7 @@ extern _X_EXPORT LocalDevicePtr xf86FirstLocalDevice(void);
|
||||||
extern _X_EXPORT int xf86ScaleAxis(int Cx, int Sxhigh, int Sxlow, int Rxhigh, int Rxlow);
|
extern _X_EXPORT int xf86ScaleAxis(int Cx, int Sxhigh, int Sxlow, int Rxhigh, int Rxlow);
|
||||||
extern _X_EXPORT void xf86XInputSetScreen(LocalDevicePtr local, int screen_number, int x, int y);
|
extern _X_EXPORT void xf86XInputSetScreen(LocalDevicePtr local, int screen_number, int x, int y);
|
||||||
extern _X_EXPORT void xf86ProcessCommonOptions(InputInfoPtr pInfo, pointer options);
|
extern _X_EXPORT void xf86ProcessCommonOptions(InputInfoPtr pInfo, pointer options);
|
||||||
extern _X_EXPORT void xf86InitValuatorAxisStruct(DeviceIntPtr dev, int axnum, int minval,
|
extern _X_EXPORT void xf86InitValuatorAxisStruct(DeviceIntPtr dev, int axnum, Atom label, int minval,
|
||||||
int maxval, int resolution, int min_res,
|
int maxval, int resolution, int min_res,
|
||||||
int max_res);
|
int max_res);
|
||||||
extern _X_EXPORT void xf86InitValuatorDefaults(DeviceIntPtr dev, int axnum);
|
extern _X_EXPORT void xf86InitValuatorDefaults(DeviceIntPtr dev, int axnum);
|
||||||
|
|
|
@ -33,6 +33,8 @@ is" without express or implied warranty.
|
||||||
#include "Pointer.h"
|
#include "Pointer.h"
|
||||||
#include "Args.h"
|
#include "Args.h"
|
||||||
|
|
||||||
|
#include "xserver-properties.h"
|
||||||
|
|
||||||
DeviceIntPtr xnestPointerDevice = NULL;
|
DeviceIntPtr xnestPointerDevice = NULL;
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -46,6 +48,8 @@ int
|
||||||
xnestPointerProc(DeviceIntPtr pDev, int onoff)
|
xnestPointerProc(DeviceIntPtr pDev, int onoff)
|
||||||
{
|
{
|
||||||
CARD8 map[MAXBUTTONS];
|
CARD8 map[MAXBUTTONS];
|
||||||
|
Atom btn_labels[MAXBUTTONS] = {0};
|
||||||
|
Atom axes_labels[2] = {0};
|
||||||
int nmap;
|
int nmap;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -55,9 +59,21 @@ xnestPointerProc(DeviceIntPtr pDev, int onoff)
|
||||||
nmap = XGetPointerMapping(xnestDisplay, map, MAXBUTTONS);
|
nmap = XGetPointerMapping(xnestDisplay, map, MAXBUTTONS);
|
||||||
for (i = 0; i <= nmap; i++)
|
for (i = 0; i <= nmap; i++)
|
||||||
map[i] = i; /* buttons are already mapped */
|
map[i] = i; /* buttons are already mapped */
|
||||||
InitPointerDeviceStruct(&pDev->public, map, nmap,
|
|
||||||
|
btn_labels[0] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_LEFT);
|
||||||
|
btn_labels[1] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_MIDDLE);
|
||||||
|
btn_labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT);
|
||||||
|
btn_labels[3] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_UP);
|
||||||
|
btn_labels[4] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_DOWN);
|
||||||
|
btn_labels[5] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_HWHEEL_LEFT);
|
||||||
|
btn_labels[6] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_HWHEEL_RIGHT);
|
||||||
|
|
||||||
|
axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_X);
|
||||||
|
axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y);
|
||||||
|
|
||||||
|
InitPointerDeviceStruct(&pDev->public, map, nmap, btn_labels,
|
||||||
xnestChangePointerControl,
|
xnestChangePointerControl,
|
||||||
GetMotionHistorySize(), 2);
|
GetMotionHistorySize(), 2, axes_labels);
|
||||||
break;
|
break;
|
||||||
case DEVICE_ON:
|
case DEVICE_ON:
|
||||||
xnestEventMask |= XNEST_POINTER_EVENT_MASK;
|
xnestEventMask |= XNEST_POINTER_EVENT_MASK;
|
||||||
|
|
|
@ -51,6 +51,8 @@
|
||||||
#include "exevents.h"
|
#include "exevents.h"
|
||||||
#include "extinit.h"
|
#include "extinit.h"
|
||||||
|
|
||||||
|
#include "xserver-properties.h"
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/syslimits.h>
|
#include <sys/syslimits.h>
|
||||||
|
@ -336,17 +338,35 @@ static Bool DarwinAddScreen(int index, ScreenPtr pScreen, int argc, char **argv)
|
||||||
* DarwinMouseProc: Handle the initialization, etc. of a mouse
|
* DarwinMouseProc: Handle the initialization, etc. of a mouse
|
||||||
*/
|
*/
|
||||||
static int DarwinMouseProc(DeviceIntPtr pPointer, int what) {
|
static int DarwinMouseProc(DeviceIntPtr pPointer, int what) {
|
||||||
|
#define NBUTTONS 7
|
||||||
|
#define NAXES 2
|
||||||
// 7 buttons: left, right, middle, then four scroll wheel "buttons"
|
// 7 buttons: left, right, middle, then four scroll wheel "buttons"
|
||||||
CARD8 map[8] = {0, 1, 2, 3, 4, 5, 6, 7};
|
CARD8 map[NBUTTONS + 1] = {0, 1, 2, 3, 4, 5, 6, 7};
|
||||||
|
Atom btn_labels[NAXES] = {0};
|
||||||
|
Atom axes_labels[NBUTTONS] = {0};
|
||||||
|
|
||||||
switch (what) {
|
switch (what) {
|
||||||
case DEVICE_INIT:
|
case DEVICE_INIT:
|
||||||
pPointer->public.on = FALSE;
|
pPointer->public.on = FALSE;
|
||||||
|
|
||||||
|
btn_labels[0] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_LEFT);
|
||||||
|
btn_labels[1] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_MIDDLE);
|
||||||
|
btn_labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT);
|
||||||
|
btn_labels[3] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_UP);
|
||||||
|
btn_labels[4] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_DOWN);
|
||||||
|
btn_labels[5] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_HWHEEL_LEFT);
|
||||||
|
btn_labels[6] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_HWHEEL_RIGHT);
|
||||||
|
|
||||||
|
axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_X);
|
||||||
|
axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y);
|
||||||
|
|
||||||
|
|
||||||
// Set button map.
|
// Set button map.
|
||||||
InitPointerDeviceStruct((DevicePtr)pPointer, map, 7,
|
InitPointerDeviceStruct((DevicePtr)pPointer, map, NBUTTONS,
|
||||||
|
btn_labels,
|
||||||
(PtrCtrlProcPtr)NoopDDA,
|
(PtrCtrlProcPtr)NoopDDA,
|
||||||
GetMotionHistorySize(), 2);
|
GetMotionHistorySize(), NAXES,
|
||||||
|
axes_labels);
|
||||||
pPointer->valuator->mode = Absolute; // Relative
|
pPointer->valuator->mode = Absolute; // Relative
|
||||||
InitAbsoluteClassDeviceStruct(pPointer);
|
InitAbsoluteClassDeviceStruct(pPointer);
|
||||||
// InitValuatorAxisStruct(pPointer, 0, 0, XQUARTZ_VALUATOR_LIMIT, 1, 0, 1);
|
// InitValuatorAxisStruct(pPointer, 0, 0, XQUARTZ_VALUATOR_LIMIT, 1, 0, 1);
|
||||||
|
@ -364,28 +384,43 @@ static int DarwinMouseProc(DeviceIntPtr pPointer, int what) {
|
||||||
}
|
}
|
||||||
|
|
||||||
return Success;
|
return Success;
|
||||||
|
#undef NBUTTONS
|
||||||
|
#undef NAXES
|
||||||
}
|
}
|
||||||
|
|
||||||
static int DarwinTabletProc(DeviceIntPtr pPointer, int what) {
|
static int DarwinTabletProc(DeviceIntPtr pPointer, int what) {
|
||||||
CARD8 map[4] = {0, 1, 2, 3};
|
#define NBUTTONS 3
|
||||||
|
#define NAXES 5
|
||||||
|
CARD8 map[NBUTTONS + 1] = {0, 1, 2, 3};
|
||||||
|
Atom axes_labels[NAXES] = {0};
|
||||||
|
Atom btn_labels[NBUTTONS] = {0};
|
||||||
|
|
||||||
switch (what) {
|
switch (what) {
|
||||||
case DEVICE_INIT:
|
case DEVICE_INIT:
|
||||||
pPointer->public.on = FALSE;
|
pPointer->public.on = FALSE;
|
||||||
|
|
||||||
|
btn_labels[0] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_LEFT);
|
||||||
|
btn_labels[1] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_MIDDLE);
|
||||||
|
btn_labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT);
|
||||||
|
|
||||||
|
axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_X);
|
||||||
|
axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_Y);
|
||||||
|
|
||||||
// Set button map.
|
// Set button map.
|
||||||
InitPointerDeviceStruct((DevicePtr)pPointer, map, 3,
|
InitPointerDeviceStruct((DevicePtr)pPointer, map, NBUTTONS,
|
||||||
|
btn_labels,
|
||||||
(PtrCtrlProcPtr)NoopDDA,
|
(PtrCtrlProcPtr)NoopDDA,
|
||||||
GetMotionHistorySize(), 5);
|
GetMotionHistorySize(), NAXES,
|
||||||
|
axes_labels);
|
||||||
pPointer->valuator->mode = Absolute; // Relative
|
pPointer->valuator->mode = Absolute; // Relative
|
||||||
InitProximityClassDeviceStruct(pPointer);
|
InitProximityClassDeviceStruct(pPointer);
|
||||||
InitAbsoluteClassDeviceStruct(pPointer);
|
InitAbsoluteClassDeviceStruct(pPointer);
|
||||||
|
|
||||||
InitValuatorAxisStruct(pPointer, 0, 0, XQUARTZ_VALUATOR_LIMIT, 1, 0, 1);
|
InitValuatorAxisStruct(pPointer, 0, axes_labels[0], 0, XQUARTZ_VALUATOR_LIMIT, 1, 0, 1);
|
||||||
InitValuatorAxisStruct(pPointer, 1, 0, XQUARTZ_VALUATOR_LIMIT, 1, 0, 1);
|
InitValuatorAxisStruct(pPointer, 1, axes_labels[1], 0, XQUARTZ_VALUATOR_LIMIT, 1, 0, 1);
|
||||||
InitValuatorAxisStruct(pPointer, 2, 0, XQUARTZ_VALUATOR_LIMIT, 1, 0, 1);
|
InitValuatorAxisStruct(pPointer, 2, axes_labels[2], 0, XQUARTZ_VALUATOR_LIMIT, 1, 0, 1);
|
||||||
InitValuatorAxisStruct(pPointer, 3, -XQUARTZ_VALUATOR_LIMIT, XQUARTZ_VALUATOR_LIMIT, 1, 0, 1);
|
InitValuatorAxisStruct(pPointer, 3, axes_labels[3], -XQUARTZ_VALUATOR_LIMIT, XQUARTZ_VALUATOR_LIMIT, 1, 0, 1);
|
||||||
InitValuatorAxisStruct(pPointer, 4, -XQUARTZ_VALUATOR_LIMIT, XQUARTZ_VALUATOR_LIMIT, 1, 0, 1);
|
InitValuatorAxisStruct(pPointer, 4, axes_labels[4], -XQUARTZ_VALUATOR_LIMIT, XQUARTZ_VALUATOR_LIMIT, 1, 0, 1);
|
||||||
// pPointer->use = IsXExtensionDevice;
|
// pPointer->use = IsXExtensionDevice;
|
||||||
break;
|
break;
|
||||||
case DEVICE_ON:
|
case DEVICE_ON:
|
||||||
|
@ -399,6 +434,8 @@ static int DarwinTabletProc(DeviceIntPtr pPointer, int what) {
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
return Success;
|
return Success;
|
||||||
|
#undef NBUTTONS
|
||||||
|
#undef NAXES
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -38,6 +38,8 @@
|
||||||
|
|
||||||
#if defined(XFree86Server)
|
#if defined(XFree86Server)
|
||||||
#include "inputstr.h"
|
#include "inputstr.h"
|
||||||
|
#include "exevents.h" /* for button/axes labels */
|
||||||
|
#include "xserver-properties.h"
|
||||||
|
|
||||||
/* Peek the internal button mapping */
|
/* Peek the internal button mapping */
|
||||||
static CARD8 const *g_winMouseButtonMap = NULL;
|
static CARD8 const *g_winMouseButtonMap = NULL;
|
||||||
|
@ -70,6 +72,8 @@ winMouseProc (DeviceIntPtr pDeviceInt, int iState)
|
||||||
int lngWheelEvents = 2;
|
int lngWheelEvents = 2;
|
||||||
CARD8 *map;
|
CARD8 *map;
|
||||||
DevicePtr pDevice = (DevicePtr) pDeviceInt;
|
DevicePtr pDevice = (DevicePtr) pDeviceInt;
|
||||||
|
Atom *btn_labels;
|
||||||
|
Atom axes_labels[2];
|
||||||
|
|
||||||
switch (iState)
|
switch (iState)
|
||||||
{
|
{
|
||||||
|
@ -97,13 +101,27 @@ winMouseProc (DeviceIntPtr pDeviceInt, int iState)
|
||||||
map[0] = 0;
|
map[0] = 0;
|
||||||
for (i=1; i <= lngMouseButtons + lngWheelEvents; i++)
|
for (i=1; i <= lngMouseButtons + lngWheelEvents; i++)
|
||||||
map[i] = i;
|
map[i] = i;
|
||||||
|
|
||||||
|
btn_labels = calloc((lngMouseButtons + lngWheelEvents), sizeof(Atom));
|
||||||
|
btn_labels[0] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_LEFT);
|
||||||
|
btn_labels[1] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_MIDDLE);
|
||||||
|
btn_labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT);
|
||||||
|
btn_labels[3] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_UP);
|
||||||
|
btn_labels[4] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_DOWN);
|
||||||
|
|
||||||
|
axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_X);
|
||||||
|
axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y);
|
||||||
|
|
||||||
InitPointerDeviceStruct (pDevice,
|
InitPointerDeviceStruct (pDevice,
|
||||||
|
btn_labels,
|
||||||
map,
|
map,
|
||||||
lngMouseButtons + lngWheelEvents,
|
lngMouseButtons + lngWheelEvents,
|
||||||
winMouseCtrl,
|
winMouseCtrl,
|
||||||
GetMotionHistorySize(),
|
GetMotionHistorySize(),
|
||||||
2);
|
2,
|
||||||
|
axes_labels);
|
||||||
free(map);
|
free(map);
|
||||||
|
free(btn_labels);
|
||||||
|
|
||||||
#if defined(XFree86Server)
|
#if defined(XFree86Server)
|
||||||
g_winMouseButtonMap = pDeviceInt->button->map;
|
g_winMouseButtonMap = pDeviceInt->button->map;
|
||||||
|
|
|
@ -73,6 +73,7 @@ extern _X_EXPORT int InitProximityClassDeviceStruct(
|
||||||
extern _X_EXPORT void InitValuatorAxisStruct(
|
extern _X_EXPORT void InitValuatorAxisStruct(
|
||||||
DeviceIntPtr /* dev */,
|
DeviceIntPtr /* dev */,
|
||||||
int /* axnum */,
|
int /* axnum */,
|
||||||
|
Atom /* label */,
|
||||||
int /* minval */,
|
int /* minval */,
|
||||||
int /* maxval */,
|
int /* maxval */,
|
||||||
int /* resolution */,
|
int /* resolution */,
|
||||||
|
|
|
@ -274,11 +274,13 @@ extern _X_EXPORT Bool SetKeySymsMap(
|
||||||
extern _X_EXPORT Bool InitButtonClassDeviceStruct(
|
extern _X_EXPORT Bool InitButtonClassDeviceStruct(
|
||||||
DeviceIntPtr /*device*/,
|
DeviceIntPtr /*device*/,
|
||||||
int /*numButtons*/,
|
int /*numButtons*/,
|
||||||
|
Atom* /* labels */,
|
||||||
CARD8* /*map*/);
|
CARD8* /*map*/);
|
||||||
|
|
||||||
extern _X_EXPORT Bool InitValuatorClassDeviceStruct(
|
extern _X_EXPORT Bool InitValuatorClassDeviceStruct(
|
||||||
DeviceIntPtr /*device*/,
|
DeviceIntPtr /*device*/,
|
||||||
int /*numAxes*/,
|
int /*numAxes*/,
|
||||||
|
Atom* /* labels */,
|
||||||
int /*numMotionEvents*/,
|
int /*numMotionEvents*/,
|
||||||
int /*mode*/);
|
int /*mode*/);
|
||||||
|
|
||||||
|
@ -351,9 +353,11 @@ extern _X_EXPORT Bool InitPointerDeviceStruct(
|
||||||
DevicePtr /*device*/,
|
DevicePtr /*device*/,
|
||||||
CARD8* /*map*/,
|
CARD8* /*map*/,
|
||||||
int /*numButtons*/,
|
int /*numButtons*/,
|
||||||
|
Atom* /* btn_labels */,
|
||||||
PtrCtrlProcPtr /*controlProc*/,
|
PtrCtrlProcPtr /*controlProc*/,
|
||||||
int /*numMotionEvents*/,
|
int /*numMotionEvents*/,
|
||||||
int /*numAxes*/);
|
int /*numAxes*/,
|
||||||
|
Atom* /* axes_labels */);
|
||||||
|
|
||||||
extern _X_EXPORT Bool InitKeyboardDeviceStruct(
|
extern _X_EXPORT Bool InitKeyboardDeviceStruct(
|
||||||
DeviceIntPtr /*device*/,
|
DeviceIntPtr /*device*/,
|
||||||
|
|
|
@ -215,6 +215,7 @@ typedef struct _AxisInfo {
|
||||||
int max_resolution;
|
int max_resolution;
|
||||||
int min_value;
|
int min_value;
|
||||||
int max_value;
|
int max_value;
|
||||||
|
Atom label;
|
||||||
} AxisInfo, *AxisInfoPtr;
|
} AxisInfo, *AxisInfoPtr;
|
||||||
|
|
||||||
typedef struct _ValuatorAccelerationRec {
|
typedef struct _ValuatorAccelerationRec {
|
||||||
|
@ -254,6 +255,7 @@ typedef struct _ButtonClassRec {
|
||||||
CARD8 postdown[DOWN_LENGTH];
|
CARD8 postdown[DOWN_LENGTH];
|
||||||
CARD8 map[MAP_LENGTH];
|
CARD8 map[MAP_LENGTH];
|
||||||
union _XkbAction *xkb_acts;
|
union _XkbAction *xkb_acts;
|
||||||
|
Atom labels[MAX_BUTTONS];
|
||||||
} ButtonClassRec, *ButtonClassPtr;
|
} ButtonClassRec, *ButtonClassPtr;
|
||||||
|
|
||||||
typedef struct _FocusClassRec {
|
typedef struct _FocusClassRec {
|
||||||
|
|
Loading…
Reference in New Issue