Apply a patch for fixing TDIS-5990 (CVE-2013-1940 allow physically proximate attacker...
[framework/uifw/xorg/server/xorg-server.git] / include / xkbsrv.h
1 /************************************************************
2 Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
3
4 Permission to use, copy, modify, and distribute this
5 software and its documentation for any purpose and without
6 fee is hereby granted, provided that the above copyright
7 notice appear in all copies and that both that copyright
8 notice and this permission notice appear in supporting
9 documentation, and that the name of Silicon Graphics not be 
10 used in advertising or publicity pertaining to distribution 
11 of the software without specific prior written permission.
12 Silicon Graphics makes no representation about the suitability 
13 of this software for any purpose. It is provided "as is"
14 without any express or implied warranty.
15
16 SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS 
17 SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 
18 AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
19 GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL 
20 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 
21 DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 
22 OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
23 THE USE OR PERFORMANCE OF THIS SOFTWARE.
24
25 ********************************************************/
26
27 #ifndef _XKBSRV_H_
28 #define _XKBSRV_H_
29
30 #define XkbAllocClientMap               SrvXkbAllocClientMap
31 #define XkbAllocServerMap               SrvXkbAllocServerMap
32 #define XkbChangeTypesOfKey             SrvXkbChangeTypesOfKey
33 #define XkbCopyKeyTypes                 SrvXkbCopyKeyTypes
34 #define XkbFreeClientMap                SrvXkbFreeClientMap
35 #define XkbFreeServerMap                SrvXkbFreeServerMap
36 #define XkbKeyTypesForCoreSymbols       SrvXkbKeyTypesForCoreSymbols
37 #define XkbApplyCompatMapToKey          SrvXkbApplyCompatMapToKey
38 #define XkbResizeKeyActions             SrvXkbResizeKeyActions
39 #define XkbResizeKeySyms                SrvXkbResizeKeySyms
40 #define XkbResizeKeyType                SrvXkbResizeKeyType
41 #define XkbAllocCompatMap               SrvXkbAllocCompatMap
42 #define XkbAllocControls                SrvXkbAllocControls
43 #define XkbAllocIndicatorMaps           SrvXkbAllocIndicatorMaps
44 #define XkbAllocKeyboard                SrvXkbAllocKeyboard
45 #define XkbAllocNames                   SrvXkbAllocNames
46 #define XkbFreeCompatMap                SrvXkbFreeCompatMap
47 #define XkbFreeKeyboard                 SrvXkbFreeKeyboard
48 #define XkbFreeNames                    SrvXkbFreeNames
49 #define XkbLatchModifiers               SrvXkbLatchModifiers
50 #define XkbLatchGroup                   SrvXkbLatchGroup
51 #define XkbVirtualModsToReal            SrvXkbVirtualModsToReal
52 #define XkbChangeKeycodeRange           SrvXkbChangeKeycodeRange
53 #define XkbApplyVirtualModChanges       SrvXkbApplyVirtualModChanges
54
55 #include <X11/extensions/XKBproto.h>
56 #include "xkbstr.h"
57 #include "xkbrules.h"
58 #include "inputstr.h"
59 #include "events.h"
60
61 typedef struct _XkbInterest {
62     DeviceIntPtr dev;
63     ClientPtr client;
64     XID resource;
65     struct _XkbInterest *next;
66     CARD16 extDevNotifyMask;
67     CARD16 stateNotifyMask;
68     CARD16 namesNotifyMask;
69     CARD32 ctrlsNotifyMask;
70     CARD8 compatNotifyMask;
71     BOOL bellNotifyMask;
72     BOOL actionMessageMask;
73     CARD16 accessXNotifyMask;
74     CARD32 iStateNotifyMask;
75     CARD32 iMapNotifyMask;
76     CARD16 altSymsNotifyMask;
77     CARD32 autoCtrls;
78     CARD32 autoCtrlValues;
79 } XkbInterestRec, *XkbInterestPtr;
80
81 typedef struct _XkbRadioGroup {
82     CARD8 flags;
83     CARD8 nMembers;
84     CARD8 dfltDown;
85     CARD8 currentDown;
86     CARD8 members[XkbRGMaxMembers];
87 } XkbRadioGroupRec, *XkbRadioGroupPtr;
88
89 typedef struct _XkbEventCause {
90     CARD8 kc;
91     CARD8 event;
92     CARD8 mjr;
93     CARD8 mnr;
94     ClientPtr client;
95 } XkbEventCauseRec, *XkbEventCausePtr;
96
97 #define XkbSetCauseKey(c,k,e)   { (c)->kc= (k),(c)->event= (e),\
98                                   (c)->mjr= (c)->mnr= 0; \
99                                   (c)->client= NULL; }
100 #define XkbSetCauseReq(c,j,n,cl) { (c)->kc= (c)->event= 0,\
101                                   (c)->mjr= (j),(c)->mnr= (n);\
102                                   (c)->client= (cl); }
103 #define XkbSetCauseCoreReq(c,e,cl) XkbSetCauseReq(c,e,0,cl)
104 #define XkbSetCauseXkbReq(c,e,cl)  XkbSetCauseReq(c,XkbReqCode,e,cl)
105 #define XkbSetCauseUnknown(c)      XkbSetCauseKey(c,0,0)
106
107 #define _OFF_TIMER              0
108 #define _KRG_WARN_TIMER         1
109 #define _KRG_TIMER              2
110 #define _SK_TIMEOUT_TIMER       3
111 #define _ALL_TIMEOUT_TIMER      4
112
113 #define _BEEP_NONE              0
114 #define _BEEP_FEATURE_ON        1
115 #define _BEEP_FEATURE_OFF       2
116 #define _BEEP_FEATURE_CHANGE    3
117 #define _BEEP_SLOW_WARN         4
118 #define _BEEP_SLOW_PRESS        5
119 #define _BEEP_SLOW_ACCEPT       6
120 #define _BEEP_SLOW_REJECT       7
121 #define _BEEP_SLOW_RELEASE      8
122 #define _BEEP_STICKY_LATCH      9
123 #define _BEEP_STICKY_LOCK       10
124 #define _BEEP_STICKY_UNLOCK     11
125 #define _BEEP_LED_ON            12
126 #define _BEEP_LED_OFF           13
127 #define _BEEP_LED_CHANGE        14
128 #define _BEEP_BOUNCE_REJECT     15
129
130 typedef struct _XkbFilter {
131     CARD16 keycode;
132     CARD8 what;
133     CARD8 active;
134     CARD8 filterOthers;
135     CARD32 priv;
136     XkbAction upAction;
137     int (*filter) (struct _XkbSrvInfo * /* xkbi */ ,
138                    struct _XkbFilter * /* filter */ ,
139                    unsigned /* keycode */ ,
140                    XkbAction *  /* action */
141         );
142     struct _XkbFilter *next;
143 } XkbFilterRec, *XkbFilterPtr;
144
145 typedef struct _XkbSrvInfo {
146     XkbStateRec prev_state;
147     XkbStateRec state;
148     XkbDescPtr desc;
149
150     DeviceIntPtr device;
151     KbdCtrlProcPtr kbdProc;
152
153     XkbRadioGroupPtr radioGroups;
154     CARD8 nRadioGroups;
155     CARD8 clearMods;
156     CARD8 setMods;
157     INT16 groupChange;
158
159     CARD16 dfltPtrDelta;
160
161     double mouseKeysCurve;
162     double mouseKeysCurveFactor;
163     INT16 mouseKeysDX;
164     INT16 mouseKeysDY;
165     CARD8 mouseKeysFlags;
166     Bool mouseKeysAccel;
167     CARD8 mouseKeysCounter;
168
169     CARD8 lockedPtrButtons;
170     CARD8 shiftKeyCount;
171     KeyCode mouseKey;
172     KeyCode inactiveKey;
173     KeyCode slowKey;
174     KeyCode repeatKey;
175     CARD8 krgTimerActive;
176     CARD8 beepType;
177     CARD8 beepCount;
178
179     CARD32 flags;
180     CARD32 lastPtrEventTime;
181     CARD32 lastShiftEventTime;
182     OsTimerPtr beepTimer;
183     OsTimerPtr mouseKeyTimer;
184     OsTimerPtr slowKeysTimer;
185     OsTimerPtr bounceKeysTimer;
186     OsTimerPtr repeatKeyTimer;
187     OsTimerPtr krgTimer;
188
189     int szFilters;
190     XkbFilterPtr filters;
191 } XkbSrvInfoRec, *XkbSrvInfoPtr;
192
193 #define XkbSLI_IsDefault        (1L<<0)
194 #define XkbSLI_HasOwnState      (1L<<1)
195
196 typedef struct _XkbSrvLedInfo {
197     CARD16 flags;
198     CARD16 class;
199     CARD16 id;
200     union {
201         KbdFeedbackPtr kf;
202         LedFeedbackPtr lf;
203     } fb;
204
205     CARD32 physIndicators;
206     CARD32 autoState;
207     CARD32 explicitState;
208     CARD32 effectiveState;
209
210     CARD32 mapsPresent;
211     CARD32 namesPresent;
212     XkbIndicatorMapPtr maps;
213     Atom *names;
214
215     CARD32 usesBase;
216     CARD32 usesLatched;
217     CARD32 usesLocked;
218     CARD32 usesEffective;
219     CARD32 usesCompat;
220     CARD32 usesControls;
221
222     CARD32 usedComponents;
223 } XkbSrvLedInfoRec, *XkbSrvLedInfoPtr;
224
225 /*
226  * Settings for xkbClientFlags field (used by DIX)
227  * These flags _must_ not overlap with XkbPCF_*
228  */
229 #define _XkbClientInitialized           (1<<15)
230
231 #define _XkbWantsDetectableAutoRepeat(c)\
232         ((c)->xkbClientFlags&XkbPCF_DetectableAutoRepeatMask)
233
234 /*
235  * Settings for flags field
236  */
237 #define _XkbStateNotifyInProgress       (1<<0)
238
239 typedef struct {
240     ProcessInputProc processInputProc;
241     /* If processInputProc is set to something different than realInputProc,
242      * UNWRAP and COND_WRAP will not touch processInputProc and update only
243      * realInputProc.  This ensures that
244      *   processInputProc == (frozen ? EnqueueEvent : realInputProc)
245      *
246      * WRAP_PROCESS_INPUT_PROC should only be called during initialization,
247      * since it may destroy this invariant.
248      */
249     ProcessInputProc realInputProc;
250     DeviceUnwrapProc unwrapProc;
251 } xkbDeviceInfoRec, *xkbDeviceInfoPtr;
252
253 #define WRAP_PROCESS_INPUT_PROC(device, oldprocs, proc, unwrapproc) \
254         device->public.processInputProc = proc; \
255         oldprocs->processInputProc = \
256         oldprocs->realInputProc = device->public.realInputProc; \
257         device->public.realInputProc = proc; \
258         oldprocs->unwrapProc = device->unwrapProc; \
259         device->unwrapProc = unwrapproc;
260
261 #define COND_WRAP_PROCESS_INPUT_PROC(device, oldprocs, proc, unwrapproc) \
262         if (device->public.processInputProc == device->public.realInputProc)\
263             device->public.processInputProc = proc; \
264         oldprocs->processInputProc = \
265         oldprocs->realInputProc = device->public.realInputProc; \
266         device->public.realInputProc = proc; \
267         oldprocs->unwrapProc = device->unwrapProc; \
268         device->unwrapProc = unwrapproc;
269
270 #define UNWRAP_PROCESS_INPUT_PROC(device, oldprocs, backupproc) \
271         backupproc = device->public.realInputProc; \
272         if (device->public.processInputProc == device->public.realInputProc)\
273             device->public.processInputProc = oldprocs->realInputProc; \
274         device->public.realInputProc = oldprocs->realInputProc; \
275         device->unwrapProc = oldprocs->unwrapProc;
276
277 extern _X_EXPORT DevPrivateKeyRec xkbDevicePrivateKeyRec;
278
279 #define xkbDevicePrivateKey (&xkbDevicePrivateKeyRec)
280
281 #define XKBDEVICEINFO(dev) ((xkbDeviceInfoPtr)dixLookupPrivate(&(dev)->devPrivates, xkbDevicePrivateKey))
282
283 extern void xkbUnwrapProc(DeviceIntPtr, DeviceHandleProc, pointer);
284
285 /***====================================================================***/
286
287 /***====================================================================***/
288
289 #define XkbAX_KRGMask    (XkbSlowKeysMask|XkbBounceKeysMask)
290 #define XkbAllFilteredEventsMask \
291         (XkbAccessXKeysMask|XkbRepeatKeysMask|XkbMouseKeysAccelMask|XkbAX_KRGMask)
292
293 /***====================================================================***/
294
295 extern _X_EXPORT int XkbReqCode;
296 extern _X_EXPORT int XkbEventBase;
297 extern _X_EXPORT int XkbKeyboardErrorCode;
298 extern _X_EXPORT const char *XkbBaseDirectory;
299 extern _X_EXPORT const char *XkbBinDirectory;
300
301 extern _X_EXPORT CARD32 xkbDebugFlags;
302
303 #define _XkbLibError(c,l,d)     /* Epoch fail */
304
305 /* "a" is a "unique" numeric identifier that just defines which error
306  * code statement it is. _XkbErrCode2(4, foo) means "this is the 4th error
307  * statement in this function". lovely.
308  */
309 #define _XkbErrCode2(a,b) ((XID)((((unsigned int)(a))<<24)|((b)&0xffffff)))
310 #define _XkbErrCode3(a,b,c)     _XkbErrCode2(a,(((unsigned int)(b))<<16)|(c))
311 #define _XkbErrCode4(a,b,c,d) _XkbErrCode3(a,b,((((unsigned int)(c))<<8)|(d)))
312
313 #define Status          int
314
315 extern _X_EXPORT void XkbUseMsg(void
316     );
317
318 extern _X_EXPORT int XkbProcessArguments(int /* argc */ ,
319                                          char ** /* argv */ ,
320                                          int    /* i */
321     );
322
323 extern _X_EXPORT Bool XkbInitPrivates(void);
324
325 extern _X_EXPORT void XkbSetExtension(DeviceIntPtr device,
326                                       ProcessInputProc proc);
327
328 extern _X_EXPORT void XkbFreeCompatMap(XkbDescPtr /* xkb */ ,
329                                        unsigned int /* which */ ,
330                                        Bool     /* freeMap */
331     );
332
333 extern _X_EXPORT void XkbFreeNames(XkbDescPtr /* xkb */ ,
334                                    unsigned int /* which */ ,
335                                    Bool /* freeMap */
336     );
337
338 extern _X_EXPORT int _XkbLookupAnyDevice(DeviceIntPtr *pDev,
339                                          int id,
340                                          ClientPtr client,
341                                          Mask access_mode, int *xkb_err);
342
343 extern _X_EXPORT int _XkbLookupKeyboard(DeviceIntPtr *pDev,
344                                         int id,
345                                         ClientPtr client,
346                                         Mask access_mode, int *xkb_err);
347
348 extern _X_EXPORT int _XkbLookupBellDevice(DeviceIntPtr *pDev,
349                                           int id,
350                                           ClientPtr client,
351                                           Mask access_mode, int *xkb_err);
352
353 extern _X_EXPORT int _XkbLookupLedDevice(DeviceIntPtr *pDev,
354                                          int id,
355                                          ClientPtr client,
356                                          Mask access_mode, int *xkb_err);
357
358 extern _X_EXPORT int _XkbLookupButtonDevice(DeviceIntPtr *pDev,
359                                             int id,
360                                             ClientPtr client,
361                                             Mask access_mode, int *xkb_err);
362
363 extern _X_EXPORT XkbDescPtr XkbAllocKeyboard(void
364     );
365
366 extern _X_EXPORT Status XkbAllocClientMap(XkbDescPtr /* xkb */ ,
367                                           unsigned int /* which */ ,
368                                           unsigned int  /* nTypes */
369     );
370
371 extern _X_EXPORT Status XkbAllocServerMap(XkbDescPtr /* xkb */ ,
372                                           unsigned int /* which */ ,
373                                           unsigned int  /* nNewActions */
374     );
375
376 extern _X_EXPORT void XkbFreeClientMap(XkbDescPtr /* xkb */ ,
377                                        unsigned int /* what */ ,
378                                        Bool     /* freeMap */
379     );
380
381 extern _X_EXPORT void XkbFreeServerMap(XkbDescPtr /* xkb */ ,
382                                        unsigned int /* what */ ,
383                                        Bool     /* freeMap */
384     );
385
386 extern _X_EXPORT Status XkbAllocIndicatorMaps(XkbDescPtr        /* xkb */
387     );
388
389 extern _X_EXPORT Status XkbAllocCompatMap(XkbDescPtr /* xkb */ ,
390                                           unsigned int /* which */ ,
391                                           unsigned int  /* nInterpret */
392     );
393
394 extern _X_EXPORT Status XkbAllocNames(XkbDescPtr /* xkb */ ,
395                                       unsigned int /* which */ ,
396                                       int /* nTotalRG */ ,
397                                       int       /* nTotalAliases */
398     );
399
400 extern _X_EXPORT Status XkbAllocControls(XkbDescPtr /* xkb */ ,
401                                          unsigned int   /* which */
402     );
403
404 extern _X_EXPORT Status XkbCopyKeyTypes(XkbKeyTypePtr /* from */ ,
405                                         XkbKeyTypePtr /* into */ ,
406                                         int     /* num_types */
407     );
408
409 extern _X_EXPORT Status XkbResizeKeyType(XkbDescPtr /* xkb */ ,
410                                          int /* type_ndx */ ,
411                                          int /* map_count */ ,
412                                          Bool /* want_preserve */ ,
413                                          int    /* new_num_lvls */
414     );
415
416 extern _X_EXPORT void XkbFreeKeyboard(XkbDescPtr /* xkb */ ,
417                                       unsigned int /* which */ ,
418                                       Bool      /* freeDesc */
419     );
420
421 extern _X_EXPORT void XkbFreeComponentNames(XkbComponentNamesPtr /* names */ ,
422                                             Bool        /* freeNames */
423     );
424
425 extern _X_EXPORT void XkbSetActionKeyMods(XkbDescPtr /* xkb */ ,
426                                           XkbAction * /* act */ ,
427                                           unsigned int  /* mods */
428     );
429
430 extern _X_EXPORT unsigned int XkbMaskForVMask(XkbDescPtr /* xkb */ ,
431                                               unsigned int      /* vmask */
432     );
433
434 extern _X_EXPORT Bool XkbVirtualModsToReal(XkbDescPtr /* xkb */ ,
435                                            unsigned int /* virtua_mask */ ,
436                                            unsigned int *       /* mask_rtrn */
437     );
438
439 extern _X_EXPORT unsigned int XkbAdjustGroup(int /* group */ ,
440                                              XkbControlsPtr     /* ctrls */
441     );
442
443 extern _X_EXPORT KeySym *XkbResizeKeySyms(XkbDescPtr /* xkb */ ,
444                                           int /* key */ ,
445                                           int   /* needed */
446     );
447
448 extern _X_EXPORT XkbAction *XkbResizeKeyActions(XkbDescPtr /* xkb */ ,
449                                                 int /* key */ ,
450                                                 int     /* needed */
451     );
452
453 extern _X_EXPORT void XkbUpdateKeyTypesFromCore(DeviceIntPtr /* pXDev */ ,
454                                                 KeySymsPtr /* syms */ ,
455                                                 KeyCode /* first */ ,
456                                                 CARD8 /* num */ ,
457                                                 XkbChangesPtr   /* pChanges */
458     );
459
460 extern _X_EXPORT void XkbUpdateDescActions(XkbDescPtr /* xkb */ ,
461                                            KeyCode /* first */ ,
462                                            CARD8 /* num */ ,
463                                            XkbChangesPtr        /* changes */
464     );
465
466 extern _X_EXPORT void XkbUpdateActions(DeviceIntPtr /* pXDev */ ,
467                                        KeyCode /* first */ ,
468                                        CARD8 /* num */ ,
469                                        XkbChangesPtr /* pChanges */ ,
470                                        unsigned int * /* needChecksRtrn */ ,
471                                        XkbEventCausePtr /* cause */
472     );
473
474 extern _X_EXPORT KeySymsPtr XkbGetCoreMap(DeviceIntPtr  /* keybd */
475     );
476
477 extern _X_EXPORT void XkbApplyMappingChange(DeviceIntPtr /* pXDev */ ,
478                                             KeySymsPtr /* map */ ,
479                                             KeyCode /* firstKey */ ,
480                                             CARD8 /* num */ ,
481                                             CARD8 * /* modmap */ ,
482                                             ClientPtr   /* client */
483     );
484
485 extern _X_EXPORT void XkbSetIndicators(DeviceIntPtr /* pXDev */ ,
486                                        CARD32 /* affect */ ,
487                                        CARD32 /* values */ ,
488                                        XkbEventCausePtr /* cause */
489     );
490
491 extern _X_EXPORT void XkbUpdateIndicators(DeviceIntPtr /* keybd */ ,
492                                           CARD32 /* changed */ ,
493                                           Bool /* check_edevs */ ,
494                                           XkbChangesPtr /* pChanges */ ,
495                                           XkbEventCausePtr      /* cause */
496     );
497
498 extern _X_EXPORT XkbSrvLedInfoPtr XkbAllocSrvLedInfo(DeviceIntPtr /* dev */ ,
499                                                      KbdFeedbackPtr /* kf */ ,
500                                                      LedFeedbackPtr /* lf */ ,
501                                                      unsigned int       /* needed_parts */
502     );
503
504 extern _X_EXPORT XkbSrvLedInfoPtr XkbCopySrvLedInfo(DeviceIntPtr /* dev */ ,
505                                                     XkbSrvLedInfoPtr /* src */ ,
506                                                     KbdFeedbackPtr /* kf */ ,
507                                                     LedFeedbackPtr      /* lf */
508     );
509
510 extern _X_EXPORT XkbSrvLedInfoPtr XkbFindSrvLedInfo(DeviceIntPtr /* dev */ ,
511                                                     unsigned int /* class */ ,
512                                                     unsigned int /* id */ ,
513                                                     unsigned int        /* needed_parts */
514     );
515
516 extern _X_EXPORT void XkbApplyLedNameChanges(DeviceIntPtr /* dev */ ,
517                                              XkbSrvLedInfoPtr /* sli */ ,
518                                              unsigned int /* changed_names */ ,
519                                              xkbExtensionDeviceNotify * /* ed */
520                                              ,
521                                              XkbChangesPtr /* changes */ ,
522                                              XkbEventCausePtr   /* cause */
523     );
524
525 extern _X_EXPORT void XkbApplyLedMapChanges(DeviceIntPtr /* dev */ ,
526                                             XkbSrvLedInfoPtr /* sli */ ,
527                                             unsigned int /* changed_maps */ ,
528                                             xkbExtensionDeviceNotify * /* ed */
529                                             ,
530                                             XkbChangesPtr /* changes */ ,
531                                             XkbEventCausePtr    /* cause */
532     );
533
534 extern _X_EXPORT void XkbApplyLedStateChanges(DeviceIntPtr /* dev */ ,
535                                               XkbSrvLedInfoPtr /* sli */ ,
536                                               unsigned int /* changed_leds */ ,
537                                               xkbExtensionDeviceNotify *
538                                               /* ed */ ,
539                                               XkbChangesPtr /* changes */ ,
540                                               XkbEventCausePtr  /* cause */
541     );
542
543 extern _X_EXPORT void XkbFlushLedEvents(DeviceIntPtr /* dev */ ,
544                                         DeviceIntPtr /* kbd */ ,
545                                         XkbSrvLedInfoPtr /* sli */ ,
546                                         xkbExtensionDeviceNotify * /* ed */ ,
547                                         XkbChangesPtr /* changes */ ,
548                                         XkbEventCausePtr        /* cause */
549     );
550
551 extern _X_EXPORT unsigned int XkbIndicatorsToUpdate(DeviceIntPtr /* dev */ ,
552                                                     unsigned long
553                                                     /* state_changes */ ,
554                                                     Bool        /* enabled_ctrl_changes */
555     );
556
557 extern _X_EXPORT void XkbComputeDerivedState(XkbSrvInfoPtr      /* xkbi */
558     );
559
560 extern _X_EXPORT void XkbCheckSecondaryEffects(XkbSrvInfoPtr /* xkbi */ ,
561                                                unsigned int /* which */ ,
562                                                XkbChangesPtr /* changes */ ,
563                                                XkbEventCausePtr /* cause */
564     );
565
566 extern _X_EXPORT void XkbCheckIndicatorMaps(DeviceIntPtr /* dev */ ,
567                                             XkbSrvLedInfoPtr /* sli */ ,
568                                             unsigned int        /* which */
569     );
570
571 extern _X_EXPORT unsigned int XkbStateChangedFlags(XkbStatePtr /* old */ ,
572                                                    XkbStatePtr  /* new */
573     );
574
575 extern _X_EXPORT void XkbSendStateNotify(DeviceIntPtr /* kbd */ ,
576                                          xkbStateNotify *       /* pSN */
577     );
578
579 extern _X_EXPORT void XkbSendMapNotify(DeviceIntPtr /* kbd */ ,
580                                        xkbMapNotify *   /* ev */
581     );
582
583 extern _X_EXPORT int XkbComputeControlsNotify(DeviceIntPtr /* kbd */ ,
584                                               XkbControlsPtr /* old */ ,
585                                               XkbControlsPtr /* new */ ,
586                                               xkbControlsNotify * /* pCN */ ,
587                                               Bool      /* forceCtrlProc */
588     );
589
590 extern _X_EXPORT void XkbSendControlsNotify(DeviceIntPtr /* kbd */ ,
591                                             xkbControlsNotify * /* ev */
592     );
593
594 extern _X_EXPORT void XkbSendCompatMapNotify(DeviceIntPtr /* kbd */ ,
595                                              xkbCompatMapNotify *       /* ev */
596     );
597
598 extern _X_EXPORT void XkbHandleBell(BOOL /* force */ ,
599                                     BOOL /* eventOnly */ ,
600                                     DeviceIntPtr /* kbd */ ,
601                                     CARD8 /* percent */ ,
602                                     pointer /* ctrl */ ,
603                                     CARD8 /* class */ ,
604                                     Atom /* name */ ,
605                                     WindowPtr /* pWin */ ,
606                                     ClientPtr   /* pClient */
607     );
608
609 extern _X_EXPORT void XkbSendAccessXNotify(DeviceIntPtr /* kbd */ ,
610                                            xkbAccessXNotify *   /* pEv */
611     );
612
613 extern _X_EXPORT void XkbSendNamesNotify(DeviceIntPtr /* kbd */ ,
614                                          xkbNamesNotify *       /* ev */
615     );
616
617 extern _X_EXPORT void XkbSendActionMessage(DeviceIntPtr /* kbd */ ,
618                                            xkbActionMessage *   /* ev */
619     );
620
621 extern _X_EXPORT void XkbSendExtensionDeviceNotify(DeviceIntPtr /* kbd */ ,
622                                                    ClientPtr /* client */ ,
623                                                    xkbExtensionDeviceNotify *   /* ev */
624     );
625
626 extern _X_EXPORT void XkbSendNotification(DeviceIntPtr /* kbd */ ,
627                                           XkbChangesPtr /* pChanges */ ,
628                                           XkbEventCausePtr      /* cause */
629     );
630
631 extern _X_EXPORT void XkbProcessKeyboardEvent(DeviceEvent * /* event */ ,
632                                               DeviceIntPtr      /* keybd */
633     );
634
635 extern _X_EXPORT void XkbHandleActions(DeviceIntPtr /* dev */ ,
636                                        DeviceIntPtr /* kbd */ ,
637                                        DeviceEvent *    /* event */
638     );
639
640 extern _X_EXPORT Bool XkbEnableDisableControls(XkbSrvInfoPtr /* xkbi */ ,
641                                                unsigned long /* change */ ,
642                                                unsigned long /* newValues */ ,
643                                                XkbChangesPtr /* changes */ ,
644                                                XkbEventCausePtr /* cause */
645     );
646
647 extern _X_EXPORT void AccessXInit(DeviceIntPtr  /* dev */
648     );
649
650 extern _X_EXPORT Bool AccessXFilterPressEvent(DeviceEvent * /* event */ ,
651                                               DeviceIntPtr      /* keybd */
652     );
653
654 extern _X_EXPORT Bool AccessXFilterReleaseEvent(DeviceEvent * /* event */ ,
655                                                 DeviceIntPtr    /* keybd */
656     );
657
658 extern _X_EXPORT void AccessXCancelRepeatKey(XkbSrvInfoPtr /* xkbi */ ,
659                                              KeyCode    /* key */
660     );
661
662 extern _X_EXPORT void AccessXComputeCurveFactor(XkbSrvInfoPtr /* xkbi */ ,
663                                                 XkbControlsPtr  /* ctrls */
664     );
665
666 extern _X_EXPORT XkbInterestPtr XkbFindClientResource(DevicePtr /* inDev */ ,
667                                                       ClientPtr /* client */
668     );
669
670 extern _X_EXPORT XkbInterestPtr XkbAddClientResource(DevicePtr /* inDev */ ,
671                                                      ClientPtr /* client */ ,
672                                                      XID        /* id */
673     );
674
675 extern _X_EXPORT int XkbRemoveResourceClient(DevicePtr /* inDev */ ,
676                                              XID        /* id */
677     );
678
679 extern _X_EXPORT int XkbDDXAccessXBeep(DeviceIntPtr /* dev */ ,
680                                        unsigned int /* what */ ,
681                                        unsigned int     /* which */
682     );
683
684 extern _X_EXPORT int XkbDDXUsesSoftRepeat(DeviceIntPtr  /* dev */
685     );
686
687 extern _X_EXPORT void XkbDDXKeybdCtrlProc(DeviceIntPtr /* dev */ ,
688                                           KeybdCtrl *   /* ctrl */
689     );
690
691 extern _X_EXPORT void XkbDDXChangeControls(DeviceIntPtr /* dev */ ,
692                                            XkbControlsPtr /* old */ ,
693                                            XkbControlsPtr       /* new */
694     );
695
696 extern _X_EXPORT void XkbDDXUpdateDeviceIndicators(DeviceIntPtr /* dev */ ,
697                                                    XkbSrvLedInfoPtr /* sli */ ,
698                                                    CARD32       /* newState */
699     );
700
701 extern _X_EXPORT int XkbDDXTerminateServer(DeviceIntPtr /* dev */ ,
702                                            KeyCode /* key */ ,
703                                            XkbAction *  /* act */
704     );
705
706 extern _X_EXPORT int XkbDDXSwitchScreen(DeviceIntPtr /* dev */ ,
707                                         KeyCode /* key */ ,
708                                         XkbAction *     /* act */
709     );
710
711 extern _X_EXPORT int XkbDDXPrivate(DeviceIntPtr /* dev */ ,
712                                    KeyCode /* key */ ,
713                                    XkbAction *  /* act */
714     );
715
716 extern _X_EXPORT void XkbDisableComputedAutoRepeats(DeviceIntPtr /* pXDev */ ,
717                                                     unsigned int        /* key */
718     );
719
720 extern _X_EXPORT void XkbSetRepeatKeys(DeviceIntPtr /* pXDev */ ,
721                                        int /* key */ ,
722                                        int      /* onoff */
723     );
724
725 extern _X_EXPORT int XkbLatchModifiers(DeviceIntPtr /* pXDev */ ,
726                                        CARD8 /* mask */ ,
727                                        CARD8    /* latches */
728     );
729
730 extern _X_EXPORT int XkbLatchGroup(DeviceIntPtr /* pXDev */ ,
731                                    int  /* group */
732     );
733
734 extern _X_EXPORT void XkbClearAllLatchesAndLocks(DeviceIntPtr /* dev */ ,
735                                                  XkbSrvInfoPtr /* xkbi */ ,
736                                                  Bool /* genEv */ ,
737                                                  XkbEventCausePtr       /* cause */
738     );
739
740 extern _X_EXPORT void XkbGetRulesDflts(XkbRMLVOSet *    /* rmlvo */
741     );
742
743 extern _X_EXPORT void XkbFreeRMLVOSet(XkbRMLVOSet * /* rmlvo */ ,
744                                       Bool      /* freeRMLVO */
745     );
746
747 extern _X_EXPORT void XkbSetRulesDflts(XkbRMLVOSet *    /* rmlvo */
748     );
749
750 extern _X_EXPORT void XkbDeleteRulesDflts(void
751     );
752
753 extern _X_EXPORT int SProcXkbDispatch(ClientPtr /* client */
754     );
755
756 extern _X_EXPORT XkbGeometryPtr XkbLookupNamedGeometry(DeviceIntPtr /* dev */ ,
757                                                        Atom /* name */ ,
758                                                        Bool *   /* shouldFree */
759     );
760
761 extern _X_EXPORT void XkbConvertCase(KeySym /* sym */ ,
762                                      KeySym * /* lower */ ,
763                                      KeySym *   /* upper */
764     );
765
766 extern _X_EXPORT Status XkbChangeKeycodeRange(XkbDescPtr /* xkb */ ,
767                                               int /* minKC */ ,
768                                               int /* maxKC */ ,
769                                               XkbChangesPtr     /* changes */
770     );
771
772 extern _X_EXPORT void XkbFreeSrvLedInfo(XkbSrvLedInfoPtr        /* sli */
773     );
774
775 extern _X_EXPORT void XkbFreeInfo(XkbSrvInfoPtr /* xkbi */
776     );
777
778 extern _X_EXPORT Status XkbChangeTypesOfKey(XkbDescPtr /* xkb */ ,
779                                             int /* key */ ,
780                                             int /* nGroups */ ,
781                                             unsigned int /* groups */ ,
782                                             int * /* newTypesIn */ ,
783                                             XkbMapChangesPtr    /* changes */
784     );
785
786 extern _X_EXPORT int XkbKeyTypesForCoreSymbols(XkbDescPtr /* xkb */ ,
787                                                int /* map_width */ ,
788                                                KeySym * /* core_syms */ ,
789                                                unsigned int /* protected */ ,
790                                                int * /* types_inout */ ,
791                                                KeySym * /* xkb_syms_rtrn */
792     );
793
794 extern _X_EXPORT Bool XkbApplyCompatMapToKey(XkbDescPtr /* xkb */ ,
795                                              KeyCode /* key */ ,
796                                              XkbChangesPtr      /* changes */
797     );
798
799 extern _X_EXPORT Bool XkbApplyVirtualModChanges(XkbDescPtr /* xkb */ ,
800                                                 unsigned int /* changed */ ,
801                                                 XkbChangesPtr   /* changes */
802     );
803
804 extern _X_EXPORT void XkbSendNewKeyboardNotify(DeviceIntPtr /* kbd */ ,
805                                                xkbNewKeyboardNotify *   /* pNKN */
806     );
807
808 extern Bool XkbCopyKeymap(XkbDescPtr /* dst */ ,
809                           XkbDescPtr /* src */ );
810
811 extern _X_EXPORT Bool XkbCopyDeviceKeymap(DeviceIntPtr /* dst */ ,
812                                           DeviceIntPtr /* src */ );
813
814 extern void XkbFilterEvents(ClientPtr /* pClient */ ,
815                             int /* nEvents */ ,
816                             xEvent * /* xE */ );
817
818 extern int XkbGetEffectiveGroup(XkbSrvInfoPtr /* xkbi */ ,
819                                 XkbStatePtr /* xkbstate */ ,
820                                 CARD8 /* keycode */ );
821
822 extern void XkbMergeLockedPtrBtns(DeviceIntPtr /* master */ );
823
824 extern void XkbFakeDeviceButton(DeviceIntPtr /* dev */ ,
825                                 int /* press */ ,
826                                 int /* button */ );
827
828 #include "xkbfile.h"
829 #include "xkbrules.h"
830
831 #define _XkbListKeycodes        0
832 #define _XkbListTypes           1
833 #define _XkbListCompat          2
834 #define _XkbListSymbols         3
835 #define _XkbListGeometry        4
836 #define _XkbListNumComponents   5
837
838 typedef struct _XkbSrvListInfo {
839     int szPool;
840     int nPool;
841     char *pool;
842
843     int maxRtrn;
844     int nTotal;
845
846     char *pattern[_XkbListNumComponents];
847     int nFound[_XkbListNumComponents];
848 } XkbSrvListInfoRec, *XkbSrvListInfoPtr;
849
850 extern _X_EXPORT Status XkbDDXList(DeviceIntPtr /* dev */ ,
851                                    XkbSrvListInfoPtr /* listing */ ,
852                                    ClientPtr    /* client */
853     );
854
855 extern _X_EXPORT unsigned int XkbDDXLoadKeymapByNames(DeviceIntPtr /* keybd */ ,
856                                                       XkbComponentNamesPtr
857                                                       /* names */ ,
858                                                       unsigned int /* want */ ,
859                                                       unsigned int /* need */ ,
860                                                       XkbDescPtr *
861                                                       /* finfoRtrn */ ,
862                                                       char *
863                                                       /* keymapNameRtrn */ ,
864                                                       int       /* keymapNameRtrnLen */
865     );
866
867 extern _X_EXPORT Bool XkbDDXNamesFromRules(DeviceIntPtr /* keybd */ ,
868                                            char * /* rules */ ,
869                                            XkbRF_VarDefsPtr /* defs */ ,
870                                            XkbComponentNamesPtr /* names */
871     );
872
873 extern _X_EXPORT XkbDescPtr XkbCompileKeymap(DeviceIntPtr /* dev */ ,
874                                              XkbRMLVOSet *      /* rmlvo */
875     );
876
877 #endif                          /* _XKBSRV_H_ */