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