Git init
[framework/uifw/xorg/proto/x11proto-kb.git] / XKBsrv.h
1 /* $Xorg: XKBsrv.h,v 1.3 2000/08/18 04:05:45 coskrey Exp $ */
2 /* $XdotOrg: $ */
3 /************************************************************
4 Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
5
6 Permission to use, copy, modify, and distribute this
7 software and its documentation for any purpose and without
8 fee is hereby granted, provided that the above copyright
9 notice appear in all copies and that both that copyright
10 notice and this permission notice appear in supporting
11 documentation, and that the name of Silicon Graphics not be 
12 used in advertising or publicity pertaining to distribution 
13 of the software without specific prior written permission.
14 Silicon Graphics makes no representation about the suitability 
15 of this software for any purpose. It is provided "as is"
16 without any express or implied warranty.
17
18 SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS 
19 SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 
20 AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
21 GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL 
22 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 
23 DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 
24 OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
25 THE USE OR PERFORMANCE OF THIS SOFTWARE.
26
27 ********************************************************/
28 /* $XFree86: xc/include/extensions/XKBsrv.h,v 3.22 2002/11/20 04:49:01 dawes Exp $ */
29
30 #ifndef _XKBSRV_H_
31 #define _XKBSRV_H_
32
33 #ifdef XKB_IN_SERVER
34 #define XkbAllocClientMap               SrvXkbAllocClientMap
35 #define XkbAllocServerMap               SrvXkbAllocServerMap
36 #define XkbChangeTypesOfKey             SrvXkbChangeTypesOfKey
37 #define XkbAddKeyType                   SrvXkbAddKeyType
38 #define XkbCopyKeyType                  SrvXkbCopyKeyType
39 #define XkbCopyKeyTypes                 SrvXkbCopyKeyTypes
40 #define XkbFreeClientMap                SrvXkbFreeClientMap
41 #define XkbFreeServerMap                SrvXkbFreeServerMap
42 #define XkbInitCanonicalKeyTypes        SrvXkbInitCanonicalKeyTypes
43 #define XkbKeyTypesForCoreSymbols       SrvXkbKeyTypesForCoreSymbols
44 #define XkbApplyCompatMapToKey          SrvXkbApplyCompatMapToKey
45 #define XkbUpdateMapFromCore            SrvXkbUpdateMapFromCore
46 #define XkbResizeKeyActions             SrvXkbResizeKeyActions
47 #define XkbResizeKeySyms                SrvXkbResizeKeySyms
48 #define XkbResizeKeyType                SrvXkbResizeKeyType
49 #define XkbAllocCompatMap               SrvXkbAllocCompatMap
50 #define XkbAllocControls                SrvXkbAllocControls
51 #define XkbAllocIndicatorMaps           SrvXkbAllocIndicatorMaps
52 #define XkbAllocKeyboard                SrvXkbAllocKeyboard
53 #define XkbAllocNames                   SrvXkbAllocNames
54 #define XkbFreeCompatMap                SrvXkbFreeCompatMap
55 #define XkbFreeControls                 SrvXkbFreeControls
56 #define XkbFreeIndicatorMaps            SrvXkbFreeIndicatorMaps
57 #define XkbFreeKeyboard                 SrvXkbFreeKeyboard
58 #define XkbFreeNames                    SrvXkbFreeNames
59 #define XkbAddDeviceLedInfo             SrvXkbAddDeviceLedInfo
60 #define XkbAllocDeviceInfo              SrvXkbAllocDeviceInfo
61 #define XkbFreeDeviceInfo               SrvXkbFreeDeviceInfo
62 #define XkbResizeDeviceButtonActions    SrvXkbResizeDeviceButtonActions
63 #define XkbLatchModifiers               SrvXkbLatchModifiers
64 #define XkbLatchGroup                   SrvXkbLatchGroup
65 #define XkbVirtualModsToReal            SrvXkbVirtualModsToReal
66 #define XkbChangeKeycodeRange           SrvXkbChangeKeycodeRange
67 #define XkbApplyVirtualModChanges       SrvXkbApplyVirtualModChanges
68 #define XkbUpdateActionVirtualMods      SrvXkbUpdateActionVirtualMods
69 #define XkbUpdateKeyTypeVirtualMods     SrvXkbUpdateKeyTypeVirtualMods
70 #endif
71
72 #include <X11/extensions/XKBstr.h>
73 #include <X11/extensions/XKBproto.h>
74 #include "inputstr.h"
75
76 typedef struct _XkbInterest {
77         DeviceIntPtr            dev;
78         ClientPtr               client;
79         XID                     resource;
80         struct _XkbInterest *   next;
81         CARD16                  extDevNotifyMask;
82         CARD16                  stateNotifyMask;
83         CARD16                  namesNotifyMask;
84         CARD32                  ctrlsNotifyMask;
85         CARD8                   compatNotifyMask;
86         BOOL                    bellNotifyMask;
87         BOOL                    actionMessageMask;
88         CARD16                  accessXNotifyMask;
89         CARD32                  iStateNotifyMask;
90         CARD32                  iMapNotifyMask;
91         CARD16                  altSymsNotifyMask;
92         CARD32                  autoCtrls;
93         CARD32                  autoCtrlValues;
94 } XkbInterestRec,*XkbInterestPtr;
95
96 typedef struct _XkbRadioGroup {
97         CARD8           flags;
98         CARD8           nMembers;
99         CARD8           dfltDown;
100         CARD8           currentDown;
101         CARD8           members[XkbRGMaxMembers];
102 } XkbRadioGroupRec, *XkbRadioGroupPtr;
103
104 typedef struct  _XkbEventCause {
105         CARD8           kc;
106         CARD8           event;
107         CARD8           mjr;
108         CARD8           mnr;
109         ClientPtr       client;
110 } XkbEventCauseRec,*XkbEventCausePtr;
111 #define XkbSetCauseKey(c,k,e)   { (c)->kc= (k),(c)->event= (e),\
112                                   (c)->mjr= (c)->mnr= 0; \
113                                   (c)->client= NULL; }
114 #define XkbSetCauseReq(c,j,n,cl) { (c)->kc= (c)->event= 0,\
115                                   (c)->mjr= (j),(c)->mnr= (n);\
116                                   (c)->client= (cl); }
117 #define XkbSetCauseCoreReq(c,e,cl) XkbSetCauseReq(c,e,0,cl)
118 #define XkbSetCauseXkbReq(c,e,cl)  XkbSetCauseReq(c,XkbReqCode,e,cl)
119 #define XkbSetCauseUnknown(c)      XkbSetCauseKey(c,0,0)
120
121 #define _OFF_TIMER              0
122 #define _KRG_WARN_TIMER         1
123 #define _KRG_TIMER              2
124 #define _SK_TIMEOUT_TIMER       3
125 #define _ALL_TIMEOUT_TIMER      4
126
127 #define _BEEP_NONE              0
128 #define _BEEP_FEATURE_ON        1
129 #define _BEEP_FEATURE_OFF       2
130 #define _BEEP_FEATURE_CHANGE    3
131 #define _BEEP_SLOW_WARN         4
132 #define _BEEP_SLOW_PRESS        5
133 #define _BEEP_SLOW_ACCEPT       6
134 #define _BEEP_SLOW_REJECT       7
135 #define _BEEP_SLOW_RELEASE      8
136 #define _BEEP_STICKY_LATCH      9
137 #define _BEEP_STICKY_LOCK       10
138 #define _BEEP_STICKY_UNLOCK     11
139 #define _BEEP_LED_ON            12
140 #define _BEEP_LED_OFF           13
141 #define _BEEP_LED_CHANGE        14
142 #define _BEEP_BOUNCE_REJECT     15
143
144 typedef struct _XkbSrvInfo {
145         XkbStateRec      prev_state;
146         XkbStateRec      state;
147         XkbDescPtr       desc;
148
149         DeviceIntPtr     device;
150         KbdCtrlProcPtr   kbdProc;
151
152         XkbRadioGroupPtr radioGroups;
153         CARD8            nRadioGroups;
154         CARD8            clearMods;
155         CARD8            setMods;
156         INT16            groupChange;
157
158         CARD16           dfltPtrDelta;
159
160         double           mouseKeysCurve;
161         double           mouseKeysCurveFactor;
162         INT16            mouseKeysDX;
163         INT16            mouseKeysDY;
164         CARD8            mouseKeysFlags;
165         Bool             mouseKeysAccel;
166         CARD8            mouseKeysCounter;
167
168         CARD8            lockedPtrButtons;
169         CARD8            shiftKeyCount;
170         KeyCode          mouseKey;
171         KeyCode          inactiveKey;
172         KeyCode          slowKey;
173         KeyCode          repeatKey;
174         CARD8            krgTimerActive;
175         CARD8            beepType;
176         CARD8            beepCount;
177
178         CARD32           flags;
179         CARD32           lastPtrEventTime;
180         CARD32           lastShiftEventTime;
181         OsTimerPtr       beepTimer;
182         OsTimerPtr       mouseKeyTimer;
183         OsTimerPtr       slowKeysTimer;
184         OsTimerPtr       bounceKeysTimer;
185         OsTimerPtr       repeatKeyTimer;
186         OsTimerPtr       krgTimer;
187 } XkbSrvInfoRec, *XkbSrvInfoPtr;
188
189 #define XkbSLI_IsDefault        (1L<<0)
190 #define XkbSLI_HasOwnState      (1L<<1)
191
192 typedef struct  _XkbSrvLedInfo {
193         CARD16                  flags;
194         CARD16                  class;
195         CARD16                  id;
196         union {
197             KbdFeedbackPtr      kf;
198             LedFeedbackPtr      lf;
199         }                       fb;
200
201         CARD32                  physIndicators;
202         CARD32                  autoState;
203         CARD32                  explicitState;
204         CARD32                  effectiveState;
205
206         CARD32                  mapsPresent;
207         CARD32                  namesPresent;
208         XkbIndicatorMapPtr      maps;
209         Atom *                  names;
210
211         CARD32                  usesBase;
212         CARD32                  usesLatched;
213         CARD32                  usesLocked;
214         CARD32                  usesEffective;
215         CARD32                  usesCompat;
216         CARD32                  usesControls;
217
218         CARD32                  usedComponents;
219 } XkbSrvLedInfoRec, *XkbSrvLedInfoPtr;
220
221 /*
222  * Settings for xkbClientFlags field (used by DIX)
223  * These flags _must_ not overlap with XkbPCF_*
224  */
225 #define _XkbClientInitialized           (1<<15)
226
227 #define _XkbWantsDetectableAutoRepeat(c)\
228         ((c)->xkbClientFlags&XkbPCF_DetectableAutoRepeatMask)
229
230 /*
231  * Settings for flags field
232  */
233 #define _XkbStateNotifyInProgress       (1<<0)
234
235 typedef struct
236 {
237     ProcessInputProc processInputProc;
238     ProcessInputProc realInputProc;
239     DeviceUnwrapProc unwrapProc;
240 } xkbDeviceInfoRec, *xkbDeviceInfoPtr;
241
242 #define WRAP_PROCESS_INPUT_PROC(device, oldprocs, proc, unwrapproc) \
243         device->public.processInputProc = proc; \
244         oldprocs->processInputProc = \
245         oldprocs->realInputProc = device->public.realInputProc; \
246         device->public.realInputProc = proc; \
247         oldprocs->unwrapProc = device->unwrapProc; \
248         device->unwrapProc = unwrapproc;
249
250 #define COND_WRAP_PROCESS_INPUT_PROC(device, oldprocs, proc, unwrapproc) \
251         if (device->public.processInputProc == device->public.realInputProc)\
252             device->public.processInputProc = proc; \
253         oldprocs->processInputProc = \
254         oldprocs->realInputProc = device->public.realInputProc; \
255         device->public.realInputProc = proc; \
256         oldprocs->unwrapProc = device->unwrapProc; \
257         device->unwrapProc = unwrapproc;
258
259 #define UNWRAP_PROCESS_INPUT_PROC(device, oldprocs) \
260         device->public.processInputProc = oldprocs->processInputProc; \
261         device->public.realInputProc = oldprocs->realInputProc; \
262         device->unwrapProc = oldprocs->unwrapProc;
263
264 #define XKBDEVICEINFO(dev) ((xkbDeviceInfoPtr) (dev)->devPrivates[xkbDevicePrivateIndex].ptr)
265
266 /***====================================================================***/
267
268
269 /***====================================================================***/
270
271 #define XkbAX_KRGMask    (XkbSlowKeysMask|XkbBounceKeysMask)
272 #define XkbAllFilteredEventsMask \
273         (XkbAccessXKeysMask|XkbRepeatKeysMask|XkbMouseKeysAccelMask|XkbAX_KRGMask)
274
275 /***====================================================================***/
276
277 extern int      XkbReqCode;
278 extern int      XkbEventBase;
279 extern int      XkbKeyboardErrorCode;
280 extern int      XkbDisableLockActions;
281 extern char *   XkbBaseDirectory;
282 extern char *   XkbBinDirectory;
283 extern char *   XkbInitialMap;
284 extern int      _XkbClientMajor;
285 extern int      _XkbClientMinor;
286 extern unsigned int XkbXIUnsupported;
287
288 extern char *   XkbModelUsed,*XkbLayoutUsed,*XkbVariantUsed,*XkbOptionsUsed;
289 extern Bool     noXkbExtension;
290 extern Bool     XkbWantRulesProp;
291
292 extern pointer  XkbLastRepeatEvent;
293
294 extern CARD32   xkbDebugFlags;
295 extern CARD32   xkbDebugCtrls;
296
297 #define _XkbAlloc(s)            xalloc((s))
298 #define _XkbCalloc(n,s)         Xcalloc((n)*(s))
299 #define _XkbRealloc(o,s)        Xrealloc((o),(s))
300 #define _XkbTypedAlloc(t)       ((t *)xalloc(sizeof(t)))
301 #define _XkbTypedCalloc(n,t)    ((t *)Xcalloc((n)*sizeof(t)))
302 #define _XkbTypedRealloc(o,n,t) \
303         ((o)?(t *)Xrealloc((o),(n)*sizeof(t)):_XkbTypedCalloc(n,t))
304 #define _XkbClearElems(a,f,l,t) bzero(&(a)[f],((l)-(f)+1)*sizeof(t))
305 #define _XkbFree(p)             Xfree(p)
306
307 #define _XkbLibError(c,l,d) \
308         { _XkbErrCode= (c); _XkbErrLocation= (l); _XkbErrData= (d); }
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 extern  int     DeviceKeyPress,DeviceKeyRelease;
314 extern  int     DeviceButtonPress,DeviceButtonRelease;
315
316 #ifdef XINPUT
317 #define _XkbIsPressEvent(t)     (((t)==KeyPress)||((t)==DeviceKeyPress))
318 #define _XkbIsReleaseEvent(t)   (((t)==KeyRelease)||((t)==DeviceKeyRelease))
319 #else
320 #define _XkbIsPressEvent(t)     ((t)==KeyPress)
321 #define _XkbIsReleaseEvent(t)   ((t)==KeyRelease)
322 #endif
323
324 #define _XkbCoreKeycodeInRange(c,k)     (((k)>=(c)->curKeySyms.minKeyCode)&&\
325                                          ((k)<=(c)->curKeySyms.maxKeyCode))
326 #define _XkbCoreNumKeys(c)      ((c)->curKeySyms.maxKeyCode-\
327                                  (c)->curKeySyms.minKeyCode+1)
328
329 #define XConvertCase(s,l,u)     XkbConvertCase(s,l,u)
330 #undef  IsKeypadKey
331 #define IsKeypadKey(s)          XkbKSIsKeypad(s)
332
333 typedef int Status;
334 typedef pointer XPointer;
335 typedef struct _XDisplay Display;
336
337 #ifndef True
338 #define True    1
339 #define False   0
340 #endif
341
342 #ifndef PATH_MAX
343 #ifdef MAXPATHLEN
344 #define PATH_MAX MAXPATHLEN
345 #else
346 #define PATH_MAX 1024
347 #endif
348 #endif
349
350 _XFUNCPROTOBEGIN
351
352 extern void XkbUseMsg(
353     void
354 );
355
356 extern int XkbProcessArguments(
357     int                         /* argc */,
358     char **                     /* argv */,
359     int                         /* i */
360 );
361
362 extern  void    XkbSetExtension(DeviceIntPtr device, ProcessInputProc proc);
363
364 extern  void    XkbFreeCompatMap(
365     XkbDescPtr                  /* xkb */,
366     unsigned int                /* which */,
367     Bool                        /* freeMap */
368 );
369
370 extern  void XkbFreeNames(
371         XkbDescPtr              /* xkb */,
372         unsigned int            /* which */,
373         Bool                    /* freeMap */
374 );
375
376 extern DeviceIntPtr _XkbLookupAnyDevice(
377     int                 /* id */,
378     int *               /* why_rtrn */
379 );
380
381 extern DeviceIntPtr _XkbLookupKeyboard(
382     int                 /* id */,
383     int *               /* why_rtrn */
384 );
385
386 extern DeviceIntPtr _XkbLookupBellDevice(
387     int                 /* id */,
388     int *               /* why_rtrn */
389 );
390
391 extern DeviceIntPtr _XkbLookupLedDevice(
392     int                 /* id */,
393     int *               /* why_rtrn */
394 );
395
396 extern DeviceIntPtr _XkbLookupButtonDevice(
397     int                 /* id */,
398     int *               /* why_rtrn */
399 );
400
401 extern  XkbDescPtr XkbAllocKeyboard(
402         void
403 );
404
405 extern  Status XkbAllocClientMap(
406         XkbDescPtr              /* xkb */,
407         unsigned int            /* which */,
408         unsigned int            /* nTypes */
409 );
410
411 extern  Status XkbAllocServerMap(
412         XkbDescPtr              /* xkb */,
413         unsigned int            /* which */,
414         unsigned int            /* nNewActions */
415 );
416
417 extern  void    XkbFreeClientMap(
418     XkbDescPtr                  /* xkb */,
419     unsigned int                /* what */,
420     Bool                        /* freeMap */
421 );
422
423 extern  void    XkbFreeServerMap(
424     XkbDescPtr                  /* xkb */,
425     unsigned int                /* what */,
426     Bool                        /* freeMap */
427 );
428
429 extern  Status XkbAllocIndicatorMaps(
430         XkbDescPtr              /* xkb */
431 );
432
433 extern  Status  XkbAllocCompatMap(
434     XkbDescPtr                  /* xkb */,
435     unsigned int                /* which */,
436     unsigned int                /* nInterpret */
437 );
438
439 extern  Status XkbAllocNames(
440         XkbDescPtr              /* xkb */,
441         unsigned int            /* which */,
442         int                     /* nTotalRG */,
443         int                     /* nTotalAliases */
444 );
445
446 extern  Status  XkbAllocControls(
447         XkbDescPtr              /* xkb */,
448         unsigned int            /* which*/
449 );
450
451 extern  Status  XkbCopyKeyType(
452     XkbKeyTypePtr               /* from */,
453     XkbKeyTypePtr               /* into */
454 );
455
456 extern  Status  XkbCopyKeyTypes(
457     XkbKeyTypePtr               /* from */,
458     XkbKeyTypePtr               /* into */,
459     int                         /* num_types */
460 );
461
462 extern  Status  XkbResizeKeyType(
463     XkbDescPtr          /* xkb */,
464     int                 /* type_ndx */,
465     int                 /* map_count */,
466     Bool                /* want_preserve */,
467     int                 /* new_num_lvls */
468 );
469
470 extern  void    XkbFreeKeyboard(
471         XkbDescPtr              /* xkb */,
472         unsigned int            /* which */,
473         Bool                    /* freeDesc */
474 );
475
476 extern  void XkbSetActionKeyMods(
477         XkbDescPtr              /* xkb */,
478         XkbAction *             /* act */,
479         unsigned int            /* mods */
480 );
481
482 extern Bool XkbCheckActionVMods(
483         XkbDescPtr              /* xkb */,
484         XkbAction *             /* act */,
485         unsigned int            /* changed */
486 );
487
488 extern Bool XkbApplyVModChanges(
489     XkbSrvInfoPtr       /* xkbi */,
490     unsigned int        /* changed */,
491     XkbChangesPtr       /* pChanges */,
492     unsigned int *      /* needChecksRtrn */,
493     XkbEventCausePtr    /* cause */
494 );
495
496 extern void XkbApplyVModChangesToAllDevices(
497     DeviceIntPtr        /* dev */,
498     XkbDescPtr          /* xkb */,
499     unsigned int        /* changed */,
500     XkbEventCausePtr    /* cause */
501 );
502
503 extern  unsigned int XkbMaskForVMask(
504     XkbDescPtr          /* xkb */,
505     unsigned int        /* vmask */
506 );
507
508 extern Bool XkbVirtualModsToReal(
509         XkbDescPtr      /* xkb */,
510         unsigned int    /* virtua_mask */,
511         unsigned int *  /* mask_rtrn */
512 );
513
514 extern  unsigned int    XkbAdjustGroup(
515     int                 /* group */,
516     XkbControlsPtr      /* ctrls */
517 );
518
519 extern KeySym *XkbResizeKeySyms(
520     XkbDescPtr          /* xkb */,
521     int                 /* key */,
522     int                 /* needed */
523 );
524
525 extern XkbAction *XkbResizeKeyActions(
526     XkbDescPtr          /* xkb */,
527     int                 /* key */,
528     int                 /* needed */
529 );
530
531 extern void XkbUpdateKeyTypesFromCore(
532     DeviceIntPtr        /* pXDev */,
533     KeyCode             /* first */,
534     CARD8               /* num */,
535     XkbChangesPtr       /* pChanges */
536 );
537
538 extern  void XkbUpdateDescActions(      
539     XkbDescPtr          /* xkb */,
540     KeyCode             /* first */,
541     CARD8               /* num */,
542     XkbChangesPtr       /* changes */
543 );
544
545 extern void XkbUpdateActions(
546     DeviceIntPtr        /* pXDev */,
547     KeyCode             /* first */,
548     CARD8               /* num */,
549     XkbChangesPtr       /* pChanges */,
550     unsigned int *      /* needChecksRtrn */,
551     XkbEventCausePtr    /* cause */
552 );
553
554 extern void XkbUpdateCoreDescription(
555     DeviceIntPtr        /* keybd */,
556     Bool                /* resize */
557 );
558
559 extern void XkbApplyMappingChange(
560     DeviceIntPtr        /* pXDev */,
561     CARD8               /* request */,
562     KeyCode             /* firstKey */,
563     CARD8               /* num */,
564     ClientPtr           /* client */
565 );
566
567 extern void XkbSetIndicators(
568     DeviceIntPtr                /* pXDev */,
569     CARD32                      /* affect */,
570     CARD32                      /* values */,
571     XkbEventCausePtr            /* cause */
572 );
573
574 extern void XkbUpdateIndicators(
575     DeviceIntPtr                /* keybd */,
576     CARD32                      /* changed */,
577     Bool                        /* check_edevs */,
578     XkbChangesPtr               /* pChanges */,
579     XkbEventCausePtr            /* cause */
580 );
581
582 extern XkbSrvLedInfoPtr XkbAllocSrvLedInfo(
583     DeviceIntPtr                /* dev */,
584     KbdFeedbackPtr              /* kf */,
585     LedFeedbackPtr              /* lf */,
586     unsigned int                /* needed_parts */
587 );
588
589 extern XkbSrvLedInfoPtr XkbFindSrvLedInfo(
590     DeviceIntPtr                /* dev */,
591     unsigned int                /* class */,
592     unsigned int                /* id */,
593     unsigned int                /* needed_parts */
594 );
595
596 extern void XkbApplyLedNameChanges(
597     DeviceIntPtr                /* dev */,
598     XkbSrvLedInfoPtr            /* sli */,
599     unsigned int                /* changed_names */,
600     xkbExtensionDeviceNotify *  /* ed */,
601     XkbChangesPtr               /* changes */,
602     XkbEventCausePtr            /* cause */
603 );
604
605 extern void XkbApplyLedMapChanges(
606     DeviceIntPtr                /* dev */,
607     XkbSrvLedInfoPtr            /* sli */,
608     unsigned int                /* changed_maps */,
609     xkbExtensionDeviceNotify *  /* ed */,
610     XkbChangesPtr               /* changes */,
611     XkbEventCausePtr            /* cause */
612 );
613
614 extern void XkbApplyLedStateChanges(
615     DeviceIntPtr                /* dev */,
616     XkbSrvLedInfoPtr            /* sli */,
617     unsigned int                /* changed_leds */,
618     xkbExtensionDeviceNotify *  /* ed */,
619     XkbChangesPtr               /* changes */,
620     XkbEventCausePtr            /* cause */
621 );
622
623 extern void XkbUpdateLedAutoState(
624     DeviceIntPtr                /* dev */,
625     XkbSrvLedInfoPtr            /* sli */,
626     unsigned int                /* maps_to_check */,
627     xkbExtensionDeviceNotify *  /* ed */,
628     XkbChangesPtr               /* changes */,
629     XkbEventCausePtr            /* cause */
630 );
631
632 extern void XkbFlushLedEvents(  
633     DeviceIntPtr                /* dev */,
634     DeviceIntPtr                /* kbd */,
635     XkbSrvLedInfoPtr            /* sli */,
636     xkbExtensionDeviceNotify *  /* ed */,
637     XkbChangesPtr               /* changes */,
638     XkbEventCausePtr            /* cause */
639 );
640
641 extern void XkbUpdateAllDeviceIndicators(
642     XkbChangesPtr               /* changes */,
643     XkbEventCausePtr            /* cause */
644 );
645
646 extern unsigned int XkbIndicatorsToUpdate(
647     DeviceIntPtr                /* dev */,
648     unsigned long               /* state_changes */,
649     Bool                        /* enabled_ctrl_changes */
650 );
651
652 extern void XkbComputeDerivedState(
653     XkbSrvInfoPtr               /* xkbi */
654 );
655
656 extern void XkbCheckSecondaryEffects(
657     XkbSrvInfoPtr               /* xkbi */,
658     unsigned int                /* which */,
659     XkbChangesPtr               /* changes */,
660     XkbEventCausePtr            /* cause */
661 );
662
663 extern void XkbCheckIndicatorMaps(
664     DeviceIntPtr                /* dev */,
665     XkbSrvLedInfoPtr            /* sli */,
666     unsigned int                /* which */
667 );
668
669 extern unsigned int XkbStateChangedFlags(
670     XkbStatePtr                 /* old */,
671     XkbStatePtr                 /* new */
672 );
673
674 extern  void XkbSendStateNotify(
675        DeviceIntPtr     /* kbd */,
676        xkbStateNotify * /* pSN */
677 );
678
679 extern  void XkbSendMapNotify(
680        DeviceIntPtr     /* kbd */,
681        xkbMapNotify *   /* ev */
682 );
683
684 extern  int  XkbComputeControlsNotify(
685         DeviceIntPtr            /* kbd */,
686         XkbControlsPtr          /* old */,
687         XkbControlsPtr          /* new */,
688         xkbControlsNotify *     /* pCN */,
689         Bool                    /* forceCtrlProc */
690 );
691
692 extern  void XkbSendControlsNotify(
693        DeviceIntPtr             /* kbd */,
694        xkbControlsNotify *      /* ev */
695 );
696
697 extern  void XkbSendCompatMapNotify(
698         DeviceIntPtr            /* kbd */,
699         xkbCompatMapNotify *    /* ev */
700 );
701
702 extern  void XkbSendIndicatorNotify(
703        DeviceIntPtr             /* kbd */,
704        int                      /* xkbType */,
705        xkbIndicatorNotify *     /* ev */
706 );
707
708 extern  void XkbHandleBell(
709        BOOL             /* force */,
710        BOOL             /* eventOnly */,
711        DeviceIntPtr     /* kbd */,
712        CARD8            /* percent */,
713        pointer          /* ctrl */,
714        CARD8            /* class */,
715        Atom             /* name */,
716        WindowPtr        /* pWin */,
717        ClientPtr        /* pClient */
718 );
719
720 extern  void XkbSendAccessXNotify(
721        DeviceIntPtr             /* kbd */,
722        xkbAccessXNotify *       /* pEv */
723 );
724
725 extern  void XkbSendNamesNotify(
726        DeviceIntPtr     /* kbd */,
727        xkbNamesNotify * /* ev */
728 );
729
730 extern  void XkbSendCompatNotify(
731        DeviceIntPtr             /* kbd */,
732        xkbCompatMapNotify *     /* ev */
733 );
734
735 extern  void XkbSendActionMessage(
736        DeviceIntPtr             /* kbd */,
737        xkbActionMessage *       /* ev */
738 );
739
740 extern  void XkbSendExtensionDeviceNotify(
741        DeviceIntPtr                     /* kbd */,
742        ClientPtr                        /* client */,
743        xkbExtensionDeviceNotify *       /* ev */
744 );
745
746 extern void XkbSendNotification(
747     DeviceIntPtr                /* kbd */,
748     XkbChangesPtr               /* pChanges */,
749     XkbEventCausePtr            /* cause */
750 );
751
752 extern void XkbProcessKeyboardEvent(
753     struct _xEvent *            /* xE */,
754     DeviceIntPtr                /* keybd */,
755     int                         /* count */
756 );
757
758 extern void XkbProcessOtherEvent(
759     struct _xEvent *            /* xE */,
760     DeviceIntPtr                /* keybd */,
761     int                         /* count */
762 );
763
764 extern void XkbHandleActions(
765     DeviceIntPtr                /* dev */,
766     DeviceIntPtr                /* kbd */,
767     struct _xEvent *            /* xE */,
768     int                         /* count */
769 );
770
771 extern Bool XkbEnableDisableControls(
772     XkbSrvInfoPtr       /* xkbi */,
773     unsigned long       /* change */,
774     unsigned long       /* newValues */,
775     XkbChangesPtr       /* changes */,
776     XkbEventCausePtr    /* cause */
777 );
778
779 extern void AccessXInit(
780     DeviceIntPtr        /* dev */
781 );
782
783 extern Bool AccessXFilterPressEvent(
784     register struct _xEvent *   /* xE */,
785     register DeviceIntPtr       /* keybd */,
786     int                         /* count */
787 );
788
789 extern Bool AccessXFilterReleaseEvent(
790     register struct _xEvent *   /* xE */,
791     register DeviceIntPtr       /* keybd */,
792     int                         /* count */
793 );
794
795 extern void AccessXCancelRepeatKey(
796     XkbSrvInfoPtr       /* xkbi */,
797     KeyCode             /* key */
798 );
799
800 extern void AccessXComputeCurveFactor(
801     XkbSrvInfoPtr       /* xkbi */,
802     XkbControlsPtr      /* ctrls */
803 );
804
805 extern  XkbDeviceLedInfoPtr     XkbAddDeviceLedInfo(
806         XkbDeviceInfoPtr        /* devi */,
807         unsigned int            /* ledClass */,
808         unsigned int            /* ledId */
809 );
810
811 extern  XkbDeviceInfoPtr        XkbAllocDeviceInfo(
812         unsigned int            /* deviceSpec */,
813         unsigned int            /* nButtons */,
814         unsigned int            /* szLeds */
815 );
816
817 extern  void XkbFreeDeviceInfo(
818         XkbDeviceInfoPtr        /* devi */,
819         unsigned int            /* which */,
820         Bool                    /* freeDevI */
821 );
822
823 extern Status XkbResizeDeviceButtonActions(
824         XkbDeviceInfoPtr        /* devi */,
825         unsigned int            /* newTotal */
826 );
827
828 extern  XkbInterestPtr XkbFindClientResource(
829        DevicePtr        /* inDev */,
830        ClientPtr        /* client */
831 );
832
833 extern  XkbInterestPtr XkbAddClientResource(
834        DevicePtr        /* inDev */,
835        ClientPtr        /* client */,
836        XID              /* id */
837 );
838
839 extern  int XkbRemoveClient(
840        DevicePtr        /* inDev */,
841        ClientPtr        /* client */
842 );
843
844 extern  int XkbRemoveResourceClient(
845        DevicePtr        /* inDev */,
846        XID              /* id */
847 );
848
849 extern int XkbDDXInitDevice(
850     DeviceIntPtr        /* dev */
851 );
852
853 extern  int XkbDDXAccessXBeep(
854     DeviceIntPtr        /* dev */,
855     unsigned int        /* what */,
856     unsigned int        /* which */
857 );
858
859 extern  void XkbDDXKeyClick(
860     DeviceIntPtr        /* dev */,
861     int                 /* keycode */,
862     int                 /* synthetic */
863 );
864
865 extern  int XkbDDXUsesSoftRepeat(
866     DeviceIntPtr        /* dev */
867 );
868
869 extern  void XkbDDXKeybdCtrlProc(
870         DeviceIntPtr    /* dev */,
871         KeybdCtrl *     /* ctrl */
872 );
873
874 extern void XkbDDXChangeControls(
875         DeviceIntPtr    /* dev */,
876         XkbControlsPtr  /* old */,
877         XkbControlsPtr  /* new */
878 );
879
880 extern void XkbDDXUpdateIndicators(
881         DeviceIntPtr    /* keybd */,
882         CARD32          /* newState */
883 );
884
885 extern void XkbDDXUpdateDeviceIndicators(
886         DeviceIntPtr            /* dev */,
887         XkbSrvLedInfoPtr        /* sli */,
888         CARD32                  /* newState */
889 );
890
891 extern void XkbDDXFakePointerButton(
892         int             /* event */,
893         int             /* button */
894 );
895
896 extern void XkbDDXFakePointerMotion(
897         unsigned int    /* flags */,
898         int             /* x */,
899         int             /* y */
900 );
901
902 extern void XkbDDXFakeDeviceButton(
903         DeviceIntPtr    /* dev */,
904         Bool            /* press */,
905         int             /* button */
906 );
907
908 extern int XkbDDXTerminateServer(
909         DeviceIntPtr    /* dev */,
910         KeyCode         /* key */,
911         XkbAction *     /* act */
912 );
913
914 extern int XkbDDXSwitchScreen(
915         DeviceIntPtr    /* dev */,
916         KeyCode         /* key */,
917         XkbAction *     /* act */
918 );
919
920 extern int XkbDDXPrivate(
921         DeviceIntPtr    /* dev */,
922         KeyCode         /* key */,
923         XkbAction *     /* act */
924 );
925
926 extern void XkbDisableComputedAutoRepeats(
927         DeviceIntPtr    /* pXDev */,
928         unsigned int    /* key */
929 );
930
931 extern void XkbSetRepeatKeys(
932         DeviceIntPtr    /* pXDev */,
933         int             /* key */,
934         int             /* onoff */
935 );
936
937 extern  int XkbLatchModifiers(
938         DeviceIntPtr    /* pXDev */,
939         CARD8           /* mask */,
940         CARD8           /* latches */
941 );
942
943 extern  int XkbLatchGroup(
944         DeviceIntPtr    /* pXDev */,
945         int             /* group */
946 );
947
948 extern  void XkbClearAllLatchesAndLocks(
949         DeviceIntPtr            /* dev */,
950         XkbSrvInfoPtr           /* xkbi */,
951         Bool                    /* genEv */,
952         XkbEventCausePtr        /* cause */
953 );
954
955 extern  void    XkbSetRulesDflts(
956         char *                  /* rulesFile */,
957         char *                  /* model */,
958         char *                  /* layout */,
959         char *                  /* variant */,
960         char *                  /* options */
961 );
962
963 extern  void    XkbInitDevice(
964         DeviceIntPtr    /* pXDev */
965 );
966
967 extern  Bool    XkbInitKeyboardDeviceStruct(
968         DeviceIntPtr            /* pXDev */,
969         XkbComponentNamesPtr    /* pNames */,
970         KeySymsPtr              /* pSyms */,
971         CARD8                   /* pMods */[],
972         BellProcPtr             /* bellProc */,
973         KbdCtrlProcPtr          /* ctrlProc */
974 );
975
976 extern  int SProcXkbDispatch(
977         ClientPtr               /* client */
978 );
979
980 extern XkbGeometryPtr XkbLookupNamedGeometry(
981         DeviceIntPtr            /* dev */,
982         Atom                    /* name */,
983         Bool *                  /* shouldFree */
984 );
985
986 extern char *   _XkbDupString(
987         char *                  /* str */
988 );
989
990 extern void     XkbConvertCase(
991         KeySym                  /* sym */,
992         KeySym *                /* lower */,
993         KeySym *                /* upper */
994 );
995
996 extern  Status   XkbChangeKeycodeRange( 
997         XkbDescPtr              /* xkb */,
998         int                     /* minKC */,
999         int                     /* maxKC */,
1000         XkbChangesPtr           /* changes */
1001 );
1002
1003 extern int XkbFinishDeviceInit(
1004         DeviceIntPtr            /* pXDev */
1005 );
1006
1007 extern void XkbFreeSrvLedInfo(
1008         XkbSrvLedInfoPtr        /* sli */
1009 );
1010
1011 extern void XkbFreeInfo(
1012         XkbSrvInfoPtr           /* xkbi */
1013 );
1014
1015 extern Status XkbChangeTypesOfKey(
1016         XkbDescPtr              /* xkb */,
1017         int                     /* key */,
1018         int                     /* nGroups */,
1019         unsigned int            /* groups */,
1020         int *                   /* newTypesIn */,
1021         XkbMapChangesPtr        /* changes */
1022 );
1023
1024 extern XkbKeyTypePtr XkbAddKeyType(
1025         XkbDescPtr              /* xkb */,
1026         Atom                    /* name */,
1027         int                     /* map_count */,
1028         Bool                    /* want_preserve */,
1029         int                     /* num_lvls */
1030 );
1031
1032 extern Status XkbInitCanonicalKeyTypes(
1033         XkbDescPtr              /* xkb */,
1034         unsigned int            /* which */,
1035         int                     /* keypadVMod */
1036 );
1037
1038 extern int XkbKeyTypesForCoreSymbols(
1039         XkbDescPtr              /* xkb */,
1040         int                     /* map_width */,
1041         KeySym *                /* core_syms */,
1042         unsigned int            /* protected */,
1043         int *                   /* types_inout */,
1044         KeySym *                /* xkb_syms_rtrn */
1045 );
1046
1047 extern Bool XkbApplyCompatMapToKey(
1048         XkbDescPtr              /* xkb */,
1049         KeyCode                 /* key */,
1050         XkbChangesPtr           /* changes */
1051 );
1052
1053 extern Bool XkbUpdateMapFromCore(
1054         XkbDescPtr              /* xkb */,
1055         KeyCode                 /* first_key */,
1056         int                     /* num_keys */,
1057         int                     /* map_width */,
1058         KeySym *                /* core_keysyms */,
1059         XkbChangesPtr           /* changes */
1060 );
1061
1062 extern void XkbFreeControls(
1063         XkbDescPtr              /* xkb */,
1064         unsigned int            /* which */,
1065         Bool                    /* freeMap */
1066 );
1067
1068 extern void XkbFreeIndicatorMaps(
1069         XkbDescPtr              /* xkb */
1070 );
1071
1072 extern Bool XkbApplyVirtualModChanges(
1073         XkbDescPtr              /* xkb */,
1074         unsigned int            /* changed */,
1075         XkbChangesPtr           /* changes */
1076 );
1077
1078 extern Bool XkbUpdateActionVirtualMods(
1079         XkbDescPtr              /* xkb */,
1080         XkbAction *             /* act */,
1081         unsigned int            /* changed */
1082 );
1083
1084 extern void XkbUpdateKeyTypeVirtualMods(
1085         XkbDescPtr              /* xkb */,
1086         XkbKeyTypePtr           /* type */,
1087         unsigned int            /* changed */,
1088         XkbChangesPtr           /* changes */
1089 );
1090
1091 extern void XkbSendNewKeyboardNotify(
1092         DeviceIntPtr            /* kbd */,
1093         xkbNewKeyboardNotify *  /* pNKN */
1094 );
1095
1096 #ifdef XKBSRV_NEED_FILE_FUNCS
1097
1098 #include <X11/extensions/XKMformat.h>
1099 #include <X11/extensions/XKBfile.h>
1100 #include <X11/extensions/XKBrules.h>
1101
1102 #define _XkbListKeymaps         0
1103 #define _XkbListKeycodes        1
1104 #define _XkbListTypes           2
1105 #define _XkbListCompat          3
1106 #define _XkbListSymbols         4
1107 #define _XkbListGeometry        5
1108 #define _XkbListNumComponents   6
1109
1110 typedef struct _XkbSrvListInfo {
1111         int             szPool;
1112         int             nPool;
1113         char *          pool;
1114
1115         int             maxRtrn;
1116         int             nTotal;
1117
1118         char *          pattern[_XkbListNumComponents];
1119         int             nFound[_XkbListNumComponents];
1120 } XkbSrvListInfoRec,*XkbSrvListInfoPtr;
1121
1122 char *
1123 XkbGetRulesDflts(
1124         XkbRF_VarDefsPtr        /* defs */
1125 );
1126
1127 extern void     XkbSetRulesUsed(
1128         XkbRF_VarDefsPtr        /* defs */
1129 );
1130
1131
1132 extern  Status  XkbDDXList(
1133         DeviceIntPtr            /* dev */,
1134         XkbSrvListInfoPtr       /* listing */,
1135         ClientPtr               /* client */
1136 );
1137
1138 extern  unsigned int XkbDDXLoadKeymapByNames(
1139         DeviceIntPtr            /* keybd */,
1140         XkbComponentNamesPtr    /* names */,
1141         unsigned int            /* want */,
1142         unsigned int            /* need */,
1143         XkbFileInfoPtr          /* finfoRtrn */,
1144         char *                  /* keymapNameRtrn */,
1145         int                     /* keymapNameRtrnLen */
1146 );
1147
1148 extern  Bool XkbDDXNamesFromRules(
1149         DeviceIntPtr            /* keybd */,
1150         char *                  /* rules */,
1151         XkbRF_VarDefsPtr        /* defs */,
1152         XkbComponentNamesPtr    /* names */
1153 );
1154
1155 extern  FILE *XkbDDXOpenConfigFile(
1156         char *  /* mapName */,
1157         char *  /* fileNameRtrn */,
1158         int     /* fileNameRtrnLen */
1159 );
1160
1161 extern  Bool XkbDDXApplyConfig(
1162         XPointer        /* cfg_in */,
1163         XkbSrvInfoPtr   /* xkbi */
1164 );
1165
1166 extern XPointer XkbDDXPreloadConfig(
1167         char **                 /* rulesFileRtrn */,
1168         XkbRF_VarDefsPtr        /* defs */,
1169         XkbComponentNamesPtr    /* names */,
1170         DeviceIntPtr            /* dev */
1171 );
1172
1173 extern  int _XkbStrCaseCmp(
1174         char *                  /* str1 */,
1175         char *                  /* str2 */
1176 );
1177
1178 #endif /* XKBSRV_NEED_FILE_FUNCS */
1179
1180
1181 _XFUNCPROTOEND
1182
1183 #define XkbAtomGetString(d,s)   NameForAtom(s)
1184
1185 #endif /* _XKBSRV_H_ */
1186
1187