6a5dc8a7c66a3e2d8bbdb8e52f1e9edf47bbe767
[packages.git] / XOrg / headers / native / src / X11 / XKBlib.h
1 /* $Xorg: XKBlib.h,v 1.6 2000/08/17 19:45:03 cpqbld Exp $ */
2 /************************************************************
3 Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
4
5 Permission to use, copy, modify, and distribute this
6 software and its documentation for any purpose and without
7 fee is hereby granted, provided that the above copyright
8 notice appear in all copies and that both that copyright
9 notice and this permission notice appear in supporting
10 documentation, and that the name of Silicon Graphics not be 
11 used in advertising or publicity pertaining to distribution 
12 of the software without specific prior written permission.
13 Silicon Graphics makes no representation about the suitability 
14 of this software for any purpose. It is provided "as is"
15 without any express or implied warranty.
16
17 SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS 
18 SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 
19 AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
20 GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL 
21 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 
22 DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 
23 OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
24 THE USE OR PERFORMANCE OF THIS SOFTWARE.
25
26 ********************************************************/
27 /* $XFree86: xc/lib/X11/XKBlib.h,v 3.5 2003/04/17 02:06:31 dawes Exp $ */
28
29 #ifndef _XKBLIB_H_
30 #define _XKBLIB_H_
31
32 #include <X11/Xlib.h>
33 #include <X11/extensions/XKBstr.h>
34
35 typedef struct _XkbAnyEvent {
36         int             type;           /* XkbAnyEvent */
37         unsigned long   serial;         /* # of last req processed by server */
38         Bool            send_event;     /* is this from a SendEvent request? */
39         Display *       display;        /* Display the event was read from */
40         Time            time;           /* milliseconds */
41         int             xkb_type;       /* XKB event minor code */
42         unsigned int    device;         /* device ID */
43 } XkbAnyEvent;
44
45 typedef struct _XkbNewKeyboardNotify {
46         int             type;           /* XkbAnyEvent */
47         unsigned long   serial;         /* of last req processed by server */
48         Bool            send_event;     /* is this from a SendEvent request? */
49         Display *       display;        /* Display the event was read from */
50         Time            time;           /* milliseconds */
51         int             xkb_type;       /* XkbNewKeyboardNotify */
52         int             device;         /* device ID */
53         int             old_device;     /* device ID of previous keyboard */
54         int             min_key_code;   /* minimum key code */
55         int             max_key_code;   /* maximum key code */
56         int             old_min_key_code;/* min key code of previous kbd */
57         int             old_max_key_code;/* max key code of previous kbd */
58         unsigned int    changed;        /* changed aspects of the keyboard */
59         char            req_major;      /* major and minor opcode of req */
60         char            req_minor;      /* that caused change, if applicable */
61 } XkbNewKeyboardNotifyEvent;
62
63 typedef struct _XkbMapNotifyEvent {
64         int             type;           /* XkbAnyEvent */
65         unsigned long   serial;         /* of last req processed by server */
66         Bool            send_event;     /* is this from a SendEvent request */
67         Display *       display;        /* Display the event was read from */
68         Time            time;           /* milliseconds */
69         int             xkb_type;       /* XkbMapNotify */
70         int             device;         /* device ID */
71         unsigned int    changed;        /* fields which have been changed */
72         unsigned int    flags;          /* reserved */
73         int             first_type;     /* first changed key type */
74         int             num_types;      /* number of changed key types */
75         KeyCode         min_key_code;
76         KeyCode         max_key_code;
77         KeyCode         first_key_sym;
78         KeyCode         first_key_act;
79         KeyCode         first_key_behavior;
80         KeyCode         first_key_explicit;
81         KeyCode         first_modmap_key;  
82         KeyCode         first_vmodmap_key;
83         int             num_key_syms;
84         int             num_key_acts;
85         int             num_key_behaviors;
86         int             num_key_explicit;
87         int             num_modmap_keys;
88         int             num_vmodmap_keys;
89         unsigned int    vmods;          /* mask of changed virtual mods */
90 } XkbMapNotifyEvent;
91
92 typedef struct _XkbStateNotifyEvent {
93         int             type;           /* XkbAnyEvent */
94         unsigned long   serial;         /* # of last req processed by server */
95         Bool            send_event;     /* is this from a SendEvent request? */
96         Display *       display;        /* Display the event was read from */
97         Time            time;           /* milliseconds */
98         int             xkb_type;       /* XkbStateNotify */
99         int             device;         /* device ID */
100         unsigned int    changed;        /* mask of changed state components */
101         int             group;          /* keyboard group */
102         int             base_group;     /* base keyboard group */
103         int             latched_group;  /* latched keyboard group */
104         int             locked_group;   /* locked keyboard group */
105         unsigned int    mods;           /* modifier state */
106         unsigned int    base_mods;      /* base modifier state */
107         unsigned int    latched_mods;   /* latched modifiers */
108         unsigned int    locked_mods;    /* locked modifiers */
109         int             compat_state;   /* compatibility state */
110         unsigned char   grab_mods;      /* mods used for grabs */
111         unsigned char   compat_grab_mods;/* grab mods for non-XKB clients */
112         unsigned char   lookup_mods;    /* mods sent to clients */
113         unsigned char   compat_lookup_mods; /* mods sent to non-XKB clients */
114         int             ptr_buttons;    /* pointer button state */
115         KeyCode         keycode;        /* keycode that caused the change */
116         char            event_type;     /* KeyPress or KeyRelease */
117         char            req_major;      /* Major opcode of request */
118         char            req_minor;      /* Minor opcode of request */
119 } XkbStateNotifyEvent;
120
121 typedef struct _XkbControlsNotify {
122         int             type;           /* XkbAnyEvent */
123         unsigned long   serial;         /* of last req processed by server */
124         Bool            send_event;     /* is this from a SendEvent request? */
125         Display *       display;        /* Display the event was read from */
126         Time            time;           /* milliseconds */
127         int             xkb_type;       /* XkbControlsNotify */
128         int             device;         /* device ID */
129         unsigned int    changed_ctrls;  /* controls with changed sub-values */
130         unsigned int    enabled_ctrls;  /* controls currently enabled */
131         unsigned int    enabled_ctrl_changes;/* controls just {en,dis}abled */
132         int             num_groups;     /* total groups on keyboard */
133         KeyCode         keycode;        /* key that caused change or 0 */
134         char            event_type;     /* type of event that caused change */
135         char            req_major;      /* if keycode==0, major and minor */
136         char            req_minor;      /* opcode of req that caused change */
137 } XkbControlsNotifyEvent;
138
139 typedef struct _XkbIndicatorNotify {
140         int             type;           /* XkbAnyEvent */
141         unsigned long   serial;         /* of last req processed by server */
142         Bool            send_event;     /* is this from a SendEvent request? */
143         Display *       display;        /* Display the event was read from */
144         Time            time;           /* milliseconds */
145         int             xkb_type;       /* XkbIndicatorNotify */
146         int             device;         /* device ID */
147         unsigned int    changed;        /* indicators with new state or map */
148         unsigned int    state;          /* current state of all indicators */
149 } XkbIndicatorNotifyEvent;
150
151 typedef struct _XkbNamesNotify {
152         int             type;           /* XkbAnyEvent */
153         unsigned long   serial;         /* of last req processed by server */
154         Bool            send_event;     /* is this from a SendEvent request? */
155         Display *       display;        /* Display the event was read from */
156         Time            time;           /* milliseconds */
157         int             xkb_type;       /* XkbNamesNotify */
158         int             device;         /* device ID */
159         unsigned int    changed;        /* names that have changed */
160         int             first_type;     /* first key type with new name */
161         int             num_types;      /* number of key types with new names */
162         int             first_lvl;      /* first key type new new level names */
163         int             num_lvls;       /* # of key types w/new level names */
164         int             num_aliases;    /* total number of key aliases*/
165         int             num_radio_groups;/* total number of radio groups */
166         unsigned int    changed_vmods;  /* virtual modifiers with new names */
167         unsigned int    changed_groups; /* groups with new names */
168         unsigned int    changed_indicators;/* indicators with new names */
169         int             first_key;      /* first key with new name */
170         int             num_keys;       /* number of keys with new names */
171 } XkbNamesNotifyEvent;
172
173 typedef struct _XkbCompatMapNotify {
174         int             type;           /* XkbAnyEvent */
175         unsigned long   serial;         /* of last req processed by server */
176         Bool            send_event;     /* is this from a SendEvent request? */
177         Display *       display;        /* Display the event was read from */
178         Time            time;           /* milliseconds */
179         int             xkb_type;       /* XkbCompatMapNotify */
180         int             device;         /* device ID */
181         unsigned int    changed_groups; /* groups with new compat maps */
182         int             first_si;       /* first new symbol interp */
183         int             num_si;         /* number of new symbol interps */
184         int             num_total_si;   /* total # of symbol interps */
185 } XkbCompatMapNotifyEvent;
186
187 typedef struct _XkbBellNotify {
188         int             type;           /* XkbAnyEvent */
189         unsigned long   serial;         /* of last req processed by server */
190         Bool            send_event;     /* is this from a SendEvent request? */
191         Display *       display;        /* Display the event was read from */
192         Time            time;           /* milliseconds */
193         int             xkb_type;       /* XkbBellNotify */
194         int             device;         /* device ID */
195         int             percent;        /* requested volume as a % of maximum */
196         int             pitch;          /* requested pitch in Hz */
197         int             duration;       /* requested duration in useconds */
198         int             bell_class;     /* (input extension) feedback class */
199         int             bell_id;        /* (input extension) ID of feedback */
200         Atom            name;           /* "name" of requested bell */
201         Window          window;         /* window associated with event */
202         Bool            event_only;     /* "event only" requested */
203 } XkbBellNotifyEvent;
204
205 typedef struct _XkbActionMessage {
206         int             type;           /* XkbAnyEvent */
207         unsigned long   serial;         /* of last req processed by server */
208         Bool            send_event;     /* is this from a SendEvent request? */
209         Display *       display;        /* Display the event was read from */
210         Time            time;           /* milliseconds */
211         int             xkb_type;       /* XkbActionMessage */
212         int             device;         /* device ID */
213         KeyCode         keycode;        /* key that generated the event */
214         Bool            press;          /* true if act caused by key press */
215         Bool            key_event_follows;/* true if key event also generated */
216         int             group;          /* effective group */
217         unsigned int    mods;           /* effective mods */
218         char            message[XkbActionMessageLength+1]; 
219                                         /* message -- leave space for NUL */
220 } XkbActionMessageEvent;
221
222 typedef struct _XkbAccessXNotify {
223         int             type;           /* XkbAnyEvent */
224         unsigned long   serial;         /* of last req processed by server */
225         Bool            send_event;     /* is this from a SendEvent request? */
226         Display *       display;        /* Display the event was read from */
227         Time            time;           /* milliseconds */
228         int             xkb_type;       /* XkbAccessXNotify */
229         int             device;         /* device ID */
230         int             detail;         /* XkbAXN_* */
231         int             keycode;        /* key of event */
232         int             sk_delay;       /* current slow keys delay */
233         int             debounce_delay; /* current debounce delay */
234 } XkbAccessXNotifyEvent;
235
236 typedef struct _XkbExtensionDeviceNotify {
237         int             type;           /* XkbAnyEvent */
238         unsigned long   serial;         /* of last req processed by server */
239         Bool            send_event;     /* is this from a SendEvent request? */
240         Display *       display;        /* Display the event was read from */
241         Time            time;           /* milliseconds */
242         int             xkb_type;       /* XkbExtensionDeviceNotify */
243         int             device;         /* device ID */
244         unsigned int    reason;         /* reason for the event */      
245         unsigned int    supported;      /* mask of supported features */        
246         unsigned int    unsupported;    /* mask of unsupported features */
247                                         /* that some app tried to use */
248         int             first_btn;      /* first button that changed */
249         int             num_btns;       /* range of buttons changed */
250         unsigned int    leds_defined;   /* indicators with names or maps */
251         unsigned int    led_state;      /* current state of the indicators */
252         int             led_class;      /* feedback class for led changes */
253         int             led_id;         /* feedback id for led changes */
254 } XkbExtensionDeviceNotifyEvent;
255
256 typedef union _XkbEvent {
257         int                             type;
258         XkbAnyEvent                     any;
259         XkbNewKeyboardNotifyEvent       new_kbd;
260         XkbMapNotifyEvent               map;
261         XkbStateNotifyEvent             state;
262         XkbControlsNotifyEvent          ctrls;
263         XkbIndicatorNotifyEvent         indicators;
264         XkbNamesNotifyEvent             names;
265         XkbCompatMapNotifyEvent         compat;
266         XkbBellNotifyEvent              bell;
267         XkbActionMessageEvent           message;
268         XkbAccessXNotifyEvent           accessx;
269         XkbExtensionDeviceNotifyEvent   device;
270         XEvent                          core;
271 } XkbEvent;
272
273 typedef struct  _XkbKbdDpyState XkbKbdDpyStateRec,*XkbKbdDpyStatePtr;
274
275         /* XkbOpenDisplay error codes */
276 #define XkbOD_Success           0
277 #define XkbOD_BadLibraryVersion 1
278 #define XkbOD_ConnectionRefused 2
279 #define XkbOD_NonXkbServer      3
280 #define XkbOD_BadServerVersion  4
281
282         /* Values for XlibFlags */
283 #define XkbLC_ForceLatin1Lookup         (1<<0)
284 #define XkbLC_ConsumeLookupMods         (1<<1)
285 #define XkbLC_AlwaysConsumeShiftAndLock (1<<2)
286 #define XkbLC_IgnoreNewKeyboards        (1<<3)
287 #define XkbLC_ControlFallback           (1<<4)
288 #define XkbLC_ConsumeKeysOnComposeFail  (1<<29)
289 #define XkbLC_ComposeLED                (1<<30)
290 #define XkbLC_BeepOnComposeFail         (1<<31)
291
292 #define XkbLC_AllComposeControls        (0xc0000000)
293 #define XkbLC_AllControls               (0xc000001f)
294
295 _XFUNCPROTOBEGIN
296
297 extern  Bool    XkbIgnoreExtension(
298         Bool                    /* ignore */
299 );
300
301 extern  Display *XkbOpenDisplay(
302         char *                  /* name */,
303         int *                   /* ev_rtrn */,
304         int *                   /* err_rtrn */,
305         int *                   /* major_rtrn */,
306         int *                   /* minor_rtrn */,
307         int *                   /* reason */
308 );
309
310 extern  Bool    XkbQueryExtension(
311         Display *               /* dpy */,
312         int *                   /* opcodeReturn */,
313         int *                   /* eventBaseReturn */,
314         int *                   /* errorBaseReturn */,
315         int *                   /* majorRtrn */,
316         int *                   /* minorRtrn */
317 );
318
319 extern  Bool    XkbUseExtension(
320         Display *               /* dpy */,
321         int *                   /* major_rtrn */,
322         int *                   /* minor_rtrn */
323 );
324
325 extern  Bool    XkbLibraryVersion(
326         int *                   /* libMajorRtrn */,
327         int *                   /* libMinorRtrn */
328 );
329
330 extern  unsigned int    XkbSetXlibControls(
331         Display*                /* dpy */,
332         unsigned int            /* affect */,
333         unsigned int            /* values */
334 );
335
336 extern  unsigned int    XkbGetXlibControls(
337         Display*                /* dpy */
338 );
339
340 extern  unsigned int    XkbXlibControlsImplemented(void);
341
342 typedef Atom    (*XkbInternAtomFunc)(
343         Display *               /* dpy */,
344         _Xconst char *          /* name */,
345         Bool                    /* only_if_exists */
346 );
347
348 typedef char *  (*XkbGetAtomNameFunc)(
349         Display *               /* dpy */,
350         Atom                    /* atom */
351 );
352
353 extern void             XkbSetAtomFuncs(
354         XkbInternAtomFunc       /* getAtom */,
355         XkbGetAtomNameFunc      /* getName */
356 );
357
358 extern  KeySym XkbKeycodeToKeysym(
359                 Display *       /* dpy */,
360 #if NeedWidePrototypes
361                  unsigned int   /* kc */,
362 #else
363                  KeyCode        /* kc */,
364 #endif
365                  int            /* group */,
366                  int            /* level */
367 );
368
369 extern  unsigned int    XkbKeysymToModifiers(
370     Display *                   /* dpy */,
371     KeySym                      /* ks */
372 );
373
374 extern  Bool            XkbLookupKeySym(
375     Display *                   /* dpy */,
376     KeyCode                     /* keycode */,
377     unsigned int                /* modifiers */,
378     unsigned int *              /* modifiers_return */,
379     KeySym *                    /* keysym_return */
380 );
381
382 extern  int             XkbLookupKeyBinding(
383     Display *                   /* dpy */,
384     KeySym                      /* sym_rtrn */,
385     unsigned int                /* mods */,
386     char *                      /* buffer */,
387     int                         /* nbytes */,
388     int *                       /* extra_rtrn */
389 );
390
391 extern  Bool            XkbTranslateKeyCode(
392     XkbDescPtr                  /* xkb */,
393     KeyCode                     /* keycode */,
394     unsigned int                /* modifiers */,
395     unsigned int *              /* modifiers_return */,
396     KeySym *                    /* keysym_return */
397 );
398
399 extern  int             XkbTranslateKeySym(
400     Display *                   /* dpy */,
401     register KeySym *           /* sym_return */,
402     unsigned int                /* modifiers */,
403     char *                      /* buffer */,
404     int                         /* nbytes */,
405     int *                       /* extra_rtrn */
406 );
407
408 extern  Bool    XkbSetAutoRepeatRate(
409         Display *               /* dpy */,
410         unsigned int            /* deviceSpec */,
411         unsigned int            /* delay */,
412         unsigned int            /* interval */
413 );
414
415 extern  Bool    XkbGetAutoRepeatRate(
416         Display *               /* dpy */,
417         unsigned int            /* deviceSpec */,
418         unsigned int *          /* delayRtrn */,
419         unsigned int *          /* intervalRtrn */
420 );
421
422 extern  Bool    XkbChangeEnabledControls(
423         Display *               /* dpy */,
424         unsigned int            /* deviceSpec */,
425         unsigned int            /* affect */,
426         unsigned int            /* values */
427 );
428
429 extern  Bool    XkbDeviceBell(
430         Display *               /* dpy */,
431         Window                  /* win */,
432         int                     /* deviceSpec */,
433         int                     /* bellClass */,
434         int                     /* bellID */,
435         int                     /* percent */,
436         Atom                    /* name */
437 );
438
439 extern  Bool    XkbForceDeviceBell(
440         Display *               /* dpy */,
441         int                     /* deviceSpec */,
442         int                     /* bellClass */,
443         int                     /* bellID */,
444         int                     /* percent */
445 );
446
447 extern  Bool    XkbDeviceBellEvent(
448         Display *               /* dpy */,
449         Window                  /* win */,
450         int                     /* deviceSpec */,
451         int                     /* bellClass */,
452         int                     /* bellID */,
453         int                     /* percent */,
454         Atom                    /* name */
455 );
456
457 extern  Bool    XkbBell(
458         Display *               /* dpy */,
459         Window                  /* win */,
460         int                     /* percent */,
461         Atom                    /* name */
462 );
463
464 extern  Bool    XkbForceBell(
465         Display *               /* dpy */,
466         int                     /* percent */
467 );
468
469 extern  Bool    XkbBellEvent(
470         Display *               /* dpy */,
471         Window                  /* win */,
472         int                     /* percent */,
473         Atom                    /* name */
474 );
475
476 extern  Bool    XkbSelectEvents(
477         Display *               /* dpy */,
478         unsigned int            /* deviceID */,
479         unsigned int            /* affect */,
480         unsigned int            /* values */
481 );
482
483 extern  Bool    XkbSelectEventDetails(
484         Display *               /* dpy */,
485         unsigned int            /* deviceID */,
486         unsigned int            /* eventType */,
487         unsigned long           /* affect */,
488         unsigned long           /* details */
489 );
490
491 extern  void    XkbNoteMapChanges(
492     XkbMapChangesPtr            /* old */,
493     XkbMapNotifyEvent   *       /* new */,
494     unsigned int                /* wanted */
495 );
496
497 extern  void    XkbNoteNameChanges(
498     XkbNameChangesPtr           /* old */,
499     XkbNamesNotifyEvent *       /* new */,
500     unsigned int                /* wanted */
501 );
502
503 extern  Status  XkbGetIndicatorState(
504         Display *               /* dpy */,
505         unsigned int            /* deviceSpec */,
506         unsigned int *          /* pStateRtrn */
507 );
508
509 extern  Status  XkbGetDeviceIndicatorState(
510         Display *               /* dpy */,
511         unsigned int            /* deviceSpec */,
512         unsigned int            /* ledClass */,
513         unsigned int            /* ledID */,
514         unsigned int *          /* pStateRtrn */
515 );
516
517 extern  Status   XkbGetIndicatorMap(
518         Display *               /* dpy */,
519         unsigned long           /* which */,
520         XkbDescPtr              /* desc */
521 );
522
523 extern  Bool     XkbSetIndicatorMap(
524         Display *               /* dpy */,
525         unsigned long           /* which */,
526         XkbDescPtr              /* desc */
527 );
528
529 #define XkbNoteIndicatorMapChanges(o,n,w) \
530                                 ((o)->map_changes|=((n)->map_changes&(w)))
531 #define XkbNoteIndicatorStateChanges(o,n,w)\
532                                 ((o)->state_changes|=((n)->state_changes&(w)))
533 #define XkbGetIndicatorMapChanges(d,x,c) \
534                                 (XkbGetIndicatorMap((d),(c)->map_changes,x)
535 #define XkbChangeIndicatorMaps(d,x,c) \
536                                 (XkbSetIndicatorMap((d),(c)->map_changes,x))
537
538 extern  Bool    XkbGetNamedIndicator(
539         Display *               /* dpy */,
540         Atom                    /* name */,
541         int *                   /* pNdxRtrn */,
542         Bool *                  /* pStateRtrn */,
543         XkbIndicatorMapPtr      /* pMapRtrn */,
544         Bool *                  /* pRealRtrn */
545 );
546
547 extern  Bool    XkbGetNamedDeviceIndicator(
548         Display *               /* dpy */,
549         unsigned int            /* deviceSpec */,
550         unsigned int            /* ledClass */,
551         unsigned int            /* ledID */,
552         Atom                    /* name */,
553         int *                   /* pNdxRtrn */,
554         Bool *                  /* pStateRtrn */,
555         XkbIndicatorMapPtr      /* pMapRtrn */,
556         Bool *                  /* pRealRtrn */
557 );
558
559 extern  Bool    XkbSetNamedIndicator(
560         Display *               /* dpy */,
561         Atom                    /* name */,
562         Bool                    /* changeState */,
563         Bool                    /* state */,
564         Bool                    /* createNewMap */,
565         XkbIndicatorMapPtr      /* pMap */
566 );
567
568 extern  Bool    XkbSetNamedDeviceIndicator(
569         Display *               /* dpy */,
570         unsigned int            /* deviceSpec */,
571         unsigned int            /* ledClass */,
572         unsigned int            /* ledID */,
573         Atom                    /* name */,
574         Bool                    /* changeState */,
575         Bool                    /* state */,
576         Bool                    /* createNewMap */,
577         XkbIndicatorMapPtr      /* pMap */
578 );
579
580 extern  Bool    XkbLockModifiers(
581         Display *               /* dpy */,
582         unsigned int            /* deviceSpec */,
583         unsigned int            /* affect */,
584         unsigned int            /* values */
585 );
586
587 extern  Bool    XkbLatchModifiers(
588         Display *               /* dpy */,
589         unsigned int            /* deviceSpec */,
590         unsigned int            /* affect */,
591         unsigned int            /* values */
592 );
593
594 extern  Bool    XkbLockGroup(
595         Display *               /* dpy */,
596         unsigned int            /* deviceSpec */,
597         unsigned int            /* group */
598 );
599
600 extern  Bool    XkbLatchGroup(
601         Display *               /* dpy */,
602         unsigned int            /* deviceSpec */,
603         unsigned int            /* group */
604 );
605
606 extern  Bool    XkbSetServerInternalMods(
607         Display *               /* dpy */,
608         unsigned int            /* deviceSpec */,
609         unsigned int            /* affectReal */,
610         unsigned int            /* realValues */,
611         unsigned int            /* affectVirtual */,
612         unsigned int            /* virtualValues */
613 );
614
615 extern  Bool    XkbSetIgnoreLockMods(
616         Display *               /* dpy */,
617         unsigned int            /* deviceSpec */,
618         unsigned int            /* affectReal */,
619         unsigned int            /* realValues */,
620         unsigned int            /* affectVirtual */,
621         unsigned int            /* virtualValues */
622 );
623
624
625 extern  Bool    XkbVirtualModsToReal(
626         XkbDescPtr              /* xkb */,
627         unsigned int            /* virtual_mask */,
628         unsigned int *          /* mask_rtrn */
629 );
630
631 extern  Bool    XkbComputeEffectiveMap(
632         XkbDescPtr              /* xkb */,
633         XkbKeyTypePtr           /* type */,
634         unsigned char *         /* map_rtrn */
635 );
636
637 extern  Status XkbInitCanonicalKeyTypes(
638     XkbDescPtr                  /* xkb */,
639     unsigned int                /* which */,
640     int                         /* keypadVMod */
641 );
642
643 extern  XkbDescPtr XkbAllocKeyboard(
644         void
645 );
646
647 extern  void    XkbFreeKeyboard(
648         XkbDescPtr              /* xkb */,
649         unsigned int            /* which */,
650         Bool                    /* freeDesc */
651 );
652
653 extern  Status XkbAllocClientMap(
654         XkbDescPtr              /* xkb */,
655         unsigned int            /* which */,
656         unsigned int            /* nTypes */
657 );
658
659 extern  Status XkbAllocServerMap(
660         XkbDescPtr              /* xkb */,
661         unsigned int            /* which */,
662         unsigned int            /* nActions */
663 );
664
665 extern  void    XkbFreeClientMap(
666     XkbDescPtr                  /* xkb */,
667     unsigned int                /* what */,
668     Bool                        /* freeMap */
669 );
670
671 extern  void    XkbFreeServerMap(
672     XkbDescPtr                  /* xkb */,
673     unsigned int                /* what */,
674     Bool                        /* freeMap */
675 );
676
677 extern  XkbKeyTypePtr   XkbAddKeyType(
678     XkbDescPtr                  /* xkb */,
679     Atom                        /* name */,
680     int                         /* map_count */,
681     Bool                        /* want_preserve */,
682     int                         /* num_lvls */
683 );
684
685 extern  Status XkbAllocIndicatorMaps(
686         XkbDescPtr              /* xkb */
687 );
688
689 extern  void XkbFreeIndicatorMaps(
690     XkbDescPtr                  /* xkb */
691 );
692
693 extern  XkbDescPtr XkbGetMap(
694         Display *               /* dpy */,
695         unsigned int            /* which */,
696         unsigned int            /* deviceSpec */
697 );
698
699 extern  Status  XkbGetUpdatedMap(
700         Display *               /* dpy */,
701         unsigned int            /* which */,
702         XkbDescPtr              /* desc */
703 );
704
705 extern  Status  XkbGetMapChanges(
706     Display *                   /* dpy */,
707     XkbDescPtr                  /* xkb */,
708     XkbMapChangesPtr            /* changes */
709 );
710
711
712 extern  Status  XkbRefreshKeyboardMapping(
713     XkbMapNotifyEvent *         /* event */
714 );
715
716 extern  Status  XkbGetKeyTypes(
717     Display *                   /* dpy */,
718     unsigned int                /* first */,
719     unsigned int                /* num */,
720     XkbDescPtr                  /* xkb */
721 );
722
723 extern  Status  XkbGetKeySyms(
724     Display *                   /* dpy */,
725     unsigned int                /* first */,
726     unsigned int                /* num */,
727     XkbDescPtr                  /* xkb */
728 );
729
730 extern  Status  XkbGetKeyActions(
731     Display *                   /* dpy */,
732     unsigned int                /* first */,
733     unsigned int                /* num */,
734     XkbDescPtr                  /* xkb */
735 );
736
737 extern  Status  XkbGetKeyBehaviors(
738         Display *               /* dpy */,
739         unsigned int            /* firstKey */,
740         unsigned int            /* nKeys */,
741         XkbDescPtr              /* desc */
742 );
743
744 extern  Status  XkbGetVirtualMods(
745         Display *               /* dpy */,
746         unsigned int            /* which */,
747         XkbDescPtr              /* desc */
748 );
749
750 extern  Status  XkbGetKeyExplicitComponents(
751         Display *               /* dpy */,
752         unsigned int            /* firstKey */,
753         unsigned int            /* nKeys */,
754         XkbDescPtr              /* desc */
755 );
756
757 extern  Status  XkbGetKeyModifierMap(
758         Display *               /* dpy */,
759         unsigned int            /* firstKey */,
760         unsigned int            /* nKeys */,
761         XkbDescPtr              /* desc */
762 );
763
764 extern  Status  XkbGetKeyVirtualModMap(
765         Display *               /* dpy */,
766         unsigned int            /* first */,
767         unsigned int            /* num */,
768         XkbDescPtr              /* xkb */
769 );
770
771 extern  Status  XkbAllocControls(
772         XkbDescPtr              /* xkb */,
773         unsigned int            /* which*/
774 );
775
776 extern  void    XkbFreeControls(
777         XkbDescPtr              /* xkb */,
778         unsigned int            /* which */,
779         Bool                    /* freeMap */
780 );
781
782 extern  Status  XkbGetControls(
783         Display *               /* dpy */,
784         unsigned long           /* which */,
785         XkbDescPtr              /* desc */
786 );
787
788 extern  Bool    XkbSetControls(
789         Display *               /* dpy */,
790         unsigned long           /* which */,
791         XkbDescPtr              /* desc */
792 );
793
794 extern  void    XkbNoteControlsChanges(
795     XkbControlsChangesPtr       /* old */,
796     XkbControlsNotifyEvent *    /* new */,
797     unsigned int                /* wanted */
798 );
799
800 #define XkbGetControlsChanges(d,x,c)    XkbGetControls(d,(c)->changed_ctrls,x)
801 #define XkbChangeControls(d,x,c)        XkbSetControls(d,(c)->changed_ctrls,x)
802
803 extern  Status  XkbAllocCompatMap(
804     XkbDescPtr                  /* xkb */,
805     unsigned int                /* which */,
806     unsigned int                /* nInterpret */
807 );
808
809 extern  void    XkbFreeCompatMap(
810     XkbDescPtr                  /* xkb */,
811     unsigned int                /* which */,
812     Bool                        /* freeMap */
813 );
814
815 extern Status XkbGetCompatMap(
816         Display *               /* dpy */,
817         unsigned int            /* which */,
818         XkbDescPtr              /* xkb */
819 );
820
821 extern Bool XkbSetCompatMap(
822         Display *               /* dpy */,
823         unsigned int            /* which */,
824         XkbDescPtr              /* xkb */,
825         Bool                    /* updateActions */
826 );
827
828 extern  XkbSymInterpretPtr XkbAddSymInterpret(
829         XkbDescPtr              /* xkb */,
830         XkbSymInterpretPtr      /* si */,
831         Bool                    /* updateMap */,
832         XkbChangesPtr           /* changes */
833 );
834
835 extern  Status XkbAllocNames(
836         XkbDescPtr              /* xkb */,
837         unsigned int            /* which */,
838         int                     /* nTotalRG */,
839         int                     /* nTotalAliases */
840 );
841
842 extern  Status  XkbGetNames(
843         Display *               /* dpy */,
844         unsigned int            /* which */,
845         XkbDescPtr              /* desc */
846 );
847
848 extern  Bool    XkbSetNames(
849         Display *               /* dpy */,
850         unsigned int            /* which */,
851         unsigned int            /* firstType */,
852         unsigned int            /* nTypes */,
853         XkbDescPtr              /* desc */
854 );
855
856 extern  Bool    XkbChangeNames(
857         Display *               /* dpy */,
858         XkbDescPtr              /* xkb */,
859         XkbNameChangesPtr       /* changes */
860 );
861
862 extern  void XkbFreeNames(
863         XkbDescPtr              /* xkb */,
864         unsigned int            /* which */,
865         Bool                    /* freeMap */
866 );
867
868
869 extern  Status  XkbGetState(
870         Display *               /* dpy */,
871         unsigned int            /* deviceSpec */,
872         XkbStatePtr             /* rtrnState */
873 );
874
875 extern  Bool    XkbSetMap(
876         Display *               /* dpy */,
877         unsigned int            /* which */,
878         XkbDescPtr              /* desc */
879 );
880
881 extern  Bool    XkbChangeMap(
882         Display*                /* dpy */,
883         XkbDescPtr              /* desc */,
884         XkbMapChangesPtr        /* changes */
885 );
886
887 extern  Bool    XkbSetDetectableAutoRepeat(
888         Display *               /* dpy */,
889         Bool                    /* detectable */,
890         Bool *                  /* supported */
891 );
892
893 extern  Bool    XkbGetDetectableAutoRepeat(
894         Display *               /* dpy */,
895         Bool *                  /* supported */
896 );
897
898 extern  Bool    XkbSetAutoResetControls(
899     Display *                   /* dpy */,
900     unsigned int                /* changes */,
901     unsigned int *              /* auto_ctrls */,
902     unsigned int *              /* auto_values */
903 );
904
905 extern  Bool    XkbGetAutoResetControls(
906     Display *                   /* dpy */,
907     unsigned int *              /* auto_ctrls */,
908     unsigned int *              /* auto_ctrl_values */
909 );
910
911 extern  Bool    XkbSetPerClientControls(
912     Display *                   /* dpy */,
913     unsigned int                /* change */,
914     unsigned int *              /* values */
915 );
916
917 extern  Bool    XkbGetPerClientControls(
918     Display *                   /* dpy */,
919     unsigned int *              /* ctrls */
920 );
921
922 extern Status XkbCopyKeyType(
923     XkbKeyTypePtr       /* from */,
924     XkbKeyTypePtr       /* into */
925 );
926
927 extern Status XkbCopyKeyTypes(
928     XkbKeyTypePtr       /* from */,
929     XkbKeyTypePtr       /* into */,
930     int                 /* num_types */
931 );
932
933 extern  Status  XkbResizeKeyType(
934     XkbDescPtr          /* xkb */,
935     int                 /* type_ndx */,
936     int                 /* map_count */,
937     Bool                /* want_preserve */,
938     int                 /* new_num_lvls */
939 );
940
941 extern  KeySym *XkbResizeKeySyms(
942         XkbDescPtr              /* desc */,
943         int                     /* forKey */,
944         int                     /* symsNeeded */
945 );
946
947 extern  XkbAction *XkbResizeKeyActions(
948         XkbDescPtr              /* desc */,
949         int                     /* forKey */,
950         int                     /* actsNeeded */
951 );
952
953 extern  Status XkbChangeTypesOfKey(
954         XkbDescPtr              /* xkb */,
955         int                     /* key */,
956         int                     /* num_groups */,
957         unsigned int            /* groups */,
958         int *                   /* newTypes */,
959         XkbMapChangesPtr        /* pChanges */
960 );
961
962 extern  Status   XkbChangeKeycodeRange(
963         XkbDescPtr              /* xkb */,
964         int                     /* minKC */,
965         int                     /* maxKC */,
966         XkbChangesPtr           /* changes */
967 );
968
969 /***====================================================================***/
970
971 extern  XkbComponentListPtr     XkbListComponents(
972         Display *               /* dpy */,
973         unsigned int            /* deviceSpec */,
974         XkbComponentNamesPtr    /* ptrns */,
975         int *                   /* max_inout */
976 );
977
978 extern  void XkbFreeComponentList(
979         XkbComponentListPtr     /* list */
980 );
981
982 extern  XkbDescPtr XkbGetKeyboard(
983         Display *               /* dpy */,
984         unsigned int            /* which */,
985         unsigned int            /* deviceSpec */
986 );
987
988 extern XkbDescPtr XkbGetKeyboardByName(
989     Display *                   /* dpy */,
990     unsigned int                /* deviceSpec */,
991     XkbComponentNamesPtr        /* names */,
992     unsigned int                /* want */,
993     unsigned int                /* need */,
994     Bool                        /* load */
995 );
996
997 /***====================================================================***/
998
999 extern  int     XkbKeyTypesForCoreSymbols(      /* returns # of groups */
1000     XkbDescPtr  /* xkb */,                      /* keyboard device */
1001     int         /* map_width */,                /* width of core KeySym array */
1002     KeySym *    /* core_syms */,                /* always mapWidth symbols */
1003     unsigned int        /* protected */,        /* explicit key types */
1004     int *       /* types_inout */,              /* always four type indices */
1005     KeySym *    /* xkb_syms_rtrn */             /* must have enough space */
1006 );
1007
1008 extern  Bool    XkbApplyCompatMapToKey( /* False only on error */
1009     XkbDescPtr          /* xkb */,              /* keymap to be edited */
1010     KeyCode             /* key */,              /* key to be updated */
1011     XkbChangesPtr       /* changes */           /* resulting changes to map */
1012 );
1013
1014 extern  Bool    XkbUpdateMapFromCore( /* False only on error */
1015     XkbDescPtr          /* xkb */,              /* XKB keyboard to be edited */
1016     KeyCode             /* first_key */,        /* first changed key */
1017     int                 /* num_keys */,         /* number of changed keys */
1018     int                 /* map_width */,        /* width of core keymap */
1019     KeySym *            /* core_keysyms */,     /* symbols from core keymap */
1020     XkbChangesPtr       /* changes */           /* resulting changes */
1021 );
1022
1023 /***====================================================================***/
1024
1025 extern  XkbDeviceLedInfoPtr     XkbAddDeviceLedInfo(
1026         XkbDeviceInfoPtr        /* devi */,
1027         unsigned int            /* ledClass */,
1028         unsigned int            /* ledId */
1029 );
1030
1031 extern  Status                  XkbResizeDeviceButtonActions(
1032         XkbDeviceInfoPtr        /* devi */,
1033         unsigned int            /* newTotal */
1034 );
1035
1036 extern  XkbDeviceInfoPtr        XkbAllocDeviceInfo(
1037         unsigned int            /* deviceSpec */,
1038         unsigned int            /* nButtons */,
1039         unsigned int            /* szLeds */
1040 );
1041
1042 extern  void XkbFreeDeviceInfo(
1043         XkbDeviceInfoPtr        /* devi */,
1044         unsigned int            /* which */,
1045         Bool                    /* freeDevI */
1046 );
1047
1048 extern  void    XkbNoteDeviceChanges(
1049     XkbDeviceChangesPtr                 /* old */,
1050     XkbExtensionDeviceNotifyEvent *     /* new */,
1051     unsigned int                        /* wanted */
1052 );
1053
1054 extern  XkbDeviceInfoPtr XkbGetDeviceInfo(
1055         Display *               /* dpy */,
1056         unsigned int            /* which */,
1057         unsigned int            /* deviceSpec */,
1058         unsigned int            /* ledClass */,
1059         unsigned int            /* ledID */
1060 );
1061
1062 extern  Status  XkbGetDeviceInfoChanges(
1063         Display *               /* dpy */,
1064         XkbDeviceInfoPtr        /* devi */,
1065         XkbDeviceChangesPtr     /* changes */
1066 );
1067
1068 extern  Status  XkbGetDeviceButtonActions(
1069         Display *               /* dpy */,
1070         XkbDeviceInfoPtr        /* devi */,
1071         Bool                    /* all */,
1072         unsigned int            /* first */,
1073         unsigned int            /* nBtns */
1074 );
1075
1076 extern  Status  XkbGetDeviceLedInfo(
1077         Display *               /* dpy */,
1078         XkbDeviceInfoPtr        /* devi */,
1079         unsigned int            /* ledClass (class, XIDflt, XIAll) */,
1080         unsigned int            /* ledId (id, XIDflt, XIAll) */,
1081         unsigned int            /* which (XkbXI_Indicator{Names,Map}Mask */
1082 );
1083
1084 extern  Bool    XkbSetDeviceInfo(
1085         Display *               /* dpy */,
1086         unsigned int            /* which */,
1087         XkbDeviceInfoPtr        /* devi */
1088 );
1089
1090 extern  Bool    XkbChangeDeviceInfo(
1091         Display*                /* dpy */,
1092         XkbDeviceInfoPtr        /* desc */,
1093         XkbDeviceChangesPtr     /* changes */
1094 );
1095
1096 extern  Bool XkbSetDeviceLedInfo(
1097         Display *               /* dpy */,
1098         XkbDeviceInfoPtr        /* devi */,
1099         unsigned int            /* ledClass */,
1100         unsigned int            /* ledID */,
1101         unsigned int            /* which */
1102 );
1103
1104 extern  Bool XkbSetDeviceButtonActions(
1105         Display *               /* dpy */,
1106         XkbDeviceInfoPtr        /* devi */,
1107         unsigned int            /* first */,
1108         unsigned int            /* nBtns */
1109 );
1110
1111 /***====================================================================***/
1112
1113 extern  char    XkbToControl(
1114         char            /* c */
1115 );
1116
1117 /***====================================================================***/
1118
1119 extern  Bool XkbSetDebuggingFlags(
1120     Display *           /* dpy */,
1121     unsigned int        /* mask */,
1122     unsigned int        /* flags */,
1123     char *              /* msg */,
1124     unsigned int        /* ctrls_mask */,
1125     unsigned int        /* ctrls */,
1126     unsigned int *      /* rtrn_flags */,
1127     unsigned int *      /* rtrn_ctrls */
1128 );
1129
1130 extern  Bool XkbApplyVirtualModChanges(
1131    XkbDescPtr           /* xkb */,
1132    unsigned int         /* changed */,
1133    XkbChangesPtr        /* changes */
1134 );
1135
1136 extern Bool XkbUpdateActionVirtualMods(
1137         XkbDescPtr              /* xkb */,
1138         XkbAction *             /* act */,
1139         unsigned int            /* changed */
1140 );
1141
1142 extern void XkbUpdateKeyTypeVirtualMods(
1143         XkbDescPtr              /* xkb */,
1144         XkbKeyTypePtr           /* type */,
1145         unsigned int            /* changed */,
1146         XkbChangesPtr           /* changes */
1147 );
1148
1149 _XFUNCPROTOEND
1150
1151 #endif /* _XKBLIB_H_ */