summaryrefslogtreecommitdiff
path: root/packages/xorg-xserver/xserver-kdrive-xomap/fixups.patch
diff options
context:
space:
mode:
Diffstat (limited to 'packages/xorg-xserver/xserver-kdrive-xomap/fixups.patch')
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/fixups.patch446
1 files changed, 446 insertions, 0 deletions
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/fixups.patch b/packages/xorg-xserver/xserver-kdrive-xomap/fixups.patch
new file mode 100644
index 0000000000..09c9e8909c
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/fixups.patch
@@ -0,0 +1,446 @@
+---
+ Xi/chgdctl.c | 55 +++++++++++++++++++------
+ Xi/getdctl.c | 87 +++++++++++++++++++++++++++++++----------
+ Xi/getdctl.h | 11 +++--
+ Xi/stubs.c | 2
+ configure.ac | 2
+ dix/devices.c | 31 +++++++++-----
+ hw/kdrive/linux/tslib.c | 8 +--
+ hw/kdrive/src/kinput.c | 6 +-
+ hw/xfree86/common/xf86Xinput.c | 3 -
+ include/input.h | 2
+ include/inputstr.h | 18 +++++++-
+ 11 files changed, 162 insertions(+), 63 deletions(-)
+
+Index: xorg-server-1.1.99.3/Xi/chgdctl.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/Xi/chgdctl.c 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/Xi/chgdctl.c 2007-01-29 22:59:27.000000000 +0000
+@@ -104,8 +104,10 @@ ProcXChangeDeviceControl(ClientPtr clien
+ xChangeDeviceControlReply rep;
+ AxisInfoPtr a;
+ CARD32 *resolution;
+- xDeviceTSCtl *ts;
++ xDeviceAbsCalibCtl *calib;
++ xDeviceAbsAreaCtl *area;
+ xDeviceCoreCtl *c;
++ xDeviceEnableCtl *e;
+
+ REQUEST(xChangeDeviceControlReq);
+ REQUEST_AT_LEAST_SIZE(xChangeDeviceControlReq);
+@@ -170,25 +172,28 @@ ProcXChangeDeviceControl(ClientPtr clien
+ return Success;
+ }
+ break;
+- case DEVICE_TOUCHSCREEN:
+- ts = (xDeviceTSCtl *)&stuff[1];
+-
+- if (ts->button_threshold < 0 || ts->button_threshold > 255) {
++ case DEVICE_ABS_CALIB:
++ calib = (xDeviceAbsCalibCtl *)&stuff[1];
++
++ if (calib->button_threshold < 0 || calib->button_threshold > 255) {
+ SendErrorToClient(client, IReqCode, X_ChangeDeviceControl, 0,
+ BadValue);
+ return Success;
+ }
+
+- status = ChangeDeviceControl(client, dev, (xDeviceCtl *) ts);
++ status = ChangeDeviceControl(client, dev, (xDeviceCtl *) calib);
+
+ if (status == Success) {
+- dev->touchscreen->min_x = ts->min_x;
+- dev->touchscreen->max_x = ts->max_x;
+- dev->touchscreen->min_y = ts->min_y;
+- dev->touchscreen->max_y = ts->max_y;
+- dev->touchscreen->button_threshold = ts->button_threshold;
+- } else if (status == DeviceBusy) {
+- rep.status = DeviceBusy;
++ 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;
++ } else if (status == DeviceBusy || status == BadValue) {
++ rep.status = status;
+ WriteReplyToClient(client, sizeof(xChangeDeviceControlReply),
+ &rep);
+ return Success;
+@@ -199,6 +204,30 @@ ProcXChangeDeviceControl(ClientPtr clien
+ }
+
+ 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;
++ } else if (status == DeviceBusy || status == BadValue) {
++ rep.status = status;
++ WriteReplyToClient(client, sizeof(xChangeDeviceControlReply),
++ &rep);
++ return Success;
++ } else {
++ SendErrorToClient(client, IReqCode, X_ChangeDeviceControl, 0,
++ BadMatch);
++ return Success;
++ }
++
++ break;
+ case DEVICE_CORE:
+ c = (xDeviceCoreCtl *)&stuff[1];
+
+Index: xorg-server-1.1.99.3/Xi/getdctl.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/Xi/getdctl.c 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/Xi/getdctl.c 2007-01-29 22:59:27.000000000 +0000
+@@ -124,14 +124,23 @@ ProcXGetDeviceControl(ClientPtr client)
+ total_length = sizeof(xDeviceResolutionState) +
+ (3 * sizeof(int) * dev->valuator->numAxes);
+ break;
+- case DEVICE_TOUCHSCREEN:
+- if (!dev->touchscreen) {
++ case DEVICE_ABS_CALIB:
++ if (!dev->absolute) {
+ SendErrorToClient(client, IReqCode, X_GetDeviceControl, 0,
+ BadMatch);
+ return Success;
+ }
+
+- total_length = sizeof(xDeviceTSCtl);
++ total_length = sizeof(xDeviceAbsCalibCtl);
++ break;
++ case DEVICE_ABS_AREA:
++ if (!dev->absolute) {
++ SendErrorToClient(client, IReqCode, X_GetDeviceControl, 0,
++ BadMatch);
++ return Success;
++ }
++
++ total_length = sizeof(xDeviceAbsAreaCtl);
+ break;
+ case DEVICE_CORE:
+ total_length = sizeof(xDeviceCoreCtl);
+@@ -152,8 +161,11 @@ ProcXGetDeviceControl(ClientPtr client)
+ case DEVICE_RESOLUTION:
+ CopySwapDeviceResolution(client, dev->valuator, buf, total_length);
+ break;
+- case DEVICE_TOUCHSCREEN:
+- CopySwapDeviceTouchscreen(client, dev->touchscreen, buf);
++ 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);
+@@ -206,28 +218,61 @@ CopySwapDeviceResolution(ClientPtr clien
+ }
+ }
+
+-void CopySwapDeviceTouchscreen (ClientPtr client, TouchscreenClassPtr dts,
++void CopySwapDeviceAbsCalib (ClientPtr client, AbsoluteClassPtr dts,
+ char *buf)
+ {
+ register char n;
+- xDeviceTSState *ts = (xDeviceTSState *) buf;
++ xDeviceAbsCalibState *calib = (xDeviceAbsCalibState *) buf;
+
+- ts->control = DEVICE_TOUCHSCREEN;
+- ts->length = sizeof(ts);
+- ts->min_x = dts->min_x;
+- ts->max_x = dts->max_x;
+- ts->min_y = dts->min_y;
+- ts->max_y = dts->max_y;
+- ts->button_threshold = dts->button_threshold;
++ calib->control = DEVICE_ABS_CALIB;
++ calib->length = sizeof(calib);
++ 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(&ts->control, n);
+- swaps(&ts->length, n);
+- swapl(&ts->min_x, n);
+- swapl(&ts->max_x, n);
+- swapl(&ts->min_y, n);
+- swapl(&ts->max_y, n);
+- swapl(&ts->button_threshold, n);
++ 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);
++ }
++}
++
++void CopySwapDeviceAbsArea (ClientPtr client, AbsoluteClassPtr dts,
++ char *buf)
++{
++ register char n;
++ xDeviceAbsAreaState *area = (xDeviceAbsAreaState *) buf;
++
++ area->control = DEVICE_ABS_AREA;
++ area->length = sizeof(area);
++ 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);
+ }
+ }
+
+Index: xorg-server-1.1.99.3/Xi/getdctl.h
+===================================================================
+--- xorg-server-1.1.99.3.orig/Xi/getdctl.h 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/Xi/getdctl.h 2007-01-29 22:59:27.000000000 +0000
+@@ -42,10 +42,13 @@ void CopySwapDeviceResolution(ClientPtr
+ int /* length */
+ );
+
+-void CopySwapDeviceTouchscreen(ClientPtr /* client */ ,
+- TouchscreenClassPtr /* ts */ ,
+- char * /* buf */
+- );
++void CopySwapDeviceAbsCalib (ClientPtr client,
++ AbsoluteClassPtr dts,
++ char *buf);
++
++void CopySwapDeviceAbsArea (ClientPtr client,
++ AbsoluteClassPtr dts,
++ char *buf);
+
+ void CopySwapDeviceCore(ClientPtr /* client */ ,
+ DeviceIntPtr /* dev */ ,
+Index: xorg-server-1.1.99.3/Xi/stubs.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/Xi/stubs.c 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/Xi/stubs.c 2007-01-29 22:59:27.000000000 +0000
+@@ -287,7 +287,7 @@ ChangeDeviceControl(register ClientPtr c
+ switch (control->control) {
+ case DEVICE_RESOLUTION:
+ return (BadMatch);
+- case DEVICE_TOUCHSCREEN:
++ case DEVICE_ABS_CALIB:
+ return (BadMatch);
+ case DEVICE_CORE:
+ return (BadMatch);
+Index: xorg-server-1.1.99.3/dix/devices.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/dix/devices.c 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/dix/devices.c 2007-01-29 22:59:27.000000000 +0000
+@@ -117,7 +117,7 @@ AddInputDevice(DeviceProc deviceProc, Bo
+ dev->button = (ButtonClassPtr)NULL;
+ dev->focus = (FocusClassPtr)NULL;
+ dev->proximity = (ProximityClassPtr)NULL;
+- dev->touchscreen = (TouchscreenClassPtr)NULL;
++ dev->absolute = (AbsoluteClassPtr)NULL;
+ dev->kbdfeed = (KbdFeedbackPtr)NULL;
+ dev->ptrfeed = (PtrFeedbackPtr)NULL;
+ dev->intfeed = (IntegerFeedbackPtr)NULL;
+@@ -821,22 +821,31 @@ InitValuatorClassDeviceStruct(DeviceIntP
+ }
+
+ _X_EXPORT Bool
+-InitTouchscreenClassDeviceStruct(DeviceIntPtr dev)
++InitAbsoluteClassDeviceStruct(DeviceIntPtr dev)
+ {
+- register TouchscreenClassPtr tsc;
++ register AbsoluteClassPtr abs;
+
+- tsc = (TouchscreenClassPtr)xalloc(sizeof(TouchscreenClassRec));
+- if (!tsc)
++ abs = (AbsoluteClassPtr)xalloc(sizeof(AbsoluteClassRec));
++ if (!abs)
+ return FALSE;
+
+ /* we don't do anything sensible with these, but should */
+- tsc->min_x = -1;
+- tsc->min_y = -1;
+- tsc->max_x = -1;
+- tsc->max_y = -1;
++ abs->min_x = -1;
++ abs->min_y = -1;
++ abs->max_x = -1;
++ abs->max_y = -1;
++ abs->flip_x = 0;
++ abs->flip_y = 0;
++ abs->rotation = 0;
++ abs->button_threshold = 0;
+
+- tsc->button_threshold = 0;
+- dev->touchscreen = tsc;
++ abs->offset_x = 0;
++ abs->offset_y = 0;
++ abs->width = -1;
++ abs->height = -1;
++ abs->following = 0;
++
++ dev->absolute = abs;
+
+ return TRUE;
+ }
+Index: xorg-server-1.1.99.3/hw/xfree86/common/xf86Xinput.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/hw/xfree86/common/xf86Xinput.c 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/hw/xfree86/common/xf86Xinput.c 2007-01-29 22:59:27.000000000 +0000
+@@ -538,7 +538,8 @@ ChangeDeviceControl (ClientPtr client, D
+ switch (control->control) {
+ case DEVICE_CORE:
+ case DEVICE_RESOLUTION:
+- case DEVICE_TOUCHSCREEN:
++ case DEVICE_ABS_CALIB:
++ case DEVICE_ABS_AREA:
+ return Success;
+ default:
+ return BadMatch;
+Index: xorg-server-1.1.99.3/include/input.h
+===================================================================
+--- xorg-server-1.1.99.3.orig/include/input.h 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/include/input.h 2007-01-29 22:59:27.000000000 +0000
+@@ -238,7 +238,7 @@ extern Bool InitValuatorClassDeviceStruc
+ int /*numMotionEvents*/,
+ int /*mode*/);
+
+-extern Bool InitTouchscreenClassDeviceStruct(
++extern Bool InitAbsoluteClassDeviceStruct(
+ DeviceIntPtr /*device*/);
+
+ extern Bool InitFocusClassDeviceStruct(
+Index: xorg-server-1.1.99.3/include/inputstr.h
+===================================================================
+--- xorg-server-1.1.99.3.orig/include/inputstr.h 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/include/inputstr.h 2007-01-29 22:59:27.000000000 +0000
+@@ -185,13 +185,25 @@ typedef struct _ProximityClassRec {
+ char pad;
+ } ProximityClassRec, *ProximityClassPtr;
+
+-typedef struct _TouchscreenClassRec {
++typedef struct _AbsoluteClassRec {
++ /* Calibration. */
+ int min_x;
+ int max_x;
+ int min_y;
+ int max_y;
++ int flip_x;
++ int flip_y;
++ int rotation;
+ int button_threshold;
+-} TouchscreenClassRec, *TouchscreenClassPtr;
++
++ /* 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;
+@@ -293,7 +305,7 @@ typedef struct _DeviceIntRec {
+ ButtonClassPtr button;
+ FocusClassPtr focus;
+ ProximityClassPtr proximity;
+- TouchscreenClassPtr touchscreen;
++ AbsoluteClassPtr absolute;
+ KbdFeedbackPtr kbdfeed;
+ PtrFeedbackPtr ptrfeed;
+ IntegerFeedbackPtr intfeed;
+Index: xorg-server-1.1.99.3/configure.ac
+===================================================================
+--- xorg-server-1.1.99.3.orig/configure.ac 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/configure.ac 2007-01-29 22:59:27.000000000 +0000
+@@ -1586,7 +1586,7 @@ if test "$KDRIVE" = yes; then
+ #KDRIVE_PURE_LIBS="$DIX_LIB $OS_LIB $FB_LIB $XEXT_LIB $MIEXT_DAMAGE_LIB \
+ # $MIEXT_SHADOW_LIB $XPSTUBS_LIB"
+ KDRIVE_XKB_DDX_LIB='$(top_builddir)/hw/kdrive/src/libkdrivexkb.a'
+- KDRIVE_PURE_LIBS="$FB_LIB $MI_LIB $FIXES_LIB $XEXT_LIB $DBE_LIB $XTRAP_LIB $RECORD_LIB $GLX_LIBS $RENDER_LIB $RANDR_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $KDRIVE_XKB_DDX_LIB $XKB_LIB $KDRIVE_XKB_DDX_LIB$COMPOSITE_LIB $XPSTUBS_LIB $OS_LIB $CONFIG_LIB"
++ KDRIVE_PURE_LIBS="$FB_LIB $MI_LIB $FIXES_LIB $XEXT_LIB $DBE_LIB $XTRAP_LIB $RECORD_LIB $GLX_LIBS $RENDER_LIB $RANDR_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $KDRIVE_XKB_DDX_LIB $XKB_LIB $KDRIVE_XKB_DDX_LIB $COMPOSITE_LIB $XPSTUBS_LIB $OS_LIB $CONFIG_LIB"
+ KDRIVE_LIB='$(top_builddir)/hw/kdrive/src/libkdrive.a'
+ KDRIVE_OS_LIB='$(top_builddir)/hw/kdrive/linux/liblinux.a'
+ KDRIVE_STUB_LIB='$(top_builddir)/hw/kdrive/src/libkdrivestubs.a'
+Index: xorg-server-1.1.99.3/hw/kdrive/linux/tslib.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/hw/kdrive/linux/tslib.c 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/hw/kdrive/linux/tslib.c 2007-01-29 22:59:27.000000000 +0000
+@@ -94,7 +94,7 @@ TsRead (int fd, void *closure)
+ event.pressure);
+ discard = 0;
+ if (event.pressure) {
+- if (event.pressure > pi->dixdev->touchscreen->button_threshold)
++ if (event.pressure > pi->dixdev->absolute->button_threshold)
+ flags = KD_BUTTON_8;
+ else
+ flags = KD_BUTTON_1;
+@@ -356,9 +356,9 @@ TslibEnable (KdPointerInfo *pi)
+ close(private->fd);
+ return BadAlloc;
+ }
+- if (pi->dixdev && pi->dixdev->touchscreen &&
+- pi->dixdev->touchscreen->button_threshold == 0)
+- pi->dixdev->touchscreen->button_threshold = 115;
++ if (pi->dixdev && pi->dixdev->absolute &&
++ pi->dixdev->absolute->button_threshold == 0)
++ pi->dixdev->absolute->button_threshold = 115;
+
+ DebugF("[tslib/TslibEnable] successfully enabled %s\n", pi->path);
+ KdRegisterFd(private->fd, TsRead, pi);
+Index: xorg-server-1.1.99.3/hw/kdrive/src/kinput.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/hw/kdrive/src/kinput.c 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/hw/kdrive/src/kinput.c 2007-01-29 22:59:27.000000000 +0000
+@@ -444,7 +444,7 @@ KdPointerProc(DeviceIntPtr pDevice, int
+
+ #ifdef XINPUT
+ if (pi->inputClass == KD_TOUCHSCREEN) {
+- InitTouchscreenClassDeviceStruct(pDevice);
++ InitAbsoluteClassDeviceStruct(pDevice);
+ xiclass = AtomFromName(XI_TOUCHSCREEN);
+ }
+ else {
+@@ -2323,8 +2323,8 @@ ChangeDeviceControl(register ClientPtr c
+ /* FIXME do something more intelligent here */
+ return BadMatch;
+
+- case DEVICE_TOUCHSCREEN:
+- if (!pDev->touchscreen)
++ case DEVICE_ABS_CALIB:
++ if (!pDev->absolute)
+ return BadDevice;
+ else
+ return Success;