1*4882a593Smuzhiyun /************************************************************
2*4882a593Smuzhiyun Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
3*4882a593Smuzhiyun
4*4882a593Smuzhiyun Permission to use, copy, modify, and distribute this
5*4882a593Smuzhiyun software and its documentation for any purpose and without
6*4882a593Smuzhiyun fee is hereby granted, provided that the above copyright
7*4882a593Smuzhiyun notice appear in all copies and that both that copyright
8*4882a593Smuzhiyun notice and this permission notice appear in supporting
9*4882a593Smuzhiyun documentation, and that the name of Silicon Graphics not be
10*4882a593Smuzhiyun used in advertising or publicity pertaining to distribution
11*4882a593Smuzhiyun of the software without specific prior written permission.
12*4882a593Smuzhiyun Silicon Graphics makes no representation about the suitability
13*4882a593Smuzhiyun of this software for any purpose. It is provided "as is"
14*4882a593Smuzhiyun without any express or implied warranty.
15*4882a593Smuzhiyun
16*4882a593Smuzhiyun SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
17*4882a593Smuzhiyun SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
18*4882a593Smuzhiyun AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
19*4882a593Smuzhiyun GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
20*4882a593Smuzhiyun DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
21*4882a593Smuzhiyun DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
22*4882a593Smuzhiyun OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
23*4882a593Smuzhiyun THE USE OR PERFORMANCE OF THIS SOFTWARE.
24*4882a593Smuzhiyun
25*4882a593Smuzhiyun ********************************************************/
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun #ifdef HAVE_DIX_CONFIG_H
28*4882a593Smuzhiyun #include <dix-config.h>
29*4882a593Smuzhiyun #endif
30*4882a593Smuzhiyun
31*4882a593Smuzhiyun #include "stdio.h"
32*4882a593Smuzhiyun #include <X11/X.h>
33*4882a593Smuzhiyun #include <X11/Xproto.h>
34*4882a593Smuzhiyun #include "misc.h"
35*4882a593Smuzhiyun #include "inputstr.h"
36*4882a593Smuzhiyun #include <xkbsrv.h>
37*4882a593Smuzhiyun #include "xkbstr.h"
38*4882a593Smuzhiyun #include "extnsionst.h"
39*4882a593Smuzhiyun #include "xkb.h"
40*4882a593Smuzhiyun
41*4882a593Smuzhiyun /*
42*4882a593Smuzhiyun * REQUEST SWAPPING
43*4882a593Smuzhiyun */
44*4882a593Smuzhiyun static int _X_COLD
SProcXkbUseExtension(ClientPtr client)45*4882a593Smuzhiyun SProcXkbUseExtension(ClientPtr client)
46*4882a593Smuzhiyun {
47*4882a593Smuzhiyun REQUEST(xkbUseExtensionReq);
48*4882a593Smuzhiyun
49*4882a593Smuzhiyun swaps(&stuff->length);
50*4882a593Smuzhiyun REQUEST_SIZE_MATCH(xkbUseExtensionReq);
51*4882a593Smuzhiyun swaps(&stuff->wantedMajor);
52*4882a593Smuzhiyun swaps(&stuff->wantedMinor);
53*4882a593Smuzhiyun return ProcXkbUseExtension(client);
54*4882a593Smuzhiyun }
55*4882a593Smuzhiyun
56*4882a593Smuzhiyun static int _X_COLD
SProcXkbSelectEvents(ClientPtr client)57*4882a593Smuzhiyun SProcXkbSelectEvents(ClientPtr client)
58*4882a593Smuzhiyun {
59*4882a593Smuzhiyun REQUEST(xkbSelectEventsReq);
60*4882a593Smuzhiyun
61*4882a593Smuzhiyun swaps(&stuff->length);
62*4882a593Smuzhiyun REQUEST_AT_LEAST_SIZE(xkbSelectEventsReq);
63*4882a593Smuzhiyun swaps(&stuff->deviceSpec);
64*4882a593Smuzhiyun swaps(&stuff->affectWhich);
65*4882a593Smuzhiyun swaps(&stuff->clear);
66*4882a593Smuzhiyun swaps(&stuff->selectAll);
67*4882a593Smuzhiyun swaps(&stuff->affectMap);
68*4882a593Smuzhiyun swaps(&stuff->map);
69*4882a593Smuzhiyun if ((stuff->affectWhich & (~XkbMapNotifyMask)) != 0) {
70*4882a593Smuzhiyun union {
71*4882a593Smuzhiyun BOOL *b;
72*4882a593Smuzhiyun CARD8 *c8;
73*4882a593Smuzhiyun CARD16 *c16;
74*4882a593Smuzhiyun CARD32 *c32;
75*4882a593Smuzhiyun } from;
76*4882a593Smuzhiyun register unsigned bit, ndx, maskLeft, dataLeft, size;
77*4882a593Smuzhiyun
78*4882a593Smuzhiyun from.c8 = (CARD8 *) &stuff[1];
79*4882a593Smuzhiyun dataLeft = (client->req_len * 4) - SIZEOF(xkbSelectEventsReq);
80*4882a593Smuzhiyun maskLeft = (stuff->affectWhich & (~XkbMapNotifyMask));
81*4882a593Smuzhiyun for (ndx = 0, bit = 1; (maskLeft != 0); ndx++, bit <<= 1) {
82*4882a593Smuzhiyun if (((bit & maskLeft) == 0) || (ndx == XkbMapNotify))
83*4882a593Smuzhiyun continue;
84*4882a593Smuzhiyun maskLeft &= ~bit;
85*4882a593Smuzhiyun if ((stuff->selectAll & bit) || (stuff->clear & bit))
86*4882a593Smuzhiyun continue;
87*4882a593Smuzhiyun switch (ndx) {
88*4882a593Smuzhiyun case XkbNewKeyboardNotify:
89*4882a593Smuzhiyun case XkbStateNotify:
90*4882a593Smuzhiyun case XkbNamesNotify:
91*4882a593Smuzhiyun case XkbAccessXNotify:
92*4882a593Smuzhiyun case XkbExtensionDeviceNotify:
93*4882a593Smuzhiyun size = 2;
94*4882a593Smuzhiyun break;
95*4882a593Smuzhiyun case XkbControlsNotify:
96*4882a593Smuzhiyun case XkbIndicatorStateNotify:
97*4882a593Smuzhiyun case XkbIndicatorMapNotify:
98*4882a593Smuzhiyun size = 4;
99*4882a593Smuzhiyun break;
100*4882a593Smuzhiyun case XkbBellNotify:
101*4882a593Smuzhiyun case XkbActionMessage:
102*4882a593Smuzhiyun case XkbCompatMapNotify:
103*4882a593Smuzhiyun size = 1;
104*4882a593Smuzhiyun break;
105*4882a593Smuzhiyun default:
106*4882a593Smuzhiyun client->errorValue = _XkbErrCode2(0x1, bit);
107*4882a593Smuzhiyun return BadValue;
108*4882a593Smuzhiyun }
109*4882a593Smuzhiyun if (dataLeft < (size * 2))
110*4882a593Smuzhiyun return BadLength;
111*4882a593Smuzhiyun if (size == 2) {
112*4882a593Smuzhiyun swaps(&from.c16[0]);
113*4882a593Smuzhiyun swaps(&from.c16[1]);
114*4882a593Smuzhiyun }
115*4882a593Smuzhiyun else if (size == 4) {
116*4882a593Smuzhiyun swapl(&from.c32[0]);
117*4882a593Smuzhiyun swapl(&from.c32[1]);
118*4882a593Smuzhiyun }
119*4882a593Smuzhiyun else {
120*4882a593Smuzhiyun size = 2;
121*4882a593Smuzhiyun }
122*4882a593Smuzhiyun from.c8 += (size * 2);
123*4882a593Smuzhiyun dataLeft -= (size * 2);
124*4882a593Smuzhiyun }
125*4882a593Smuzhiyun if (dataLeft > 2) {
126*4882a593Smuzhiyun ErrorF("[xkb] Extra data (%d bytes) after SelectEvents\n",
127*4882a593Smuzhiyun dataLeft);
128*4882a593Smuzhiyun return BadLength;
129*4882a593Smuzhiyun }
130*4882a593Smuzhiyun }
131*4882a593Smuzhiyun return ProcXkbSelectEvents(client);
132*4882a593Smuzhiyun }
133*4882a593Smuzhiyun
134*4882a593Smuzhiyun static int _X_COLD
SProcXkbBell(ClientPtr client)135*4882a593Smuzhiyun SProcXkbBell(ClientPtr client)
136*4882a593Smuzhiyun {
137*4882a593Smuzhiyun REQUEST(xkbBellReq);
138*4882a593Smuzhiyun
139*4882a593Smuzhiyun swaps(&stuff->length);
140*4882a593Smuzhiyun REQUEST_SIZE_MATCH(xkbBellReq);
141*4882a593Smuzhiyun swaps(&stuff->deviceSpec);
142*4882a593Smuzhiyun swaps(&stuff->bellClass);
143*4882a593Smuzhiyun swaps(&stuff->bellID);
144*4882a593Smuzhiyun swapl(&stuff->name);
145*4882a593Smuzhiyun swapl(&stuff->window);
146*4882a593Smuzhiyun swaps(&stuff->pitch);
147*4882a593Smuzhiyun swaps(&stuff->duration);
148*4882a593Smuzhiyun return ProcXkbBell(client);
149*4882a593Smuzhiyun }
150*4882a593Smuzhiyun
151*4882a593Smuzhiyun static int _X_COLD
SProcXkbGetState(ClientPtr client)152*4882a593Smuzhiyun SProcXkbGetState(ClientPtr client)
153*4882a593Smuzhiyun {
154*4882a593Smuzhiyun REQUEST(xkbGetStateReq);
155*4882a593Smuzhiyun
156*4882a593Smuzhiyun swaps(&stuff->length);
157*4882a593Smuzhiyun REQUEST_SIZE_MATCH(xkbGetStateReq);
158*4882a593Smuzhiyun swaps(&stuff->deviceSpec);
159*4882a593Smuzhiyun return ProcXkbGetState(client);
160*4882a593Smuzhiyun }
161*4882a593Smuzhiyun
162*4882a593Smuzhiyun static int _X_COLD
SProcXkbLatchLockState(ClientPtr client)163*4882a593Smuzhiyun SProcXkbLatchLockState(ClientPtr client)
164*4882a593Smuzhiyun {
165*4882a593Smuzhiyun REQUEST(xkbLatchLockStateReq);
166*4882a593Smuzhiyun
167*4882a593Smuzhiyun swaps(&stuff->length);
168*4882a593Smuzhiyun REQUEST_SIZE_MATCH(xkbLatchLockStateReq);
169*4882a593Smuzhiyun swaps(&stuff->deviceSpec);
170*4882a593Smuzhiyun swaps(&stuff->groupLatch);
171*4882a593Smuzhiyun return ProcXkbLatchLockState(client);
172*4882a593Smuzhiyun }
173*4882a593Smuzhiyun
174*4882a593Smuzhiyun static int _X_COLD
SProcXkbGetControls(ClientPtr client)175*4882a593Smuzhiyun SProcXkbGetControls(ClientPtr client)
176*4882a593Smuzhiyun {
177*4882a593Smuzhiyun REQUEST(xkbGetControlsReq);
178*4882a593Smuzhiyun
179*4882a593Smuzhiyun swaps(&stuff->length);
180*4882a593Smuzhiyun REQUEST_SIZE_MATCH(xkbGetControlsReq);
181*4882a593Smuzhiyun swaps(&stuff->deviceSpec);
182*4882a593Smuzhiyun return ProcXkbGetControls(client);
183*4882a593Smuzhiyun }
184*4882a593Smuzhiyun
185*4882a593Smuzhiyun static int _X_COLD
SProcXkbSetControls(ClientPtr client)186*4882a593Smuzhiyun SProcXkbSetControls(ClientPtr client)
187*4882a593Smuzhiyun {
188*4882a593Smuzhiyun REQUEST(xkbSetControlsReq);
189*4882a593Smuzhiyun
190*4882a593Smuzhiyun swaps(&stuff->length);
191*4882a593Smuzhiyun REQUEST_SIZE_MATCH(xkbSetControlsReq);
192*4882a593Smuzhiyun swaps(&stuff->deviceSpec);
193*4882a593Smuzhiyun swaps(&stuff->affectInternalVMods);
194*4882a593Smuzhiyun swaps(&stuff->internalVMods);
195*4882a593Smuzhiyun swaps(&stuff->affectIgnoreLockVMods);
196*4882a593Smuzhiyun swaps(&stuff->ignoreLockVMods);
197*4882a593Smuzhiyun swaps(&stuff->axOptions);
198*4882a593Smuzhiyun swapl(&stuff->affectEnabledCtrls);
199*4882a593Smuzhiyun swapl(&stuff->enabledCtrls);
200*4882a593Smuzhiyun swapl(&stuff->changeCtrls);
201*4882a593Smuzhiyun swaps(&stuff->repeatDelay);
202*4882a593Smuzhiyun swaps(&stuff->repeatInterval);
203*4882a593Smuzhiyun swaps(&stuff->slowKeysDelay);
204*4882a593Smuzhiyun swaps(&stuff->debounceDelay);
205*4882a593Smuzhiyun swaps(&stuff->mkDelay);
206*4882a593Smuzhiyun swaps(&stuff->mkInterval);
207*4882a593Smuzhiyun swaps(&stuff->mkTimeToMax);
208*4882a593Smuzhiyun swaps(&stuff->mkMaxSpeed);
209*4882a593Smuzhiyun swaps(&stuff->mkCurve);
210*4882a593Smuzhiyun swaps(&stuff->axTimeout);
211*4882a593Smuzhiyun swapl(&stuff->axtCtrlsMask);
212*4882a593Smuzhiyun swapl(&stuff->axtCtrlsValues);
213*4882a593Smuzhiyun swaps(&stuff->axtOptsMask);
214*4882a593Smuzhiyun swaps(&stuff->axtOptsValues);
215*4882a593Smuzhiyun return ProcXkbSetControls(client);
216*4882a593Smuzhiyun }
217*4882a593Smuzhiyun
218*4882a593Smuzhiyun static int _X_COLD
SProcXkbGetMap(ClientPtr client)219*4882a593Smuzhiyun SProcXkbGetMap(ClientPtr client)
220*4882a593Smuzhiyun {
221*4882a593Smuzhiyun REQUEST(xkbGetMapReq);
222*4882a593Smuzhiyun
223*4882a593Smuzhiyun swaps(&stuff->length);
224*4882a593Smuzhiyun REQUEST_SIZE_MATCH(xkbGetMapReq);
225*4882a593Smuzhiyun swaps(&stuff->deviceSpec);
226*4882a593Smuzhiyun swaps(&stuff->full);
227*4882a593Smuzhiyun swaps(&stuff->partial);
228*4882a593Smuzhiyun swaps(&stuff->virtualMods);
229*4882a593Smuzhiyun return ProcXkbGetMap(client);
230*4882a593Smuzhiyun }
231*4882a593Smuzhiyun
232*4882a593Smuzhiyun static int _X_COLD
SProcXkbSetMap(ClientPtr client)233*4882a593Smuzhiyun SProcXkbSetMap(ClientPtr client)
234*4882a593Smuzhiyun {
235*4882a593Smuzhiyun REQUEST(xkbSetMapReq);
236*4882a593Smuzhiyun
237*4882a593Smuzhiyun swaps(&stuff->length);
238*4882a593Smuzhiyun REQUEST_AT_LEAST_SIZE(xkbSetMapReq);
239*4882a593Smuzhiyun swaps(&stuff->deviceSpec);
240*4882a593Smuzhiyun swaps(&stuff->present);
241*4882a593Smuzhiyun swaps(&stuff->flags);
242*4882a593Smuzhiyun swaps(&stuff->totalSyms);
243*4882a593Smuzhiyun swaps(&stuff->totalActs);
244*4882a593Smuzhiyun swaps(&stuff->virtualMods);
245*4882a593Smuzhiyun return ProcXkbSetMap(client);
246*4882a593Smuzhiyun }
247*4882a593Smuzhiyun
248*4882a593Smuzhiyun static int _X_COLD
SProcXkbGetCompatMap(ClientPtr client)249*4882a593Smuzhiyun SProcXkbGetCompatMap(ClientPtr client)
250*4882a593Smuzhiyun {
251*4882a593Smuzhiyun REQUEST(xkbGetCompatMapReq);
252*4882a593Smuzhiyun
253*4882a593Smuzhiyun swaps(&stuff->length);
254*4882a593Smuzhiyun REQUEST_SIZE_MATCH(xkbGetCompatMapReq);
255*4882a593Smuzhiyun swaps(&stuff->deviceSpec);
256*4882a593Smuzhiyun swaps(&stuff->firstSI);
257*4882a593Smuzhiyun swaps(&stuff->nSI);
258*4882a593Smuzhiyun return ProcXkbGetCompatMap(client);
259*4882a593Smuzhiyun }
260*4882a593Smuzhiyun
261*4882a593Smuzhiyun static int _X_COLD
SProcXkbSetCompatMap(ClientPtr client)262*4882a593Smuzhiyun SProcXkbSetCompatMap(ClientPtr client)
263*4882a593Smuzhiyun {
264*4882a593Smuzhiyun REQUEST(xkbSetCompatMapReq);
265*4882a593Smuzhiyun
266*4882a593Smuzhiyun swaps(&stuff->length);
267*4882a593Smuzhiyun REQUEST_AT_LEAST_SIZE(xkbSetCompatMapReq);
268*4882a593Smuzhiyun swaps(&stuff->deviceSpec);
269*4882a593Smuzhiyun swaps(&stuff->firstSI);
270*4882a593Smuzhiyun swaps(&stuff->nSI);
271*4882a593Smuzhiyun return ProcXkbSetCompatMap(client);
272*4882a593Smuzhiyun }
273*4882a593Smuzhiyun
274*4882a593Smuzhiyun static int _X_COLD
SProcXkbGetIndicatorState(ClientPtr client)275*4882a593Smuzhiyun SProcXkbGetIndicatorState(ClientPtr client)
276*4882a593Smuzhiyun {
277*4882a593Smuzhiyun REQUEST(xkbGetIndicatorStateReq);
278*4882a593Smuzhiyun
279*4882a593Smuzhiyun swaps(&stuff->length);
280*4882a593Smuzhiyun REQUEST_SIZE_MATCH(xkbGetIndicatorStateReq);
281*4882a593Smuzhiyun swaps(&stuff->deviceSpec);
282*4882a593Smuzhiyun return ProcXkbGetIndicatorState(client);
283*4882a593Smuzhiyun }
284*4882a593Smuzhiyun
285*4882a593Smuzhiyun static int _X_COLD
SProcXkbGetIndicatorMap(ClientPtr client)286*4882a593Smuzhiyun SProcXkbGetIndicatorMap(ClientPtr client)
287*4882a593Smuzhiyun {
288*4882a593Smuzhiyun REQUEST(xkbGetIndicatorMapReq);
289*4882a593Smuzhiyun
290*4882a593Smuzhiyun swaps(&stuff->length);
291*4882a593Smuzhiyun REQUEST_SIZE_MATCH(xkbGetIndicatorMapReq);
292*4882a593Smuzhiyun swaps(&stuff->deviceSpec);
293*4882a593Smuzhiyun swapl(&stuff->which);
294*4882a593Smuzhiyun return ProcXkbGetIndicatorMap(client);
295*4882a593Smuzhiyun }
296*4882a593Smuzhiyun
297*4882a593Smuzhiyun static int _X_COLD
SProcXkbSetIndicatorMap(ClientPtr client)298*4882a593Smuzhiyun SProcXkbSetIndicatorMap(ClientPtr client)
299*4882a593Smuzhiyun {
300*4882a593Smuzhiyun REQUEST(xkbSetIndicatorMapReq);
301*4882a593Smuzhiyun
302*4882a593Smuzhiyun swaps(&stuff->length);
303*4882a593Smuzhiyun REQUEST_AT_LEAST_SIZE(xkbSetIndicatorMapReq);
304*4882a593Smuzhiyun swaps(&stuff->deviceSpec);
305*4882a593Smuzhiyun swapl(&stuff->which);
306*4882a593Smuzhiyun return ProcXkbSetIndicatorMap(client);
307*4882a593Smuzhiyun }
308*4882a593Smuzhiyun
309*4882a593Smuzhiyun static int _X_COLD
SProcXkbGetNamedIndicator(ClientPtr client)310*4882a593Smuzhiyun SProcXkbGetNamedIndicator(ClientPtr client)
311*4882a593Smuzhiyun {
312*4882a593Smuzhiyun REQUEST(xkbGetNamedIndicatorReq);
313*4882a593Smuzhiyun
314*4882a593Smuzhiyun swaps(&stuff->length);
315*4882a593Smuzhiyun REQUEST_SIZE_MATCH(xkbGetNamedIndicatorReq);
316*4882a593Smuzhiyun swaps(&stuff->deviceSpec);
317*4882a593Smuzhiyun swaps(&stuff->ledClass);
318*4882a593Smuzhiyun swaps(&stuff->ledID);
319*4882a593Smuzhiyun swapl(&stuff->indicator);
320*4882a593Smuzhiyun return ProcXkbGetNamedIndicator(client);
321*4882a593Smuzhiyun }
322*4882a593Smuzhiyun
323*4882a593Smuzhiyun static int _X_COLD
SProcXkbSetNamedIndicator(ClientPtr client)324*4882a593Smuzhiyun SProcXkbSetNamedIndicator(ClientPtr client)
325*4882a593Smuzhiyun {
326*4882a593Smuzhiyun REQUEST(xkbSetNamedIndicatorReq);
327*4882a593Smuzhiyun
328*4882a593Smuzhiyun swaps(&stuff->length);
329*4882a593Smuzhiyun REQUEST_SIZE_MATCH(xkbSetNamedIndicatorReq);
330*4882a593Smuzhiyun swaps(&stuff->deviceSpec);
331*4882a593Smuzhiyun swaps(&stuff->ledClass);
332*4882a593Smuzhiyun swaps(&stuff->ledID);
333*4882a593Smuzhiyun swapl(&stuff->indicator);
334*4882a593Smuzhiyun swaps(&stuff->virtualMods);
335*4882a593Smuzhiyun swapl(&stuff->ctrls);
336*4882a593Smuzhiyun return ProcXkbSetNamedIndicator(client);
337*4882a593Smuzhiyun }
338*4882a593Smuzhiyun
339*4882a593Smuzhiyun static int _X_COLD
SProcXkbGetNames(ClientPtr client)340*4882a593Smuzhiyun SProcXkbGetNames(ClientPtr client)
341*4882a593Smuzhiyun {
342*4882a593Smuzhiyun REQUEST(xkbGetNamesReq);
343*4882a593Smuzhiyun
344*4882a593Smuzhiyun swaps(&stuff->length);
345*4882a593Smuzhiyun REQUEST_SIZE_MATCH(xkbGetNamesReq);
346*4882a593Smuzhiyun swaps(&stuff->deviceSpec);
347*4882a593Smuzhiyun swapl(&stuff->which);
348*4882a593Smuzhiyun return ProcXkbGetNames(client);
349*4882a593Smuzhiyun }
350*4882a593Smuzhiyun
351*4882a593Smuzhiyun static int _X_COLD
SProcXkbSetNames(ClientPtr client)352*4882a593Smuzhiyun SProcXkbSetNames(ClientPtr client)
353*4882a593Smuzhiyun {
354*4882a593Smuzhiyun REQUEST(xkbSetNamesReq);
355*4882a593Smuzhiyun
356*4882a593Smuzhiyun swaps(&stuff->length);
357*4882a593Smuzhiyun REQUEST_AT_LEAST_SIZE(xkbSetNamesReq);
358*4882a593Smuzhiyun swaps(&stuff->deviceSpec);
359*4882a593Smuzhiyun swaps(&stuff->virtualMods);
360*4882a593Smuzhiyun swapl(&stuff->which);
361*4882a593Smuzhiyun swapl(&stuff->indicators);
362*4882a593Smuzhiyun swaps(&stuff->totalKTLevelNames);
363*4882a593Smuzhiyun return ProcXkbSetNames(client);
364*4882a593Smuzhiyun }
365*4882a593Smuzhiyun
366*4882a593Smuzhiyun static int _X_COLD
SProcXkbGetGeometry(ClientPtr client)367*4882a593Smuzhiyun SProcXkbGetGeometry(ClientPtr client)
368*4882a593Smuzhiyun {
369*4882a593Smuzhiyun REQUEST(xkbGetGeometryReq);
370*4882a593Smuzhiyun
371*4882a593Smuzhiyun swaps(&stuff->length);
372*4882a593Smuzhiyun REQUEST_SIZE_MATCH(xkbGetGeometryReq);
373*4882a593Smuzhiyun swaps(&stuff->deviceSpec);
374*4882a593Smuzhiyun swapl(&stuff->name);
375*4882a593Smuzhiyun return ProcXkbGetGeometry(client);
376*4882a593Smuzhiyun }
377*4882a593Smuzhiyun
378*4882a593Smuzhiyun static int _X_COLD
SProcXkbSetGeometry(ClientPtr client)379*4882a593Smuzhiyun SProcXkbSetGeometry(ClientPtr client)
380*4882a593Smuzhiyun {
381*4882a593Smuzhiyun REQUEST(xkbSetGeometryReq);
382*4882a593Smuzhiyun
383*4882a593Smuzhiyun swaps(&stuff->length);
384*4882a593Smuzhiyun REQUEST_AT_LEAST_SIZE(xkbSetGeometryReq);
385*4882a593Smuzhiyun swaps(&stuff->deviceSpec);
386*4882a593Smuzhiyun swapl(&stuff->name);
387*4882a593Smuzhiyun swaps(&stuff->widthMM);
388*4882a593Smuzhiyun swaps(&stuff->heightMM);
389*4882a593Smuzhiyun swaps(&stuff->nProperties);
390*4882a593Smuzhiyun swaps(&stuff->nColors);
391*4882a593Smuzhiyun swaps(&stuff->nDoodads);
392*4882a593Smuzhiyun swaps(&stuff->nKeyAliases);
393*4882a593Smuzhiyun return ProcXkbSetGeometry(client);
394*4882a593Smuzhiyun }
395*4882a593Smuzhiyun
396*4882a593Smuzhiyun static int _X_COLD
SProcXkbPerClientFlags(ClientPtr client)397*4882a593Smuzhiyun SProcXkbPerClientFlags(ClientPtr client)
398*4882a593Smuzhiyun {
399*4882a593Smuzhiyun REQUEST(xkbPerClientFlagsReq);
400*4882a593Smuzhiyun
401*4882a593Smuzhiyun swaps(&stuff->length);
402*4882a593Smuzhiyun REQUEST_SIZE_MATCH(xkbPerClientFlagsReq);
403*4882a593Smuzhiyun swaps(&stuff->deviceSpec);
404*4882a593Smuzhiyun swapl(&stuff->change);
405*4882a593Smuzhiyun swapl(&stuff->value);
406*4882a593Smuzhiyun swapl(&stuff->ctrlsToChange);
407*4882a593Smuzhiyun swapl(&stuff->autoCtrls);
408*4882a593Smuzhiyun swapl(&stuff->autoCtrlValues);
409*4882a593Smuzhiyun return ProcXkbPerClientFlags(client);
410*4882a593Smuzhiyun }
411*4882a593Smuzhiyun
412*4882a593Smuzhiyun static int _X_COLD
SProcXkbListComponents(ClientPtr client)413*4882a593Smuzhiyun SProcXkbListComponents(ClientPtr client)
414*4882a593Smuzhiyun {
415*4882a593Smuzhiyun REQUEST(xkbListComponentsReq);
416*4882a593Smuzhiyun
417*4882a593Smuzhiyun swaps(&stuff->length);
418*4882a593Smuzhiyun REQUEST_AT_LEAST_SIZE(xkbListComponentsReq);
419*4882a593Smuzhiyun swaps(&stuff->deviceSpec);
420*4882a593Smuzhiyun swaps(&stuff->maxNames);
421*4882a593Smuzhiyun return ProcXkbListComponents(client);
422*4882a593Smuzhiyun }
423*4882a593Smuzhiyun
424*4882a593Smuzhiyun static int _X_COLD
SProcXkbGetKbdByName(ClientPtr client)425*4882a593Smuzhiyun SProcXkbGetKbdByName(ClientPtr client)
426*4882a593Smuzhiyun {
427*4882a593Smuzhiyun REQUEST(xkbGetKbdByNameReq);
428*4882a593Smuzhiyun
429*4882a593Smuzhiyun swaps(&stuff->length);
430*4882a593Smuzhiyun REQUEST_AT_LEAST_SIZE(xkbGetKbdByNameReq);
431*4882a593Smuzhiyun swaps(&stuff->deviceSpec);
432*4882a593Smuzhiyun swaps(&stuff->want);
433*4882a593Smuzhiyun swaps(&stuff->need);
434*4882a593Smuzhiyun return ProcXkbGetKbdByName(client);
435*4882a593Smuzhiyun }
436*4882a593Smuzhiyun
437*4882a593Smuzhiyun static int _X_COLD
SProcXkbGetDeviceInfo(ClientPtr client)438*4882a593Smuzhiyun SProcXkbGetDeviceInfo(ClientPtr client)
439*4882a593Smuzhiyun {
440*4882a593Smuzhiyun REQUEST(xkbGetDeviceInfoReq);
441*4882a593Smuzhiyun
442*4882a593Smuzhiyun swaps(&stuff->length);
443*4882a593Smuzhiyun REQUEST_SIZE_MATCH(xkbGetDeviceInfoReq);
444*4882a593Smuzhiyun swaps(&stuff->deviceSpec);
445*4882a593Smuzhiyun swaps(&stuff->wanted);
446*4882a593Smuzhiyun swaps(&stuff->ledClass);
447*4882a593Smuzhiyun swaps(&stuff->ledID);
448*4882a593Smuzhiyun return ProcXkbGetDeviceInfo(client);
449*4882a593Smuzhiyun }
450*4882a593Smuzhiyun
451*4882a593Smuzhiyun static int _X_COLD
SProcXkbSetDeviceInfo(ClientPtr client)452*4882a593Smuzhiyun SProcXkbSetDeviceInfo(ClientPtr client)
453*4882a593Smuzhiyun {
454*4882a593Smuzhiyun REQUEST(xkbSetDeviceInfoReq);
455*4882a593Smuzhiyun
456*4882a593Smuzhiyun swaps(&stuff->length);
457*4882a593Smuzhiyun REQUEST_AT_LEAST_SIZE(xkbSetDeviceInfoReq);
458*4882a593Smuzhiyun swaps(&stuff->deviceSpec);
459*4882a593Smuzhiyun swaps(&stuff->change);
460*4882a593Smuzhiyun swaps(&stuff->nDeviceLedFBs);
461*4882a593Smuzhiyun return ProcXkbSetDeviceInfo(client);
462*4882a593Smuzhiyun }
463*4882a593Smuzhiyun
464*4882a593Smuzhiyun static int _X_COLD
SProcXkbSetDebuggingFlags(ClientPtr client)465*4882a593Smuzhiyun SProcXkbSetDebuggingFlags(ClientPtr client)
466*4882a593Smuzhiyun {
467*4882a593Smuzhiyun REQUEST(xkbSetDebuggingFlagsReq);
468*4882a593Smuzhiyun
469*4882a593Smuzhiyun swaps(&stuff->length);
470*4882a593Smuzhiyun REQUEST_AT_LEAST_SIZE(xkbSetDebuggingFlagsReq);
471*4882a593Smuzhiyun swapl(&stuff->affectFlags);
472*4882a593Smuzhiyun swapl(&stuff->flags);
473*4882a593Smuzhiyun swapl(&stuff->affectCtrls);
474*4882a593Smuzhiyun swapl(&stuff->ctrls);
475*4882a593Smuzhiyun swaps(&stuff->msgLength);
476*4882a593Smuzhiyun return ProcXkbSetDebuggingFlags(client);
477*4882a593Smuzhiyun }
478*4882a593Smuzhiyun
479*4882a593Smuzhiyun int _X_COLD
SProcXkbDispatch(ClientPtr client)480*4882a593Smuzhiyun SProcXkbDispatch(ClientPtr client)
481*4882a593Smuzhiyun {
482*4882a593Smuzhiyun REQUEST(xReq);
483*4882a593Smuzhiyun switch (stuff->data) {
484*4882a593Smuzhiyun case X_kbUseExtension:
485*4882a593Smuzhiyun return SProcXkbUseExtension(client);
486*4882a593Smuzhiyun case X_kbSelectEvents:
487*4882a593Smuzhiyun return SProcXkbSelectEvents(client);
488*4882a593Smuzhiyun case X_kbBell:
489*4882a593Smuzhiyun return SProcXkbBell(client);
490*4882a593Smuzhiyun case X_kbGetState:
491*4882a593Smuzhiyun return SProcXkbGetState(client);
492*4882a593Smuzhiyun case X_kbLatchLockState:
493*4882a593Smuzhiyun return SProcXkbLatchLockState(client);
494*4882a593Smuzhiyun case X_kbGetControls:
495*4882a593Smuzhiyun return SProcXkbGetControls(client);
496*4882a593Smuzhiyun case X_kbSetControls:
497*4882a593Smuzhiyun return SProcXkbSetControls(client);
498*4882a593Smuzhiyun case X_kbGetMap:
499*4882a593Smuzhiyun return SProcXkbGetMap(client);
500*4882a593Smuzhiyun case X_kbSetMap:
501*4882a593Smuzhiyun return SProcXkbSetMap(client);
502*4882a593Smuzhiyun case X_kbGetCompatMap:
503*4882a593Smuzhiyun return SProcXkbGetCompatMap(client);
504*4882a593Smuzhiyun case X_kbSetCompatMap:
505*4882a593Smuzhiyun return SProcXkbSetCompatMap(client);
506*4882a593Smuzhiyun case X_kbGetIndicatorState:
507*4882a593Smuzhiyun return SProcXkbGetIndicatorState(client);
508*4882a593Smuzhiyun case X_kbGetIndicatorMap:
509*4882a593Smuzhiyun return SProcXkbGetIndicatorMap(client);
510*4882a593Smuzhiyun case X_kbSetIndicatorMap:
511*4882a593Smuzhiyun return SProcXkbSetIndicatorMap(client);
512*4882a593Smuzhiyun case X_kbGetNamedIndicator:
513*4882a593Smuzhiyun return SProcXkbGetNamedIndicator(client);
514*4882a593Smuzhiyun case X_kbSetNamedIndicator:
515*4882a593Smuzhiyun return SProcXkbSetNamedIndicator(client);
516*4882a593Smuzhiyun case X_kbGetNames:
517*4882a593Smuzhiyun return SProcXkbGetNames(client);
518*4882a593Smuzhiyun case X_kbSetNames:
519*4882a593Smuzhiyun return SProcXkbSetNames(client);
520*4882a593Smuzhiyun case X_kbGetGeometry:
521*4882a593Smuzhiyun return SProcXkbGetGeometry(client);
522*4882a593Smuzhiyun case X_kbSetGeometry:
523*4882a593Smuzhiyun return SProcXkbSetGeometry(client);
524*4882a593Smuzhiyun case X_kbPerClientFlags:
525*4882a593Smuzhiyun return SProcXkbPerClientFlags(client);
526*4882a593Smuzhiyun case X_kbListComponents:
527*4882a593Smuzhiyun return SProcXkbListComponents(client);
528*4882a593Smuzhiyun case X_kbGetKbdByName:
529*4882a593Smuzhiyun return SProcXkbGetKbdByName(client);
530*4882a593Smuzhiyun case X_kbGetDeviceInfo:
531*4882a593Smuzhiyun return SProcXkbGetDeviceInfo(client);
532*4882a593Smuzhiyun case X_kbSetDeviceInfo:
533*4882a593Smuzhiyun return SProcXkbSetDeviceInfo(client);
534*4882a593Smuzhiyun case X_kbSetDebuggingFlags:
535*4882a593Smuzhiyun return SProcXkbSetDebuggingFlags(client);
536*4882a593Smuzhiyun default:
537*4882a593Smuzhiyun return BadRequest;
538*4882a593Smuzhiyun }
539*4882a593Smuzhiyun }
540