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