diff options
Diffstat (limited to 'Xi')
-rw-r--r-- | Xi/chgdctl.c | 52 | ||||
-rw-r--r-- | Xi/getdctl.c | 87 | ||||
-rw-r--r-- | Xi/getdctl.h | 11 |
3 files changed, 113 insertions, 37 deletions
diff --git a/Xi/chgdctl.c b/Xi/chgdctl.c index ebe086548..32533c496 100644 --- a/Xi/chgdctl.c +++ b/Xi/chgdctl.c @@ -104,7 +104,8 @@ ProcXChangeDeviceControl(ClientPtr client) xChangeDeviceControlReply rep; AxisInfoPtr a; CARD32 *resolution; - xDeviceTSCtl *ts; + xDeviceAbsCalibCtl *calib; + xDeviceAbsAreaCtl *area; xDeviceCoreCtl *c; REQUEST(xChangeDeviceControlReq); @@ -170,25 +171,52 @@ ProcXChangeDeviceControl(ClientPtr client) return Success; } break; - case DEVICE_TOUCHSCREEN: - ts = (xDeviceTSCtl *)&stuff[1]; + case DEVICE_ABS_CALIB: + calib = (xDeviceAbsCalibCtl *)&stuff[1]; - if (ts->button_threshold < 0 || ts->button_threshold > 255) { + 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; + } else { + SendErrorToClient(client, IReqCode, X_ChangeDeviceControl, 0, + BadMatch); + return Success; + } + + 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; diff --git a/Xi/getdctl.c b/Xi/getdctl.c index 66342b340..61798f274 100644 --- a/Xi/getdctl.c +++ b/Xi/getdctl.c @@ -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 client, ValuatorClassPtr v, char *buf, } } -void CopySwapDeviceTouchscreen (ClientPtr client, TouchscreenClassPtr dts, +void CopySwapDeviceAbsCalib (ClientPtr client, AbsoluteClassPtr dts, + char *buf) +{ + register char n; + xDeviceAbsCalibState *calib = (xDeviceAbsCalibState *) buf; + + 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(&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; - xDeviceTSState *ts = (xDeviceTSState *) buf; + xDeviceAbsAreaState *area = (xDeviceAbsAreaState *) 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; + 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(&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(&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); } } diff --git a/Xi/getdctl.h b/Xi/getdctl.h index 1417d1b38..f6febb2b6 100644 --- a/Xi/getdctl.h +++ b/Xi/getdctl.h @@ -42,10 +42,13 @@ void CopySwapDeviceResolution(ClientPtr /* client */ , 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 */ , |