Hi all, somehow I'm out of luck with send-email and my overly spam-alert email provider. Sorry for double-posting! Here's the original mail (without greeting, which somehow got suppressed):
I made an attempt to remove the absolute device class from the server. It was, to the best of my knowledge, unused and quite misleading since all is there except for real useage. The actual removal (patch 5+6) is split up so the API is kept (more or less) for the benefit of out-of-tree drivers. "More or less" refers to the AbsoluteClassRec/Ptr pair which is being removed, but no-one out of the server seems to have used it. The protocol and libXi parts remain untouched so GIMP won't break. Also, the server is more honest to clients asking for AbsoluteClass support, i.e. now you should get protocol errors instead of silent ignorance. The real removal merits an ABI bump, but TBH I was unsure how to do it properly and whether or not it's overkill. No driver I'm aware of used it. A possible alternative would be actually using this stuff, but there's lots of overlap with existing input properties and the class does x/y only. The only senario I could imagine was making better use of raw absolute events, but since we have sub-pixel events that's a questionable use case. [PATCH 1/6] xquartz: simplify ChangeDeviceControl [PATCH 2/6] kdrive: don't pretent to support DEVICE_ABS_* in ChangeDeviceControl [PATCH 3/6] xf86: don't pretend to support DEVICE_ABS_* in ChangeDeviceControl [PATCH 4/6] simplify ChangeDeviceControl in stubs [PATCH 5/6] xserver: remove AbsoluteClassRec keeping the ABI [PATCH 6/6] xserver: remove AbsoluteClass, breaking the A(P|B)I
From 47b0698fe40d283bc2a97b25d8ce2cdbd4d8d27d Mon Sep 17 00:00:00 2001 From: Simon Thum <[email protected]> Date: Sat, 5 Mar 2011 04:58:30 +0100 Subject: [PATCH 1/6] xquartz: simplify ChangeDeviceControl Signed-off-by: Simon Thum <[email protected]> --- hw/xquartz/darwinXinput.c | 12 +----------- 1 files changed, 1 insertions(+), 11 deletions(-) diff --git a/hw/xquartz/darwinXinput.c b/hw/xquartz/darwinXinput.c index 8bb83ca..3ef34fe 100644 --- a/hw/xquartz/darwinXinput.c +++ b/hw/xquartz/darwinXinput.c @@ -117,17 +117,7 @@ ChangeDeviceControl(ClientPtr client, DeviceIntPtr dev, { DEBUG_LOG("ChangeDeviceControl(%p, %p, %p)\n", client, dev, control); - switch (control->control) { - case DEVICE_RESOLUTION: - return BadMatch; - case DEVICE_ABS_CALIB: - case DEVICE_ABS_AREA: - return BadMatch; - case DEVICE_CORE: - return BadMatch; - default: - return BadMatch; - } + return BadMatch; } -- 1.7.3.4
From 1808a526ba202a3cb27475c466f880530f7fbe4d Mon Sep 17 00:00:00 2001 From: Simon Thum <[email protected]> Date: Sat, 5 Mar 2011 04:59:33 +0100 Subject: [PATCH 2/6] kdrive: don't pretent to support DEVICE_ABS_* in ChangeDeviceControl Signed-off-by: Simon Thum <[email protected]> --- hw/kdrive/src/kinput.c | 2 -- 1 files changed, 0 insertions(+), 2 deletions(-) diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c index 608f3a7..3e6c2bc 100644 --- a/hw/kdrive/src/kinput.c +++ b/hw/kdrive/src/kinput.c @@ -2204,8 +2204,6 @@ ChangeDeviceControl(register ClientPtr client, DeviceIntPtr pDev, case DEVICE_ABS_CALIB: case DEVICE_ABS_AREA: - return Success; - case DEVICE_CORE: return BadMatch; case DEVICE_ENABLE: -- 1.7.3.4
From 4cbd269c354bcda9fdf4ec4e455719c2ccf48332 Mon Sep 17 00:00:00 2001 From: Simon Thum <[email protected]> Date: Sat, 5 Mar 2011 05:01:22 +0100 Subject: [PATCH 3/6] xf86: don't pretend to support DEVICE_ABS_* in ChangeDeviceControl Signed-off-by: Simon Thum <[email protected]> --- hw/xfree86/common/xf86Xinput.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c index e3264e6..df67422 100644 --- a/hw/xfree86/common/xf86Xinput.c +++ b/hw/xfree86/common/xf86Xinput.c @@ -405,10 +405,10 @@ ChangeDeviceControl (ClientPtr client, DeviceIntPtr dev, xDeviceCtl *control) if (!pInfo->control_proc) { switch (control->control) { case DEVICE_CORE: - return BadMatch; - case DEVICE_RESOLUTION: case DEVICE_ABS_CALIB: case DEVICE_ABS_AREA: + return BadMatch; + case DEVICE_RESOLUTION: case DEVICE_ENABLE: return Success; default: -- 1.7.3.4
From 5af06dbc95d7ea79501d593115ddfd24fcdfbe42 Mon Sep 17 00:00:00 2001 From: Simon Thum <[email protected]> Date: Sat, 5 Mar 2011 05:02:54 +0100 Subject: [PATCH 4/6] simplify ChangeDeviceControl in stubs Signed-off-by: Simon Thum <[email protected]> --- Xi/stubs.c | 12 +----------- 1 files changed, 1 insertions(+), 11 deletions(-) diff --git a/Xi/stubs.c b/Xi/stubs.c index d9e8eec..d74eeb8 100644 --- a/Xi/stubs.c +++ b/Xi/stubs.c @@ -115,17 +115,7 @@ int ChangeDeviceControl(ClientPtr client, DeviceIntPtr dev, xDeviceCtl * control) { - switch (control->control) { - case DEVICE_RESOLUTION: - return BadMatch; - case DEVICE_ABS_CALIB: - case DEVICE_ABS_AREA: - return BadMatch; - case DEVICE_CORE: - return BadMatch; - default: - return BadMatch; - } + return BadMatch; } -- 1.7.3.4
From c7ef26a30295b38240eda374520f13ac358f7258 Mon Sep 17 00:00:00 2001 From: Simon Thum <[email protected]> Date: Wed, 9 Mar 2011 20:48:22 +0100 Subject: [PATCH 5/6] xserver: remove AbsoluteClassRec keeping the ABI This removes the struct, but keeps InitAbsoluteClassDeviceStruct as a no-op and preserves related struct layout. --- Xi/chgdctl.c | 72 ++-------------------------------------------- Xi/exevents.c | 24 --------------- Xi/getdctl.c | 75 +----------------------------------------------- dix/devices.c | 32 ++------------------ hw/kdrive/src/kinput.c | 1 - hw/xquartz/darwin.c | 2 - include/input.h | 5 ++- include/inputstr.h | 25 +-------------- 8 files changed, 14 insertions(+), 222 deletions(-) diff --git a/Xi/chgdctl.c b/Xi/chgdctl.c index 901a0e4..4c4aeba 100644 --- a/Xi/chgdctl.c +++ b/Xi/chgdctl.c @@ -76,8 +76,6 @@ SProcXChangeDeviceControl(ClientPtr client) { char n; xDeviceCtl *ctl; - xDeviceAbsCalibCtl *calib; - xDeviceAbsAreaCtl *area; REQUEST(xChangeDeviceControlReq); swaps(&stuff->length, n); @@ -88,26 +86,7 @@ SProcXChangeDeviceControl(ClientPtr client) swaps(&ctl->length, n); switch(stuff->control) { case DEVICE_ABS_CALIB: - calib = (xDeviceAbsCalibCtl*)ctl; - swaps(&calib->length, n); - swapl(&calib->min_x, n); - swapl(&calib->max_x, n); - swapl(&calib->min_y, n); - swapl(&calib->max_y, n); - swapl(&calib->flip_x, n); - swapl(&calib->flip_y, n); - swapl(&calib->rotation, n); - swapl(&calib->button_threshold, n); - break; case DEVICE_ABS_AREA: - area = (xDeviceAbsAreaCtl*)ctl; - swapl(&area->offset_x, n); - swapl(&area->offset_y, n); - swapl(&area->width, n); - swapl(&area->height, n); - swapl(&area->screen, n); - swapl(&area->following, n); - break; case DEVICE_CORE: case DEVICE_ENABLE: case DEVICE_RESOLUTION: @@ -134,8 +113,6 @@ ProcXChangeDeviceControl(ClientPtr client) xChangeDeviceControlReply rep; AxisInfoPtr a; CARD32 *resolution; - xDeviceAbsCalibCtl *calib; - xDeviceAbsAreaCtl *area; xDeviceEnableCtl *e; devicePresenceNotify dpn; @@ -193,53 +170,10 @@ ProcXChangeDeviceControl(ClientPtr client) } break; case DEVICE_ABS_CALIB: - calib = (xDeviceAbsCalibCtl *)&stuff[1]; - - if (calib->button_threshold < 0 || calib->button_threshold > 255) { - ret = BadValue; - goto out; - } - - status = ChangeDeviceControl(client, dev, (xDeviceCtl *) calib); - - if (status == Success) { - dev->absolute->min_x = calib->min_x; - dev->absolute->max_x = calib->max_x; - dev->absolute->min_y = calib->min_y; - dev->absolute->max_y = calib->max_y; - dev->absolute->flip_x = calib->flip_x; - dev->absolute->flip_y = calib->flip_y; - dev->absolute->rotation = calib->rotation; - dev->absolute->button_threshold = calib->button_threshold; - ret = Success; - } else if (status == DeviceBusy || status == BadValue) { - rep.status = status; - ret = Success; - } else { - ret = BadMatch; - } - - break; case DEVICE_ABS_AREA: - area = (xDeviceAbsAreaCtl *)&stuff[1]; - - status = ChangeDeviceControl(client, dev, (xDeviceCtl *) area); - - if (status == Success) { - dev->absolute->offset_x = area->offset_x; - dev->absolute->offset_y = area->offset_y; - dev->absolute->width = area->width; - dev->absolute->height = area->height; - dev->absolute->screen = area->screen; - dev->absolute->following = area->following; - ret = Success; - } else if (status == DeviceBusy || status == BadValue) { - rep.status = status; - ret = Success; - } else { - ret = Success; - } - + /* Calibration is now done through properties, and never had any effect + * on anything (in the open-source world). Thus, be honest. */ + ret = BadMatch; break; case DEVICE_CORE: /* Sorry, no device core switching no more. If you want a device to diff --git a/Xi/exevents.c b/Xi/exevents.c index c7089bb..5b207bc 100644 --- a/Xi/exevents.c +++ b/Xi/exevents.c @@ -626,30 +626,6 @@ DeepCopyPointerClasses(DeviceIntPtr from, DeviceIntPtr to) classes->proximity = to->proximity; to->proximity = NULL; } - - if (from->absolute) - { - if (!to->absolute) - { - classes = to->unused_classes; - to->absolute = classes->absolute; - if (!to->absolute) - { - to->absolute = calloc(1, sizeof(AbsoluteClassRec)); - if (!to->absolute) - FatalError("[Xi] no memory for class shift.\n"); - } else - classes->absolute = NULL; - } - memcpy(to->absolute, from->absolute, sizeof(AbsoluteClassRec)); - to->absolute->sourceid = from->id; - } else if (to->absolute) - { - ClassesPtr classes; - classes = to->unused_classes; - classes->absolute = to->absolute; - to->absolute = NULL; - } } /** diff --git a/Xi/getdctl.c b/Xi/getdctl.c index 3e81e94..4e04b8b 100644 --- a/Xi/getdctl.c +++ b/Xi/getdctl.c @@ -118,64 +118,6 @@ CopySwapDeviceResolution(ClientPtr client, ValuatorClassPtr v, char *buf, } } -static void CopySwapDeviceAbsCalib (ClientPtr client, AbsoluteClassPtr dts, - char *buf) -{ - char n; - xDeviceAbsCalibState *calib = (xDeviceAbsCalibState *) buf; - - calib->control = DEVICE_ABS_CALIB; - calib->length = sizeof(xDeviceAbsCalibState); - calib->min_x = dts->min_x; - calib->max_x = dts->max_x; - calib->min_y = dts->min_y; - calib->max_y = dts->max_y; - calib->flip_x = dts->flip_x; - calib->flip_y = dts->flip_y; - calib->rotation = dts->rotation; - calib->button_threshold = dts->button_threshold; - - if (client->swapped) { - swaps(&calib->control, n); - swaps(&calib->length, n); - swapl(&calib->min_x, n); - swapl(&calib->max_x, n); - swapl(&calib->min_y, n); - swapl(&calib->max_y, n); - swapl(&calib->flip_x, n); - swapl(&calib->flip_y, n); - swapl(&calib->rotation, n); - swapl(&calib->button_threshold, n); - } -} - -static void CopySwapDeviceAbsArea (ClientPtr client, AbsoluteClassPtr dts, - char *buf) -{ - char n; - xDeviceAbsAreaState *area = (xDeviceAbsAreaState *) buf; - - area->control = DEVICE_ABS_AREA; - area->length = sizeof(xDeviceAbsAreaState); - area->offset_x = dts->offset_x; - area->offset_y = dts->offset_y; - area->width = dts->width; - area->height = dts->height; - area->screen = dts->screen; - area->following = dts->following; - - if (client->swapped) { - swaps(&area->control, n); - swaps(&area->length, n); - swapl(&area->offset_x, n); - swapl(&area->offset_y, n); - swapl(&area->width, n); - swapl(&area->height, n); - swapl(&area->screen, n); - swapl(&area->following, n); - } -} - static void CopySwapDeviceCore (ClientPtr client, DeviceIntPtr dev, char *buf) { char n; @@ -260,17 +202,8 @@ ProcXGetDeviceControl(ClientPtr client) (3 * sizeof(int) * dev->valuator->numAxes); break; case DEVICE_ABS_CALIB: - if (!dev->absolute) - return BadMatch; - - total_length = sizeof(xDeviceAbsCalibState); - break; case DEVICE_ABS_AREA: - if (!dev->absolute) - return BadMatch; - - total_length = sizeof(xDeviceAbsAreaState); - break; + return BadMatch; case DEVICE_CORE: total_length = sizeof(xDeviceCoreState); break; @@ -290,12 +223,6 @@ ProcXGetDeviceControl(ClientPtr client) case DEVICE_RESOLUTION: CopySwapDeviceResolution(client, dev->valuator, buf, total_length); break; - case DEVICE_ABS_CALIB: - CopySwapDeviceAbsCalib(client, dev->absolute, buf); - break; - case DEVICE_ABS_AREA: - CopySwapDeviceAbsArea(client, dev->absolute, buf); - break; case DEVICE_CORE: CopySwapDeviceCore(client, dev, buf); break; diff --git a/dix/devices.c b/dix/devices.c index 636b1b6..534931c 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -1336,34 +1336,10 @@ InitPointerAccelerationScheme(DeviceIntPtr dev, Bool InitAbsoluteClassDeviceStruct(DeviceIntPtr dev) { - AbsoluteClassPtr abs; - - abs = malloc(sizeof(AbsoluteClassRec)); - if (!abs) - return FALSE; - - /* we don't do anything sensible with these, but should */ - abs->min_x = NO_AXIS_LIMITS; - abs->min_y = NO_AXIS_LIMITS; - abs->max_x = NO_AXIS_LIMITS; - abs->max_y = NO_AXIS_LIMITS; - abs->flip_x = 0; - abs->flip_y = 0; - abs->rotation = 0; - abs->button_threshold = 0; - - abs->offset_x = 0; - abs->offset_y = 0; - abs->width = NO_AXIS_LIMITS; - abs->height = NO_AXIS_LIMITS; - abs->following = 0; - abs->screen = 0; - - abs->sourceid = dev->id; - - dev->absolute = abs; - - return TRUE; + /* This is an API-preserving noop. Instructions: Kill when no more drivers + * call it. The infrastructure behind hasn't really been used, so any calls + * are likely just a declaration that the device is absolute. */ + return FALSE; } Bool diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c index 3e6c2bc..e3bc4c5 100644 --- a/hw/kdrive/src/kinput.c +++ b/hw/kdrive/src/kinput.c @@ -477,7 +477,6 @@ KdPointerProc(DeviceIntPtr pDevice, int onoff) free(axes_labels); if (pi->inputClass == KD_TOUCHSCREEN) { - InitAbsoluteClassDeviceStruct(pDevice); xiclass = AtomFromName(XI_TOUCHSCREEN); } else { diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c index 93697a9..33276c3 100644 --- a/hw/xquartz/darwin.c +++ b/hw/xquartz/darwin.c @@ -314,7 +314,6 @@ static int DarwinMouseProc(DeviceIntPtr pPointer, int what) { (PtrCtrlProcPtr)NoopDDA, GetMotionHistorySize(), NAXES, axes_labels); - InitAbsoluteClassDeviceStruct(pPointer); // InitValuatorAxisStruct(pPointer, 0, 0, XQUARTZ_VALUATOR_LIMIT, 1, 0, 1, Absolute); // InitValuatorAxisStruct(pPointer, 1, 0, XQUARTZ_VALUATOR_LIMIT, 1, 0, 1, Absolute); break; @@ -362,7 +361,6 @@ static int DarwinTabletProc(DeviceIntPtr pPointer, int what) { GetMotionHistorySize(), NAXES, axes_labels); InitProximityClassDeviceStruct(pPointer); - InitAbsoluteClassDeviceStruct(pPointer); InitValuatorAxisStruct(pPointer, 0, axes_labels[0], 0, XQUARTZ_VALUATOR_LIMIT, 1, 0, 1, Absolute); InitValuatorAxisStruct(pPointer, 1, axes_labels[1], 0, XQUARTZ_VALUATOR_LIMIT, 1, 0, 1, Absolute); diff --git a/include/input.h b/include/input.h index bdef038..2bb85ff 100644 --- a/include/input.h +++ b/include/input.h @@ -311,7 +311,10 @@ extern _X_EXPORT Bool InitPointerAccelerationScheme( DeviceIntPtr /*dev*/, int /*scheme*/); -extern _X_EXPORT Bool InitAbsoluteClassDeviceStruct( +/** + * This is not implemented and just returns FALSE. + */ +extern _X_EXPORT _X_DEPRECATED Bool InitAbsoluteClassDeviceStruct( DeviceIntPtr /*device*/); extern _X_EXPORT Bool InitFocusClassDeviceStruct( diff --git a/include/inputstr.h b/include/inputstr.h index 8509eb0..f63df80 100644 --- a/include/inputstr.h +++ b/include/inputstr.h @@ -317,27 +317,6 @@ typedef struct _ProximityClassRec { char in_proximity; } ProximityClassRec, *ProximityClassPtr; -typedef struct _AbsoluteClassRec { - int sourceid; - /* Calibration. */ - int min_x; - int max_x; - int min_y; - int max_y; - int flip_x; - int flip_y; - int rotation; - int button_threshold; - - /* Area. */ - int offset_x; - int offset_y; - int width; - int height; - int screen; - XID following; -} AbsoluteClassRec, *AbsoluteClassPtr; - typedef struct _KbdFeedbackClassRec *KbdFeedbackPtr; typedef struct _PtrFeedbackClassRec *PtrFeedbackPtr; typedef struct _IntegerFeedbackClassRec *IntegerFeedbackPtr; @@ -392,7 +371,7 @@ typedef struct _ClassesRec { ButtonClassPtr button; FocusClassPtr focus; ProximityClassPtr proximity; - AbsoluteClassPtr absolute; + void* _pad0; /* keep ABI during AbsoluteClass removal */ KbdFeedbackPtr kbdfeed; PtrFeedbackPtr ptrfeed; IntegerFeedbackPtr intfeed; @@ -517,7 +496,7 @@ typedef struct _DeviceIntRec { ButtonClassPtr button; FocusClassPtr focus; ProximityClassPtr proximity; - AbsoluteClassPtr absolute; + void* _pad0; /* keep ABI, was pointer to abs class */ KbdFeedbackPtr kbdfeed; PtrFeedbackPtr ptrfeed; IntegerFeedbackPtr intfeed; -- 1.7.3.4
From 27ab95e7ad000bfb7751e6e208d96985cc53d423 Mon Sep 17 00:00:00 2001 From: Simon Thum <[email protected]> Date: Thu, 10 Mar 2011 21:03:40 +0100 Subject: [PATCH 6/6] xserver: remove AbsoluteClass, breaking the A(P|B)I Signed-off-by: Simon Thum <[email protected]> --- dix/devices.c | 9 --------- include/input.h | 6 ------ include/inputstr.h | 2 -- 3 files changed, 0 insertions(+), 17 deletions(-) diff --git a/dix/devices.c b/dix/devices.c index 534931c..fc2e468 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -1334,15 +1334,6 @@ InitPointerAccelerationScheme(DeviceIntPtr dev, } Bool -InitAbsoluteClassDeviceStruct(DeviceIntPtr dev) -{ - /* This is an API-preserving noop. Instructions: Kill when no more drivers - * call it. The infrastructure behind hasn't really been used, so any calls - * are likely just a declaration that the device is absolute. */ - return FALSE; -} - -Bool InitFocusClassDeviceStruct(DeviceIntPtr dev) { FocusClassPtr focc; diff --git a/include/input.h b/include/input.h index 2bb85ff..c88263c 100644 --- a/include/input.h +++ b/include/input.h @@ -311,12 +311,6 @@ extern _X_EXPORT Bool InitPointerAccelerationScheme( DeviceIntPtr /*dev*/, int /*scheme*/); -/** - * This is not implemented and just returns FALSE. - */ -extern _X_EXPORT _X_DEPRECATED Bool InitAbsoluteClassDeviceStruct( - DeviceIntPtr /*device*/); - extern _X_EXPORT Bool InitFocusClassDeviceStruct( DeviceIntPtr /*device*/); diff --git a/include/inputstr.h b/include/inputstr.h index f63df80..f10a3bd 100644 --- a/include/inputstr.h +++ b/include/inputstr.h @@ -371,7 +371,6 @@ typedef struct _ClassesRec { ButtonClassPtr button; FocusClassPtr focus; ProximityClassPtr proximity; - void* _pad0; /* keep ABI during AbsoluteClass removal */ KbdFeedbackPtr kbdfeed; PtrFeedbackPtr ptrfeed; IntegerFeedbackPtr intfeed; @@ -496,7 +495,6 @@ typedef struct _DeviceIntRec { ButtonClassPtr button; FocusClassPtr focus; ProximityClassPtr proximity; - void* _pad0; /* keep ABI, was pointer to abs class */ KbdFeedbackPtr kbdfeed; PtrFeedbackPtr ptrfeed; IntegerFeedbackPtr intfeed; -- 1.7.3.4
_______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
