Home | History | Annotate | Download | only in X11
      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 	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 
     43 typedef 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 
     61 typedef 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 
     90 typedef 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 
    119 typedef 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 
    137 typedef 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 
    149 typedef 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 
    171 typedef 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 
    185 typedef 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 
    203 typedef 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 
    220 typedef 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 
    234 typedef 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 
    254 typedef 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 
    271 typedef 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 
    295 extern	Bool	XkbIgnoreExtension(
    296 	Bool			/* ignore */
    297 );
    298 
    299 extern	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 
    308 extern	Bool	XkbQueryExtension(
    309 	Display *		/* dpy */,
    310 	int *			/* opcodeReturn */,
    311 	int *			/* eventBaseReturn */,
    312 	int *			/* errorBaseReturn */,
    313 	int *			/* majorRtrn */,
    314 	int *			/* minorRtrn */
    315 );
    316 
    317 extern	Bool	XkbUseExtension(
    318 	Display *		/* dpy */,
    319 	int *			/* major_rtrn */,
    320 	int *			/* minor_rtrn */
    321 );
    322 
    323 extern	Bool	XkbLibraryVersion(
    324 	int *			/* libMajorRtrn */,
    325 	int *			/* libMinorRtrn */
    326 );
    327 
    328 extern	unsigned int	XkbSetXlibControls(
    329 	Display*		/* dpy */,
    330 	unsigned int		/* affect */,
    331 	unsigned int		/* values */
    332 );
    333 
    334 extern	unsigned int	XkbGetXlibControls(
    335 	Display*		/* dpy */
    336 );
    337 
    338 extern	unsigned int	XkbXlibControlsImplemented(void);
    339 
    340 typedef	Atom	(*XkbInternAtomFunc)(
    341 	Display *		/* dpy */,
    342 	_Xconst char *		/* name */,
    343 	Bool			/* only_if_exists */
    344 );
    345 
    346 typedef char *	(*XkbGetAtomNameFunc)(
    347 	Display *		/* dpy */,
    348 	Atom			/* atom */
    349 );
    350 
    351 extern void		XkbSetAtomFuncs(
    352 	XkbInternAtomFunc	/* getAtom */,
    353 	XkbGetAtomNameFunc	/* getName */
    354 );
    355 
    356 extern	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 
    367 extern	unsigned int	XkbKeysymToModifiers(
    368     Display *			/* dpy */,
    369     KeySym 			/* ks */
    370 );
    371 
    372 extern	Bool		XkbLookupKeySym(
    373     Display *			/* dpy */,
    374     KeyCode 			/* keycode */,
    375     unsigned int 		/* modifiers */,
    376     unsigned int *		/* modifiers_return */,
    377     KeySym *			/* keysym_return */
    378 );
    379 
    380 extern	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 
    389 extern	Bool		XkbTranslateKeyCode(
    390     XkbDescPtr			/* xkb */,
    391     KeyCode 			/* keycode */,
    392     unsigned int 		/* modifiers */,
    393     unsigned int *		/* modifiers_return */,
    394     KeySym *			/* keysym_return */
    395 );
    396 
    397 extern	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 
    406 extern	Bool	XkbSetAutoRepeatRate(
    407 	Display *		/* dpy */,
    408 	unsigned int		/* deviceSpec */,
    409 	unsigned int		/* delay */,
    410 	unsigned int		/* interval */
    411 );
    412 
    413 extern	Bool	XkbGetAutoRepeatRate(
    414 	Display *		/* dpy */,
    415 	unsigned int		/* deviceSpec */,
    416 	unsigned int *		/* delayRtrn */,
    417 	unsigned int *		/* intervalRtrn */
    418 );
    419 
    420 extern	Bool	XkbChangeEnabledControls(
    421 	Display *		/* dpy */,
    422 	unsigned int		/* deviceSpec */,
    423 	unsigned int		/* affect */,
    424 	unsigned int		/* values */
    425 );
    426 
    427 extern	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 
    437 extern	Bool	XkbForceDeviceBell(
    438 	Display *		/* dpy */,
    439 	int			/* deviceSpec */,
    440 	int			/* bellClass */,
    441 	int			/* bellID */,
    442 	int			/* percent */
    443 );
    444 
    445 extern	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 
    455 extern	Bool	XkbBell(
    456 	Display *		/* dpy */,
    457 	Window			/* win */,
    458 	int			/* percent */,
    459 	Atom			/* name */
    460 );
    461 
    462 extern	Bool	XkbForceBell(
    463 	Display *		/* dpy */,
    464 	int			/* percent */
    465 );
    466 
    467 extern	Bool	XkbBellEvent(
    468 	Display *		/* dpy */,
    469 	Window			/* win */,
    470 	int			/* percent */,
    471 	Atom			/* name */
    472 );
    473 
    474 extern	Bool	XkbSelectEvents(
    475 	Display *		/* dpy */,
    476 	unsigned int		/* deviceID */,
    477 	unsigned int 		/* affect */,
    478 	unsigned int 		/* values */
    479 );
    480 
    481 extern	Bool	XkbSelectEventDetails(
    482 	Display *		/* dpy */,
    483 	unsigned int 		/* deviceID */,
    484 	unsigned int 		/* eventType */,
    485 	unsigned long 		/* affect */,
    486 	unsigned long 		/* details */
    487 );
    488 
    489 extern	void	XkbNoteMapChanges(
    490     XkbMapChangesPtr		/* old */,
    491     XkbMapNotifyEvent	*	/* new */,
    492     unsigned int	 	/* wanted */
    493 );
    494 
    495 extern	void	XkbNoteNameChanges(
    496     XkbNameChangesPtr		/* old */,
    497     XkbNamesNotifyEvent	*	/* new */,
    498     unsigned int	 	/* wanted */
    499 );
    500 
    501 extern	Status	XkbGetIndicatorState(
    502 	Display *		/* dpy */,
    503 	unsigned int		/* deviceSpec */,
    504 	unsigned int *		/* pStateRtrn */
    505 );
    506 
    507 extern	Status	XkbGetDeviceIndicatorState(
    508 	Display *		/* dpy */,
    509 	unsigned int		/* deviceSpec */,
    510 	unsigned int		/* ledClass */,
    511 	unsigned int		/* ledID */,
    512 	unsigned int *		/* pStateRtrn */
    513 );
    514 
    515 extern	Status	 XkbGetIndicatorMap(
    516 	Display *		/* dpy */,
    517 	unsigned long		/* which */,
    518 	XkbDescPtr		/* desc */
    519 );
    520 
    521 extern	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 
    536 extern	Bool	XkbGetNamedIndicator(
    537 	Display *		/* dpy */,
    538 	Atom			/* name */,
    539 	int *			/* pNdxRtrn */,
    540 	Bool *			/* pStateRtrn */,
    541 	XkbIndicatorMapPtr	/* pMapRtrn */,
    542 	Bool *			/* pRealRtrn */
    543 );
    544 
    545 extern	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 
    557 extern	Bool	XkbSetNamedIndicator(
    558 	Display *		/* dpy */,
    559 	Atom			/* name */,
    560 	Bool			/* changeState */,
    561 	Bool 			/* state */,
    562 	Bool			/* createNewMap */,
    563 	XkbIndicatorMapPtr	/* pMap */
    564 );
    565 
    566 extern	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 
    578 extern	Bool	XkbLockModifiers(
    579 	Display *		/* dpy */,
    580 	unsigned int 		/* deviceSpec */,
    581 	unsigned int 		/* affect */,
    582 	unsigned int 		/* values */
    583 );
    584 
    585 extern	Bool	XkbLatchModifiers(
    586 	Display *		/* dpy */,
    587 	unsigned int 		/* deviceSpec */,
    588 	unsigned int 		/* affect */,
    589 	unsigned int 		/* values */
    590 );
    591 
    592 extern	Bool	XkbLockGroup(
    593 	Display *		/* dpy */,
    594 	unsigned int 		/* deviceSpec */,
    595 	unsigned int 		/* group */
    596 );
    597 
    598 extern	Bool	XkbLatchGroup(
    599 	Display *		/* dpy */,
    600 	unsigned int 		/* deviceSpec */,
    601 	unsigned int 		/* group */
    602 );
    603 
    604 extern	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 
    613 extern	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 
    623 extern	Bool	XkbVirtualModsToReal(
    624 	XkbDescPtr		/* xkb */,
    625 	unsigned int		/* virtual_mask */,
    626 	unsigned int *		/* mask_rtrn */
    627 );
    628 
    629 extern	Bool	XkbComputeEffectiveMap(
    630 	XkbDescPtr 		/* xkb */,
    631 	XkbKeyTypePtr		/* type */,
    632 	unsigned char *		/* map_rtrn */
    633 );
    634 
    635 extern	Status XkbInitCanonicalKeyTypes(
    636     XkbDescPtr			/* xkb */,
    637     unsigned int		/* which */,
    638     int				/* keypadVMod */
    639 );
    640 
    641 extern	XkbDescPtr XkbAllocKeyboard(
    642 	void
    643 );
    644 
    645 extern	void	XkbFreeKeyboard(
    646 	XkbDescPtr		/* xkb */,
    647 	unsigned int		/* which */,
    648 	Bool			/* freeDesc */
    649 );
    650 
    651 extern	Status XkbAllocClientMap(
    652 	XkbDescPtr		/* xkb */,
    653 	unsigned int		/* which */,
    654 	unsigned int		/* nTypes */
    655 );
    656 
    657 extern	Status XkbAllocServerMap(
    658 	XkbDescPtr		/* xkb */,
    659 	unsigned int		/* which */,
    660 	unsigned int		/* nActions */
    661 );
    662 
    663 extern	void	XkbFreeClientMap(
    664     XkbDescPtr			/* xkb */,
    665     unsigned int		/* what */,
    666     Bool			/* freeMap */
    667 );
    668 
    669 extern	void	XkbFreeServerMap(
    670     XkbDescPtr			/* xkb */,
    671     unsigned int		/* what */,
    672     Bool			/* freeMap */
    673 );
    674 
    675 extern	XkbKeyTypePtr	XkbAddKeyType(
    676     XkbDescPtr			/* xkb */,
    677     Atom			/* name */,
    678     int				/* map_count */,
    679     Bool			/* want_preserve */,
    680     int				/* num_lvls */
    681 );
    682 
    683 extern	Status XkbAllocIndicatorMaps(
    684 	XkbDescPtr		/* xkb */
    685 );
    686 
    687 extern	void XkbFreeIndicatorMaps(
    688     XkbDescPtr			/* xkb */
    689 );
    690 
    691 extern	XkbDescPtr XkbGetMap(
    692 	Display *		/* dpy */,
    693 	unsigned int 		/* which */,
    694 	unsigned int 		/* deviceSpec */
    695 );
    696 
    697 extern	Status	XkbGetUpdatedMap(
    698 	Display *		/* dpy */,
    699 	unsigned int 		/* which */,
    700 	XkbDescPtr		/* desc */
    701 );
    702 
    703 extern	Status	XkbGetMapChanges(
    704     Display *			/* dpy */,
    705     XkbDescPtr			/* xkb */,
    706     XkbMapChangesPtr		/* changes */
    707 );
    708 
    709 
    710 extern	Status	XkbRefreshKeyboardMapping(
    711     XkbMapNotifyEvent *		/* event */
    712 );
    713 
    714 extern	Status	XkbGetKeyTypes(
    715     Display *			/* dpy */,
    716     unsigned int		/* first */,
    717     unsigned int 		/* num */,
    718     XkbDescPtr			/* xkb */
    719 );
    720 
    721 extern	Status	XkbGetKeySyms(
    722     Display *			/* dpy */,
    723     unsigned int		/* first */,
    724     unsigned int		/* num */,
    725     XkbDescPtr			/* xkb */
    726 );
    727 
    728 extern	Status	XkbGetKeyActions(
    729     Display *			/* dpy */,
    730     unsigned int 		/* first */,
    731     unsigned int 		/* num */,
    732     XkbDescPtr			/* xkb */
    733 );
    734 
    735 extern	Status	XkbGetKeyBehaviors(
    736 	Display *		/* dpy */,
    737 	unsigned int 		/* firstKey */,
    738 	unsigned int		/* nKeys */,
    739 	XkbDescPtr		/* desc */
    740 );
    741 
    742 extern	Status	XkbGetVirtualMods(
    743 	Display *		/* dpy */,
    744 	unsigned int 		/* which */,
    745 	XkbDescPtr		/* desc */
    746 );
    747 
    748 extern	Status	XkbGetKeyExplicitComponents(
    749 	Display *		/* dpy */,
    750 	unsigned int 		/* firstKey */,
    751 	unsigned int		/* nKeys */,
    752 	XkbDescPtr		/* desc */
    753 );
    754 
    755 extern	Status	XkbGetKeyModifierMap(
    756 	Display *		/* dpy */,
    757 	unsigned int 		/* firstKey */,
    758 	unsigned int		/* nKeys */,
    759 	XkbDescPtr		/* desc */
    760 );
    761 
    762 extern	Status	XkbGetKeyVirtualModMap(
    763 	Display *		/* dpy */,
    764 	unsigned int		/* first */,
    765 	unsigned int		/* num */,
    766 	XkbDescPtr		/* xkb */
    767 );
    768 
    769 extern	Status	XkbAllocControls(
    770 	XkbDescPtr		/* xkb */,
    771 	unsigned int		/* which*/
    772 );
    773 
    774 extern	void	XkbFreeControls(
    775 	XkbDescPtr		/* xkb */,
    776 	unsigned int		/* which */,
    777 	Bool			/* freeMap */
    778 );
    779 
    780 extern	Status	XkbGetControls(
    781 	Display *		/* dpy */,
    782 	unsigned long		/* which */,
    783 	XkbDescPtr		/* desc */
    784 );
    785 
    786 extern	Bool	XkbSetControls(
    787 	Display *		/* dpy */,
    788 	unsigned long		/* which */,
    789 	XkbDescPtr		/* desc */
    790 );
    791 
    792 extern	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 
    801 extern	Status	XkbAllocCompatMap(
    802     XkbDescPtr			/* xkb */,
    803     unsigned int		/* which */,
    804     unsigned int		/* nInterpret */
    805 );
    806 
    807 extern	void	XkbFreeCompatMap(
    808     XkbDescPtr			/* xkb */,
    809     unsigned int		/* which */,
    810     Bool			/* freeMap */
    811 );
    812 
    813 extern Status XkbGetCompatMap(
    814 	Display *		/* dpy */,
    815 	unsigned int 		/* which */,
    816 	XkbDescPtr 		/* xkb */
    817 );
    818 
    819 extern Bool XkbSetCompatMap(
    820 	Display *		/* dpy */,
    821 	unsigned int 		/* which */,
    822 	XkbDescPtr 		/* xkb */,
    823 	Bool			/* updateActions */
    824 );
    825 
    826 extern	XkbSymInterpretPtr XkbAddSymInterpret(
    827 	XkbDescPtr		/* xkb */,
    828 	XkbSymInterpretPtr	/* si */,
    829 	Bool			/* updateMap */,
    830 	XkbChangesPtr		/* changes */
    831 );
    832 
    833 extern	Status XkbAllocNames(
    834 	XkbDescPtr		/* xkb */,
    835 	unsigned int		/* which */,
    836 	int			/* nTotalRG */,
    837 	int			/* nTotalAliases */
    838 );
    839 
    840 extern	Status	XkbGetNames(
    841 	Display *		/* dpy */,
    842 	unsigned int		/* which */,
    843 	XkbDescPtr		/* desc */
    844 );
    845 
    846 extern	Bool	XkbSetNames(
    847 	Display *		/* dpy */,
    848 	unsigned int		/* which */,
    849 	unsigned int		/* firstType */,
    850 	unsigned int		/* nTypes */,
    851 	XkbDescPtr		/* desc */
    852 );
    853 
    854 extern	Bool	XkbChangeNames(
    855 	Display *		/* dpy */,
    856 	XkbDescPtr		/* xkb */,
    857 	XkbNameChangesPtr	/* changes */
    858 );
    859 
    860 extern	void XkbFreeNames(
    861 	XkbDescPtr		/* xkb */,
    862 	unsigned int		/* which */,
    863 	Bool			/* freeMap */
    864 );
    865 
    866 
    867 extern	Status	XkbGetState(
    868 	Display *		/* dpy */,
    869 	unsigned int 		/* deviceSpec */,
    870 	XkbStatePtr		/* rtrnState */
    871 );
    872 
    873 extern	Bool	XkbSetMap(
    874 	Display *		/* dpy */,
    875 	unsigned int		/* which */,
    876 	XkbDescPtr		/* desc */
    877 );
    878 
    879 extern	Bool	XkbChangeMap(
    880 	Display*		/* dpy */,
    881 	XkbDescPtr		/* desc */,
    882 	XkbMapChangesPtr	/* changes */
    883 );
    884 
    885 extern	Bool	XkbSetDetectableAutoRepeat(
    886 	Display *		/* dpy */,
    887 	Bool			/* detectable */,
    888 	Bool *			/* supported */
    889 );
    890 
    891 extern	Bool	XkbGetDetectableAutoRepeat(
    892 	Display *		/* dpy */,
    893 	Bool *			/* supported */
    894 );
    895 
    896 extern	Bool	XkbSetAutoResetControls(
    897     Display *			/* dpy */,
    898     unsigned int 		/* changes */,
    899     unsigned int *		/* auto_ctrls */,
    900     unsigned int *		/* auto_values */
    901 );
    902 
    903 extern	Bool	XkbGetAutoResetControls(
    904     Display *			/* dpy */,
    905     unsigned int *		/* auto_ctrls */,
    906     unsigned int *		/* auto_ctrl_values */
    907 );
    908 
    909 extern	Bool	XkbSetPerClientControls(
    910     Display *			/* dpy */,
    911     unsigned int		/* change */,
    912     unsigned int *		/* values */
    913 );
    914 
    915 extern	Bool	XkbGetPerClientControls(
    916     Display *			/* dpy */,
    917     unsigned int *		/* ctrls */
    918 );
    919 
    920 extern Status XkbCopyKeyType(
    921     XkbKeyTypePtr	/* from */,
    922     XkbKeyTypePtr	/* into */
    923 );
    924 
    925 extern Status XkbCopyKeyTypes(
    926     XkbKeyTypePtr	/* from */,
    927     XkbKeyTypePtr	/* into */,
    928     int			/* num_types */
    929 );
    930 
    931 extern	Status	XkbResizeKeyType(
    932     XkbDescPtr		/* xkb */,
    933     int			/* type_ndx */,
    934     int			/* map_count */,
    935     Bool		/* want_preserve */,
    936     int			/* new_num_lvls */
    937 );
    938 
    939 extern	KeySym *XkbResizeKeySyms(
    940 	XkbDescPtr		/* desc */,
    941 	int 			/* forKey */,
    942 	int 			/* symsNeeded */
    943 );
    944 
    945 extern	XkbAction *XkbResizeKeyActions(
    946 	XkbDescPtr		/* desc */,
    947 	int 			/* forKey */,
    948 	int 			/* actsNeeded */
    949 );
    950 
    951 extern	Status XkbChangeTypesOfKey(
    952 	XkbDescPtr		/* xkb */,
    953 	int 			/* key */,
    954 	int			/* num_groups */,
    955 	unsigned int		/* groups */,
    956 	int *			/* newTypes */,
    957 	XkbMapChangesPtr	/* pChanges */
    958 );
    959 
    960 extern  Status   XkbChangeKeycodeRange(
    961 	XkbDescPtr		/* xkb */,
    962 	int			/* minKC */,
    963 	int			/* maxKC */,
    964 	XkbChangesPtr		/* changes */
    965 );
    966 
    967 /***====================================================================***/
    968 
    969 extern	XkbComponentListPtr	XkbListComponents(
    970 	Display *		/* dpy */,
    971 	unsigned int		/* deviceSpec */,
    972 	XkbComponentNamesPtr	/* ptrns */,
    973 	int *			/* max_inout */
    974 );
    975 
    976 extern	void XkbFreeComponentList(
    977 	XkbComponentListPtr	/* list */
    978 );
    979 
    980 extern	XkbDescPtr XkbGetKeyboard(
    981 	Display *		/* dpy */,
    982 	unsigned int 		/* which */,
    983 	unsigned int 		/* deviceSpec */
    984 );
    985 
    986 extern 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 
    997 extern	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 
   1006 extern	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 
   1012 extern	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 
   1023 extern	XkbDeviceLedInfoPtr	XkbAddDeviceLedInfo(
   1024 	XkbDeviceInfoPtr	/* devi */,
   1025 	unsigned int		/* ledClass */,
   1026 	unsigned int		/* ledId */
   1027 );
   1028 
   1029 extern	Status			XkbResizeDeviceButtonActions(
   1030 	XkbDeviceInfoPtr	/* devi */,
   1031 	unsigned int		/* newTotal */
   1032 );
   1033 
   1034 extern	XkbDeviceInfoPtr	XkbAllocDeviceInfo(
   1035 	unsigned int		/* deviceSpec */,
   1036 	unsigned int		/* nButtons */,
   1037 	unsigned int		/* szLeds */
   1038 );
   1039 
   1040 extern	void XkbFreeDeviceInfo(
   1041 	XkbDeviceInfoPtr	/* devi */,
   1042 	unsigned int		/* which */,
   1043 	Bool			/* freeDevI */
   1044 );
   1045 
   1046 extern	void	XkbNoteDeviceChanges(
   1047     XkbDeviceChangesPtr			/* old */,
   1048     XkbExtensionDeviceNotifyEvent *	/* new */,
   1049     unsigned int	 		/* wanted */
   1050 );
   1051 
   1052 extern	XkbDeviceInfoPtr XkbGetDeviceInfo(
   1053 	Display *		/* dpy */,
   1054 	unsigned int 		/* which */,
   1055 	unsigned int		/* deviceSpec */,
   1056 	unsigned int		/* ledClass */,
   1057 	unsigned int		/* ledID */
   1058 );
   1059 
   1060 extern	Status	XkbGetDeviceInfoChanges(
   1061 	Display *		/* dpy */,
   1062 	XkbDeviceInfoPtr	/* devi */,
   1063 	XkbDeviceChangesPtr 	/* changes */
   1064 );
   1065 
   1066 extern	Status	XkbGetDeviceButtonActions(
   1067 	Display *		/* dpy */,
   1068 	XkbDeviceInfoPtr	/* devi */,
   1069 	Bool			/* all */,
   1070 	unsigned int		/* first */,
   1071 	unsigned int		/* nBtns */
   1072 );
   1073 
   1074 extern	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 
   1082 extern	Bool	XkbSetDeviceInfo(
   1083 	Display *		/* dpy */,
   1084 	unsigned int		/* which */,
   1085 	XkbDeviceInfoPtr	/* devi */
   1086 );
   1087 
   1088 extern	Bool	XkbChangeDeviceInfo(
   1089 	Display*		/* dpy */,
   1090 	XkbDeviceInfoPtr	/* desc */,
   1091 	XkbDeviceChangesPtr	/* changes */
   1092 );
   1093 
   1094 extern  Bool XkbSetDeviceLedInfo(
   1095 	Display *		/* dpy */,
   1096 	XkbDeviceInfoPtr	/* devi */,
   1097 	unsigned int 		/* ledClass */,
   1098 	unsigned int		/* ledID */,
   1099 	unsigned int		/* which */
   1100 );
   1101 
   1102 extern	Bool XkbSetDeviceButtonActions(
   1103 	Display *		/* dpy */,
   1104 	XkbDeviceInfoPtr	/* devi */,
   1105 	unsigned int		/* first */,
   1106 	unsigned int		/* nBtns */
   1107 );
   1108 
   1109 /***====================================================================***/
   1110 
   1111 extern	char	XkbToControl(
   1112 	char		/* c */
   1113 );
   1114 
   1115 /***====================================================================***/
   1116 
   1117 extern	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 
   1128 extern	Bool XkbApplyVirtualModChanges(
   1129    XkbDescPtr		/* xkb */,
   1130    unsigned int		/* changed */,
   1131    XkbChangesPtr	/* changes */
   1132 );
   1133 
   1134 extern Bool XkbUpdateActionVirtualMods(
   1135 	XkbDescPtr		/* xkb */,
   1136 	XkbAction *		/* act */,
   1137 	unsigned int		/* changed */
   1138 );
   1139 
   1140 extern 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