diff options
Diffstat (limited to 'packages/xorg-xserver/xserver-kdrive-xomap/fixups.patch')
-rw-r--r-- | packages/xorg-xserver/xserver-kdrive-xomap/fixups.patch | 446 |
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; |