1/* $Xorg: XKBlib.h,v 1.6 2000/08/17 19:45:03 cpqbld Exp $ */
2/************************************************************
3Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
4
5Permission to use, copy, modify, and distribute this
6software and its documentation for any purpose and without
7fee is hereby granted, provided that the above copyright
8notice appear in all copies and that both that copyright
9notice and this permission notice appear in supporting
10documentation, and that the name of Silicon Graphics not be
11used in advertising or publicity pertaining to distribution
12of the software without specific prior written permission.
13Silicon Graphics makes no representation about the suitability
14of this software for any purpose. It is provided "as is"
15without any express or implied warranty.
16
17SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
18SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
19AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
20GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
21DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
22DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
23OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
24THE 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
35typedef 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
45typedef 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
63typedef 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
92typedef 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
121typedef 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
139typedef 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
151typedef 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
173typedef 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
187typedef 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
205typedef 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
222typedef 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
236typedef 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
256typedef 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
273typedef 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
297extern	Bool	XkbIgnoreExtension(
298	Bool			/* ignore */
299);
300
301extern	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
310extern	Bool	XkbQueryExtension(
311	Display *		/* dpy */,
312	int *			/* opcodeReturn */,
313	int *			/* eventBaseReturn */,
314	int *			/* errorBaseReturn */,
315	int *			/* majorRtrn */,
316	int *			/* minorRtrn */
317);
318
319extern	Bool	XkbUseExtension(
320	Display *		/* dpy */,
321	int *			/* major_rtrn */,
322	int *			/* minor_rtrn */
323);
324
325extern	Bool	XkbLibraryVersion(
326	int *			/* libMajorRtrn */,
327	int *			/* libMinorRtrn */
328);
329
330extern	unsigned int	XkbSetXlibControls(
331	Display*		/* dpy */,
332	unsigned int		/* affect */,
333	unsigned int		/* values */
334);
335
336extern	unsigned int	XkbGetXlibControls(
337	Display*		/* dpy */
338);
339
340extern	unsigned int	XkbXlibControlsImplemented(void);
341
342typedef	Atom	(*XkbInternAtomFunc)(
343	Display *		/* dpy */,
344	_Xconst char *		/* name */,
345	Bool			/* only_if_exists */
346);
347
348typedef char *	(*XkbGetAtomNameFunc)(
349	Display *		/* dpy */,
350	Atom			/* atom */
351);
352
353extern void		XkbSetAtomFuncs(
354	XkbInternAtomFunc	/* getAtom */,
355	XkbGetAtomNameFunc	/* getName */
356);
357
358extern	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
369extern	unsigned int	XkbKeysymToModifiers(
370    Display *			/* dpy */,
371    KeySym 			/* ks */
372);
373
374extern	Bool		XkbLookupKeySym(
375    Display *			/* dpy */,
376    KeyCode 			/* keycode */,
377    unsigned int 		/* modifiers */,
378    unsigned int *		/* modifiers_return */,
379    KeySym *			/* keysym_return */
380);
381
382extern	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
391extern	Bool		XkbTranslateKeyCode(
392    XkbDescPtr			/* xkb */,
393    KeyCode 			/* keycode */,
394    unsigned int 		/* modifiers */,
395    unsigned int *		/* modifiers_return */,
396    KeySym *			/* keysym_return */
397);
398
399extern	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
408extern	Bool	XkbSetAutoRepeatRate(
409	Display *		/* dpy */,
410	unsigned int		/* deviceSpec */,
411	unsigned int		/* delay */,
412	unsigned int		/* interval */
413);
414
415extern	Bool	XkbGetAutoRepeatRate(
416	Display *		/* dpy */,
417	unsigned int		/* deviceSpec */,
418	unsigned int *		/* delayRtrn */,
419	unsigned int *		/* intervalRtrn */
420);
421
422extern	Bool	XkbChangeEnabledControls(
423	Display *		/* dpy */,
424	unsigned int		/* deviceSpec */,
425	unsigned int		/* affect */,
426	unsigned int		/* values */
427);
428
429extern	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
439extern	Bool	XkbForceDeviceBell(
440	Display *		/* dpy */,
441	int			/* deviceSpec */,
442	int			/* bellClass */,
443	int			/* bellID */,
444	int			/* percent */
445);
446
447extern	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
457extern	Bool	XkbBell(
458	Display *		/* dpy */,
459	Window			/* win */,
460	int			/* percent */,
461	Atom			/* name */
462);
463
464extern	Bool	XkbForceBell(
465	Display *		/* dpy */,
466	int			/* percent */
467);
468
469extern	Bool	XkbBellEvent(
470	Display *		/* dpy */,
471	Window			/* win */,
472	int			/* percent */,
473	Atom			/* name */
474);
475
476extern	Bool	XkbSelectEvents(
477	Display *		/* dpy */,
478	unsigned int		/* deviceID */,
479	unsigned int 		/* affect */,
480	unsigned int 		/* values */
481);
482
483extern	Bool	XkbSelectEventDetails(
484	Display *		/* dpy */,
485	unsigned int 		/* deviceID */,
486	unsigned int 		/* eventType */,
487	unsigned long 		/* affect */,
488	unsigned long 		/* details */
489);
490
491extern	void	XkbNoteMapChanges(
492    XkbMapChangesPtr		/* old */,
493    XkbMapNotifyEvent	*	/* new */,
494    unsigned int	 	/* wanted */
495);
496
497extern	void	XkbNoteNameChanges(
498    XkbNameChangesPtr		/* old */,
499    XkbNamesNotifyEvent	*	/* new */,
500    unsigned int	 	/* wanted */
501);
502
503extern	Status	XkbGetIndicatorState(
504	Display *		/* dpy */,
505	unsigned int		/* deviceSpec */,
506	unsigned int *		/* pStateRtrn */
507);
508
509extern	Status	XkbGetDeviceIndicatorState(
510	Display *		/* dpy */,
511	unsigned int		/* deviceSpec */,
512	unsigned int		/* ledClass */,
513	unsigned int		/* ledID */,
514	unsigned int *		/* pStateRtrn */
515);
516
517extern	Status	 XkbGetIndicatorMap(
518	Display *		/* dpy */,
519	unsigned long		/* which */,
520	XkbDescPtr		/* desc */
521);
522
523extern	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
538extern	Bool	XkbGetNamedIndicator(
539	Display *		/* dpy */,
540	Atom			/* name */,
541	int *			/* pNdxRtrn */,
542	Bool *			/* pStateRtrn */,
543	XkbIndicatorMapPtr	/* pMapRtrn */,
544	Bool *			/* pRealRtrn */
545);
546
547extern	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
559extern	Bool	XkbSetNamedIndicator(
560	Display *		/* dpy */,
561	Atom			/* name */,
562	Bool			/* changeState */,
563	Bool 			/* state */,
564	Bool			/* createNewMap */,
565	XkbIndicatorMapPtr	/* pMap */
566);
567
568extern	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
580extern	Bool	XkbLockModifiers(
581	Display *		/* dpy */,
582	unsigned int 		/* deviceSpec */,
583	unsigned int 		/* affect */,
584	unsigned int 		/* values */
585);
586
587extern	Bool	XkbLatchModifiers(
588	Display *		/* dpy */,
589	unsigned int 		/* deviceSpec */,
590	unsigned int 		/* affect */,
591	unsigned int 		/* values */
592);
593
594extern	Bool	XkbLockGroup(
595	Display *		/* dpy */,
596	unsigned int 		/* deviceSpec */,
597	unsigned int 		/* group */
598);
599
600extern	Bool	XkbLatchGroup(
601	Display *		/* dpy */,
602	unsigned int 		/* deviceSpec */,
603	unsigned int 		/* group */
604);
605
606extern	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
615extern	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
625extern	Bool	XkbVirtualModsToReal(
626	XkbDescPtr		/* xkb */,
627	unsigned int		/* virtual_mask */,
628	unsigned int *		/* mask_rtrn */
629);
630
631extern	Bool	XkbComputeEffectiveMap(
632	XkbDescPtr 		/* xkb */,
633	XkbKeyTypePtr		/* type */,
634	unsigned char *		/* map_rtrn */
635);
636
637extern	Status XkbInitCanonicalKeyTypes(
638    XkbDescPtr			/* xkb */,
639    unsigned int		/* which */,
640    int				/* keypadVMod */
641);
642
643extern	XkbDescPtr XkbAllocKeyboard(
644	void
645);
646
647extern	void	XkbFreeKeyboard(
648	XkbDescPtr		/* xkb */,
649	unsigned int		/* which */,
650	Bool			/* freeDesc */
651);
652
653extern	Status XkbAllocClientMap(
654	XkbDescPtr		/* xkb */,
655	unsigned int		/* which */,
656	unsigned int		/* nTypes */
657);
658
659extern	Status XkbAllocServerMap(
660	XkbDescPtr		/* xkb */,
661	unsigned int		/* which */,
662	unsigned int		/* nActions */
663);
664
665extern	void	XkbFreeClientMap(
666    XkbDescPtr			/* xkb */,
667    unsigned int		/* what */,
668    Bool			/* freeMap */
669);
670
671extern	void	XkbFreeServerMap(
672    XkbDescPtr			/* xkb */,
673    unsigned int		/* what */,
674    Bool			/* freeMap */
675);
676
677extern	XkbKeyTypePtr	XkbAddKeyType(
678    XkbDescPtr			/* xkb */,
679    Atom			/* name */,
680    int				/* map_count */,
681    Bool			/* want_preserve */,
682    int				/* num_lvls */
683);
684
685extern	Status XkbAllocIndicatorMaps(
686	XkbDescPtr		/* xkb */
687);
688
689extern	void XkbFreeIndicatorMaps(
690    XkbDescPtr			/* xkb */
691);
692
693extern	XkbDescPtr XkbGetMap(
694	Display *		/* dpy */,
695	unsigned int 		/* which */,
696	unsigned int 		/* deviceSpec */
697);
698
699extern	Status	XkbGetUpdatedMap(
700	Display *		/* dpy */,
701	unsigned int 		/* which */,
702	XkbDescPtr		/* desc */
703);
704
705extern	Status	XkbGetMapChanges(
706    Display *			/* dpy */,
707    XkbDescPtr			/* xkb */,
708    XkbMapChangesPtr		/* changes */
709);
710
711
712extern	Status	XkbRefreshKeyboardMapping(
713    XkbMapNotifyEvent *		/* event */
714);
715
716extern	Status	XkbGetKeyTypes(
717    Display *			/* dpy */,
718    unsigned int		/* first */,
719    unsigned int 		/* num */,
720    XkbDescPtr			/* xkb */
721);
722
723extern	Status	XkbGetKeySyms(
724    Display *			/* dpy */,
725    unsigned int		/* first */,
726    unsigned int		/* num */,
727    XkbDescPtr			/* xkb */
728);
729
730extern	Status	XkbGetKeyActions(
731    Display *			/* dpy */,
732    unsigned int 		/* first */,
733    unsigned int 		/* num */,
734    XkbDescPtr			/* xkb */
735);
736
737extern	Status	XkbGetKeyBehaviors(
738	Display *		/* dpy */,
739	unsigned int 		/* firstKey */,
740	unsigned int		/* nKeys */,
741	XkbDescPtr		/* desc */
742);
743
744extern	Status	XkbGetVirtualMods(
745	Display *		/* dpy */,
746	unsigned int 		/* which */,
747	XkbDescPtr		/* desc */
748);
749
750extern	Status	XkbGetKeyExplicitComponents(
751	Display *		/* dpy */,
752	unsigned int 		/* firstKey */,
753	unsigned int		/* nKeys */,
754	XkbDescPtr		/* desc */
755);
756
757extern	Status	XkbGetKeyModifierMap(
758	Display *		/* dpy */,
759	unsigned int 		/* firstKey */,
760	unsigned int		/* nKeys */,
761	XkbDescPtr		/* desc */
762);
763
764extern	Status	XkbGetKeyVirtualModMap(
765	Display *		/* dpy */,
766	unsigned int		/* first */,
767	unsigned int		/* num */,
768	XkbDescPtr		/* xkb */
769);
770
771extern	Status	XkbAllocControls(
772	XkbDescPtr		/* xkb */,
773	unsigned int		/* which*/
774);
775
776extern	void	XkbFreeControls(
777	XkbDescPtr		/* xkb */,
778	unsigned int		/* which */,
779	Bool			/* freeMap */
780);
781
782extern	Status	XkbGetControls(
783	Display *		/* dpy */,
784	unsigned long		/* which */,
785	XkbDescPtr		/* desc */
786);
787
788extern	Bool	XkbSetControls(
789	Display *		/* dpy */,
790	unsigned long		/* which */,
791	XkbDescPtr		/* desc */
792);
793
794extern	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
803extern	Status	XkbAllocCompatMap(
804    XkbDescPtr			/* xkb */,
805    unsigned int		/* which */,
806    unsigned int		/* nInterpret */
807);
808
809extern	void	XkbFreeCompatMap(
810    XkbDescPtr			/* xkb */,
811    unsigned int		/* which */,
812    Bool			/* freeMap */
813);
814
815extern Status XkbGetCompatMap(
816	Display *		/* dpy */,
817	unsigned int 		/* which */,
818	XkbDescPtr 		/* xkb */
819);
820
821extern Bool XkbSetCompatMap(
822	Display *		/* dpy */,
823	unsigned int 		/* which */,
824	XkbDescPtr 		/* xkb */,
825	Bool			/* updateActions */
826);
827
828extern	XkbSymInterpretPtr XkbAddSymInterpret(
829	XkbDescPtr		/* xkb */,
830	XkbSymInterpretPtr	/* si */,
831	Bool			/* updateMap */,
832	XkbChangesPtr		/* changes */
833);
834
835extern	Status XkbAllocNames(
836	XkbDescPtr		/* xkb */,
837	unsigned int		/* which */,
838	int			/* nTotalRG */,
839	int			/* nTotalAliases */
840);
841
842extern	Status	XkbGetNames(
843	Display *		/* dpy */,
844	unsigned int		/* which */,
845	XkbDescPtr		/* desc */
846);
847
848extern	Bool	XkbSetNames(
849	Display *		/* dpy */,
850	unsigned int		/* which */,
851	unsigned int		/* firstType */,
852	unsigned int		/* nTypes */,
853	XkbDescPtr		/* desc */
854);
855
856extern	Bool	XkbChangeNames(
857	Display *		/* dpy */,
858	XkbDescPtr		/* xkb */,
859	XkbNameChangesPtr	/* changes */
860);
861
862extern	void XkbFreeNames(
863	XkbDescPtr		/* xkb */,
864	unsigned int		/* which */,
865	Bool			/* freeMap */
866);
867
868
869extern	Status	XkbGetState(
870	Display *		/* dpy */,
871	unsigned int 		/* deviceSpec */,
872	XkbStatePtr		/* rtrnState */
873);
874
875extern	Bool	XkbSetMap(
876	Display *		/* dpy */,
877	unsigned int		/* which */,
878	XkbDescPtr		/* desc */
879);
880
881extern	Bool	XkbChangeMap(
882	Display*		/* dpy */,
883	XkbDescPtr		/* desc */,
884	XkbMapChangesPtr	/* changes */
885);
886
887extern	Bool	XkbSetDetectableAutoRepeat(
888	Display *		/* dpy */,
889	Bool			/* detectable */,
890	Bool *			/* supported */
891);
892
893extern	Bool	XkbGetDetectableAutoRepeat(
894	Display *		/* dpy */,
895	Bool *			/* supported */
896);
897
898extern	Bool	XkbSetAutoResetControls(
899    Display *			/* dpy */,
900    unsigned int 		/* changes */,
901    unsigned int *		/* auto_ctrls */,
902    unsigned int *		/* auto_values */
903);
904
905extern	Bool	XkbGetAutoResetControls(
906    Display *			/* dpy */,
907    unsigned int *		/* auto_ctrls */,
908    unsigned int *		/* auto_ctrl_values */
909);
910
911extern	Bool	XkbSetPerClientControls(
912    Display *			/* dpy */,
913    unsigned int		/* change */,
914    unsigned int *		/* values */
915);
916
917extern	Bool	XkbGetPerClientControls(
918    Display *			/* dpy */,
919    unsigned int *		/* ctrls */
920);
921
922extern Status XkbCopyKeyType(
923    XkbKeyTypePtr	/* from */,
924    XkbKeyTypePtr	/* into */
925);
926
927extern Status XkbCopyKeyTypes(
928    XkbKeyTypePtr	/* from */,
929    XkbKeyTypePtr	/* into */,
930    int			/* num_types */
931);
932
933extern	Status	XkbResizeKeyType(
934    XkbDescPtr		/* xkb */,
935    int			/* type_ndx */,
936    int			/* map_count */,
937    Bool		/* want_preserve */,
938    int			/* new_num_lvls */
939);
940
941extern	KeySym *XkbResizeKeySyms(
942	XkbDescPtr		/* desc */,
943	int 			/* forKey */,
944	int 			/* symsNeeded */
945);
946
947extern	XkbAction *XkbResizeKeyActions(
948	XkbDescPtr		/* desc */,
949	int 			/* forKey */,
950	int 			/* actsNeeded */
951);
952
953extern	Status XkbChangeTypesOfKey(
954	XkbDescPtr		/* xkb */,
955	int 			/* key */,
956	int			/* num_groups */,
957	unsigned int		/* groups */,
958	int *			/* newTypes */,
959	XkbMapChangesPtr	/* pChanges */
960);
961
962extern  Status   XkbChangeKeycodeRange(
963	XkbDescPtr		/* xkb */,
964	int			/* minKC */,
965	int			/* maxKC */,
966	XkbChangesPtr		/* changes */
967);
968
969/***====================================================================***/
970
971extern	XkbComponentListPtr	XkbListComponents(
972	Display *		/* dpy */,
973	unsigned int		/* deviceSpec */,
974	XkbComponentNamesPtr	/* ptrns */,
975	int *			/* max_inout */
976);
977
978extern	void XkbFreeComponentList(
979	XkbComponentListPtr	/* list */
980);
981
982extern	XkbDescPtr XkbGetKeyboard(
983	Display *		/* dpy */,
984	unsigned int 		/* which */,
985	unsigned int 		/* deviceSpec */
986);
987
988extern 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
999extern	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
1008extern	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
1014extern	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
1025extern	XkbDeviceLedInfoPtr	XkbAddDeviceLedInfo(
1026	XkbDeviceInfoPtr	/* devi */,
1027	unsigned int		/* ledClass */,
1028	unsigned int		/* ledId */
1029);
1030
1031extern	Status			XkbResizeDeviceButtonActions(
1032	XkbDeviceInfoPtr	/* devi */,
1033	unsigned int		/* newTotal */
1034);
1035
1036extern	XkbDeviceInfoPtr	XkbAllocDeviceInfo(
1037	unsigned int		/* deviceSpec */,
1038	unsigned int		/* nButtons */,
1039	unsigned int		/* szLeds */
1040);
1041
1042extern	void XkbFreeDeviceInfo(
1043	XkbDeviceInfoPtr	/* devi */,
1044	unsigned int		/* which */,
1045	Bool			/* freeDevI */
1046);
1047
1048extern	void	XkbNoteDeviceChanges(
1049    XkbDeviceChangesPtr			/* old */,
1050    XkbExtensionDeviceNotifyEvent *	/* new */,
1051    unsigned int	 		/* wanted */
1052);
1053
1054extern	XkbDeviceInfoPtr XkbGetDeviceInfo(
1055	Display *		/* dpy */,
1056	unsigned int 		/* which */,
1057	unsigned int		/* deviceSpec */,
1058	unsigned int		/* ledClass */,
1059	unsigned int		/* ledID */
1060);
1061
1062extern	Status	XkbGetDeviceInfoChanges(
1063	Display *		/* dpy */,
1064	XkbDeviceInfoPtr	/* devi */,
1065	XkbDeviceChangesPtr 	/* changes */
1066);
1067
1068extern	Status	XkbGetDeviceButtonActions(
1069	Display *		/* dpy */,
1070	XkbDeviceInfoPtr	/* devi */,
1071	Bool			/* all */,
1072	unsigned int		/* first */,
1073	unsigned int		/* nBtns */
1074);
1075
1076extern	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
1084extern	Bool	XkbSetDeviceInfo(
1085	Display *		/* dpy */,
1086	unsigned int		/* which */,
1087	XkbDeviceInfoPtr	/* devi */
1088);
1089
1090extern	Bool	XkbChangeDeviceInfo(
1091	Display*		/* dpy */,
1092	XkbDeviceInfoPtr	/* desc */,
1093	XkbDeviceChangesPtr	/* changes */
1094);
1095
1096extern  Bool XkbSetDeviceLedInfo(
1097	Display *		/* dpy */,
1098	XkbDeviceInfoPtr	/* devi */,
1099	unsigned int 		/* ledClass */,
1100	unsigned int		/* ledID */,
1101	unsigned int		/* which */
1102);
1103
1104extern	Bool XkbSetDeviceButtonActions(
1105	Display *		/* dpy */,
1106	XkbDeviceInfoPtr	/* devi */,
1107	unsigned int		/* first */,
1108	unsigned int		/* nBtns */
1109);
1110
1111/***====================================================================***/
1112
1113extern	char	XkbToControl(
1114	char		/* c */
1115);
1116
1117/***====================================================================***/
1118
1119extern	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
1130extern	Bool XkbApplyVirtualModChanges(
1131   XkbDescPtr		/* xkb */,
1132   unsigned int		/* changed */,
1133   XkbChangesPtr	/* changes */
1134);
1135
1136extern Bool XkbUpdateActionVirtualMods(
1137	XkbDescPtr		/* xkb */,
1138	XkbAction *		/* act */,
1139	unsigned int		/* changed */
1140);
1141
1142extern void XkbUpdateKeyTypeVirtualMods(
1143	XkbDescPtr		/* xkb */,
1144	XkbKeyTypePtr		/* type */,
1145	unsigned int		/* changed */,
1146	XkbChangesPtr		/* changes */
1147);
1148
1149_XFUNCPROTOEND
1150
1151#endif /* _XKBLIB_H_ */
1152