113
108
REQUEST(xChangeDeviceControlReq);
114
109
REQUEST_AT_LEAST_SIZE(xChangeDeviceControlReq);
116
len = stuff->length - (sizeof(xChangeDeviceControlReq) >>2);
117
dev = LookupDeviceIntRec (stuff->deviceid);
120
SendErrorToClient (client, IReqCode, X_ChangeDeviceControl, 0,
111
len = stuff->length - (sizeof(xChangeDeviceControlReq) >> 2);
112
dev = LookupDeviceIntRec(stuff->deviceid);
114
SendErrorToClient(client, IReqCode, X_ChangeDeviceControl, 0,
125
119
rep.repType = X_Reply;
126
120
rep.RepType = X_ChangeDeviceControl;
128
122
rep.sequenceNumber = client->sequence;
130
switch (stuff->control)
132
case DEVICE_RESOLUTION:
133
r = (xDeviceResolutionCtl *) &stuff[1];
134
if ((len < (sizeof(xDeviceResolutionCtl)>>2)) ||
135
(len != (sizeof(xDeviceResolutionCtl)>>2) +
138
SendErrorToClient (client, IReqCode, X_ChangeDeviceControl,
144
SendErrorToClient (client, IReqCode, X_ChangeDeviceControl, 0,
148
if ((dev->grab) && !SameClient(dev->grab, client))
150
rep.status = AlreadyGrabbed;
151
WriteReplyToClient(client, sizeof(xChangeDeviceControlReply),
155
resolution = (CARD32 *) (r + 1);
156
if (r->first_valuator + r->num_valuators > dev->valuator->numAxes)
158
SendErrorToClient (client, IReqCode, X_ChangeDeviceControl, 0,
162
status = ChangeDeviceControl(client, dev, (xDeviceCtl*) r);
163
if (status == Success)
165
a = &dev->valuator->axes[r->first_valuator];
166
for (i=0; i<r->num_valuators; i++)
167
if (*(resolution+i) < (a+i)->min_resolution ||
168
*(resolution+i) > (a+i)->max_resolution)
170
SendErrorToClient (client, IReqCode,
171
X_ChangeDeviceControl, 0, BadValue);
174
for (i=0; i<r->num_valuators; i++)
175
(a++)->resolution = *resolution++;
177
else if (status == DeviceBusy)
179
rep.status = DeviceBusy;
180
WriteReplyToClient(client, sizeof(xChangeDeviceControlReply),
186
SendErrorToClient (client, IReqCode, X_ChangeDeviceControl, 0,
192
SendErrorToClient (client, IReqCode, X_ChangeDeviceControl, 0,
124
switch (stuff->control) {
125
case DEVICE_RESOLUTION:
126
r = (xDeviceResolutionCtl *) & stuff[1];
127
if ((len < (sizeof(xDeviceResolutionCtl) >> 2)) ||
128
(len != (sizeof(xDeviceResolutionCtl) >> 2) + r->num_valuators)) {
129
SendErrorToClient(client, IReqCode, X_ChangeDeviceControl,
133
if (!dev->valuator) {
134
SendErrorToClient(client, IReqCode, X_ChangeDeviceControl, 0,
138
if ((dev->grab) && !SameClient(dev->grab, client)) {
139
rep.status = AlreadyGrabbed;
140
WriteReplyToClient(client, sizeof(xChangeDeviceControlReply), &rep);
143
resolution = (CARD32 *) (r + 1);
144
if (r->first_valuator + r->num_valuators > dev->valuator->numAxes) {
145
SendErrorToClient(client, IReqCode, X_ChangeDeviceControl, 0,
149
status = ChangeDeviceControl(client, dev, (xDeviceCtl *) r);
150
if (status == Success) {
151
a = &dev->valuator->axes[r->first_valuator];
152
for (i = 0; i < r->num_valuators; i++)
153
if (*(resolution + i) < (a + i)->min_resolution ||
154
*(resolution + i) > (a + i)->max_resolution) {
155
SendErrorToClient(client, IReqCode,
156
X_ChangeDeviceControl, 0, BadValue);
159
for (i = 0; i < r->num_valuators; i++)
160
(a++)->resolution = *resolution++;
161
} else if (status == DeviceBusy) {
162
rep.status = DeviceBusy;
163
WriteReplyToClient(client, sizeof(xChangeDeviceControlReply), &rep);
166
SendErrorToClient(client, IReqCode, X_ChangeDeviceControl, 0,
172
SendErrorToClient(client, IReqCode, X_ChangeDeviceControl, 0, BadValue);
196
175
WriteReplyToClient(client, sizeof(xChangeDeviceControlReply), &rep);
200
179
/***********************************************************************