xref: /OK3568_Linux_fs/external/xserver/xkb/xkbSwap.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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