1/* $Xorg: XKBsrv.h,v 1.3 2000/08/18 04:05:45 coskrey Exp $ */
2/* $XdotOrg: $ */
3/************************************************************
4Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
5
6Permission to use, copy, modify, and distribute this
7software and its documentation for any purpose and without
8fee is hereby granted, provided that the above copyright
9notice appear in all copies and that both that copyright
10notice and this permission notice appear in supporting
11documentation, and that the name of Silicon Graphics not be
12used in advertising or publicity pertaining to distribution
13of the software without specific prior written permission.
14Silicon Graphics makes no representation about the suitability
15of this software for any purpose. It is provided "as is"
16without any express or implied warranty.
17
18SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
19SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
20AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
21GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
22DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
23DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
24OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
25THE USE OR PERFORMANCE OF THIS SOFTWARE.
26
27********************************************************/
28/* $XFree86: xc/include/extensions/XKBsrv.h,v 3.22 2002/11/20 04:49:01 dawes Exp $ */
29
30#ifndef _XKBSRV_H_
31#define	_XKBSRV_H_
32
33#ifdef XKB_IN_SERVER
34#define XkbAllocClientMap		SrvXkbAllocClientMap
35#define XkbAllocServerMap		SrvXkbAllocServerMap
36#define XkbChangeTypesOfKey		SrvXkbChangeTypesOfKey
37#define	XkbAddKeyType			SrvXkbAddKeyType
38#define XkbCopyKeyType			SrvXkbCopyKeyType
39#define XkbCopyKeyTypes			SrvXkbCopyKeyTypes
40#define XkbFreeClientMap		SrvXkbFreeClientMap
41#define XkbFreeServerMap		SrvXkbFreeServerMap
42#define XkbInitCanonicalKeyTypes	SrvXkbInitCanonicalKeyTypes
43#define	XkbKeyTypesForCoreSymbols	SrvXkbKeyTypesForCoreSymbols
44#define	XkbApplyCompatMapToKey		SrvXkbApplyCompatMapToKey
45#define	XkbUpdateMapFromCore		SrvXkbUpdateMapFromCore
46#define XkbResizeKeyActions		SrvXkbResizeKeyActions
47#define XkbResizeKeySyms		SrvXkbResizeKeySyms
48#define XkbResizeKeyType		SrvXkbResizeKeyType
49#define XkbAllocCompatMap		SrvXkbAllocCompatMap
50#define XkbAllocControls		SrvXkbAllocControls
51#define XkbAllocIndicatorMaps		SrvXkbAllocIndicatorMaps
52#define XkbAllocKeyboard		SrvXkbAllocKeyboard
53#define XkbAllocNames			SrvXkbAllocNames
54#define XkbFreeCompatMap		SrvXkbFreeCompatMap
55#define XkbFreeControls			SrvXkbFreeControls
56#define XkbFreeIndicatorMaps		SrvXkbFreeIndicatorMaps
57#define XkbFreeKeyboard			SrvXkbFreeKeyboard
58#define XkbFreeNames			SrvXkbFreeNames
59#define	XkbAddDeviceLedInfo		SrvXkbAddDeviceLedInfo
60#define	XkbAllocDeviceInfo		SrvXkbAllocDeviceInfo
61#define	XkbFreeDeviceInfo		SrvXkbFreeDeviceInfo
62#define	XkbResizeDeviceButtonActions	SrvXkbResizeDeviceButtonActions
63#define XkbLatchModifiers		SrvXkbLatchModifiers
64#define XkbLatchGroup			SrvXkbLatchGroup
65#define XkbVirtualModsToReal		SrvXkbVirtualModsToReal
66#define	XkbChangeKeycodeRange		SrvXkbChangeKeycodeRange
67#define	XkbApplyVirtualModChanges	SrvXkbApplyVirtualModChanges
68#define	XkbUpdateActionVirtualMods	SrvXkbUpdateActionVirtualMods
69#define XkbUpdateKeyTypeVirtualMods	SrvXkbUpdateKeyTypeVirtualMods
70#endif
71
72#include <X11/extensions/XKBstr.h>
73#include <X11/extensions/XKBproto.h>
74#include "inputstr.h"
75
76typedef struct _XkbInterest {
77	DeviceIntPtr		dev;
78	ClientPtr		client;
79	XID			resource;
80	struct _XkbInterest *	next;
81	CARD16			extDevNotifyMask;
82	CARD16			stateNotifyMask;
83	CARD16			namesNotifyMask;
84	CARD32 			ctrlsNotifyMask;
85	CARD8			compatNotifyMask;
86	BOOL			bellNotifyMask;
87	BOOL			actionMessageMask;
88	CARD16			accessXNotifyMask;
89	CARD32			iStateNotifyMask;
90	CARD32			iMapNotifyMask;
91	CARD16			altSymsNotifyMask;
92	CARD32			autoCtrls;
93	CARD32			autoCtrlValues;
94} XkbInterestRec,*XkbInterestPtr;
95
96typedef struct _XkbRadioGroup {
97	CARD8		flags;
98	CARD8		nMembers;
99	CARD8		dfltDown;
100	CARD8		currentDown;
101	CARD8		members[XkbRGMaxMembers];
102} XkbRadioGroupRec, *XkbRadioGroupPtr;
103
104typedef struct	_XkbEventCause {
105	CARD8		kc;
106	CARD8		event;
107	CARD8		mjr;
108	CARD8		mnr;
109	ClientPtr	client;
110} XkbEventCauseRec,*XkbEventCausePtr;
111#define	XkbSetCauseKey(c,k,e)	{ (c)->kc= (k),(c)->event= (e),\
112				  (c)->mjr= (c)->mnr= 0; \
113				  (c)->client= NULL; }
114#define	XkbSetCauseReq(c,j,n,cl) { (c)->kc= (c)->event= 0,\
115				  (c)->mjr= (j),(c)->mnr= (n);\
116				  (c)->client= (cl); }
117#define	XkbSetCauseCoreReq(c,e,cl) XkbSetCauseReq(c,e,0,cl)
118#define	XkbSetCauseXkbReq(c,e,cl)  XkbSetCauseReq(c,XkbReqCode,e,cl)
119#define	XkbSetCauseUnknown(c)	   XkbSetCauseKey(c,0,0)
120
121#define	_OFF_TIMER		0
122#define	_KRG_WARN_TIMER		1
123#define	_KRG_TIMER		2
124#define	_SK_TIMEOUT_TIMER	3
125#define	_ALL_TIMEOUT_TIMER	4
126
127#define	_BEEP_NONE		0
128#define	_BEEP_FEATURE_ON	1
129#define	_BEEP_FEATURE_OFF	2
130#define	_BEEP_FEATURE_CHANGE	3
131#define	_BEEP_SLOW_WARN		4
132#define	_BEEP_SLOW_PRESS	5
133#define	_BEEP_SLOW_ACCEPT	6
134#define	_BEEP_SLOW_REJECT	7
135#define	_BEEP_SLOW_RELEASE	8
136#define	_BEEP_STICKY_LATCH	9
137#define	_BEEP_STICKY_LOCK	10
138#define	_BEEP_STICKY_UNLOCK	11
139#define	_BEEP_LED_ON		12
140#define	_BEEP_LED_OFF		13
141#define	_BEEP_LED_CHANGE	14
142#define	_BEEP_BOUNCE_REJECT	15
143
144typedef struct _XkbSrvInfo {
145	XkbStateRec	 prev_state;
146	XkbStateRec	 state;
147	XkbDescPtr	 desc;
148
149	DeviceIntPtr	 device;
150	KbdCtrlProcPtr	 kbdProc;
151
152	XkbRadioGroupPtr radioGroups;
153	CARD8		 nRadioGroups;
154	CARD8		 clearMods;
155	CARD8		 setMods;
156	INT16		 groupChange;
157
158	CARD16		 dfltPtrDelta;
159
160	double		 mouseKeysCurve;
161	double		 mouseKeysCurveFactor;
162	INT16		 mouseKeysDX;
163	INT16		 mouseKeysDY;
164	CARD8		 mouseKeysFlags;
165	Bool		 mouseKeysAccel;
166	CARD8		 mouseKeysCounter;
167
168	CARD8		 lockedPtrButtons;
169	CARD8		 shiftKeyCount;
170	KeyCode		 mouseKey;
171	KeyCode		 inactiveKey;
172	KeyCode		 slowKey;
173	KeyCode		 repeatKey;
174	CARD8		 krgTimerActive;
175	CARD8		 beepType;
176	CARD8		 beepCount;
177
178	CARD32		 flags;
179	CARD32		 lastPtrEventTime;
180	CARD32		 lastShiftEventTime;
181	OsTimerPtr	 beepTimer;
182	OsTimerPtr	 mouseKeyTimer;
183	OsTimerPtr	 slowKeysTimer;
184	OsTimerPtr	 bounceKeysTimer;
185	OsTimerPtr	 repeatKeyTimer;
186	OsTimerPtr	 krgTimer;
187} XkbSrvInfoRec, *XkbSrvInfoPtr;
188
189#define	XkbSLI_IsDefault	(1L<<0)
190#define	XkbSLI_HasOwnState	(1L<<1)
191
192typedef struct	_XkbSrvLedInfo {
193	CARD16			flags;
194	CARD16			class;
195	CARD16			id;
196	union {
197	    KbdFeedbackPtr	kf;
198	    LedFeedbackPtr	lf;
199	} 			fb;
200
201	CARD32			physIndicators;
202	CARD32			autoState;
203	CARD32			explicitState;
204	CARD32			effectiveState;
205
206	CARD32			mapsPresent;
207	CARD32			namesPresent;
208	XkbIndicatorMapPtr	maps;
209	Atom *			names;
210
211	CARD32			usesBase;
212	CARD32			usesLatched;
213	CARD32			usesLocked;
214	CARD32			usesEffective;
215	CARD32			usesCompat;
216	CARD32			usesControls;
217
218	CARD32			usedComponents;
219} XkbSrvLedInfoRec, *XkbSrvLedInfoPtr;
220
221/*
222 * Settings for xkbClientFlags field (used by DIX)
223 * These flags _must_ not overlap with XkbPCF_*
224 */
225#define	_XkbClientInitialized		(1<<15)
226
227#define	_XkbWantsDetectableAutoRepeat(c)\
228	((c)->xkbClientFlags&XkbPCF_DetectableAutoRepeatMask)
229
230/*
231 * Settings for flags field
232 */
233#define	_XkbStateNotifyInProgress	(1<<0)
234
235typedef struct
236{
237    ProcessInputProc processInputProc;
238    ProcessInputProc realInputProc;
239    DeviceUnwrapProc unwrapProc;
240} xkbDeviceInfoRec, *xkbDeviceInfoPtr;
241
242#define WRAP_PROCESS_INPUT_PROC(device, oldprocs, proc, unwrapproc) \
243	device->public.processInputProc = proc; \
244	oldprocs->processInputProc = \
245	oldprocs->realInputProc = device->public.realInputProc; \
246	device->public.realInputProc = proc; \
247	oldprocs->unwrapProc = device->unwrapProc; \
248	device->unwrapProc = unwrapproc;
249
250#define COND_WRAP_PROCESS_INPUT_PROC(device, oldprocs, proc, unwrapproc) \
251	if (device->public.processInputProc == device->public.realInputProc)\
252	    device->public.processInputProc = proc; \
253	oldprocs->processInputProc = \
254	oldprocs->realInputProc = device->public.realInputProc; \
255	device->public.realInputProc = proc; \
256	oldprocs->unwrapProc = device->unwrapProc; \
257	device->unwrapProc = unwrapproc;
258
259#define UNWRAP_PROCESS_INPUT_PROC(device, oldprocs) \
260	device->public.processInputProc = oldprocs->processInputProc; \
261	device->public.realInputProc = oldprocs->realInputProc; \
262	device->unwrapProc = oldprocs->unwrapProc;
263
264#define XKBDEVICEINFO(dev) ((xkbDeviceInfoPtr) (dev)->devPrivates[xkbDevicePrivateIndex].ptr)
265
266/***====================================================================***/
267
268
269/***====================================================================***/
270
271#define XkbAX_KRGMask	 (XkbSlowKeysMask|XkbBounceKeysMask)
272#define	XkbAllFilteredEventsMask \
273	(XkbAccessXKeysMask|XkbRepeatKeysMask|XkbMouseKeysAccelMask|XkbAX_KRGMask)
274
275/***====================================================================***/
276
277extern int	XkbReqCode;
278extern int	XkbEventBase;
279extern int	XkbKeyboardErrorCode;
280extern int	XkbDisableLockActions;
281extern char *	XkbBaseDirectory;
282extern char *	XkbBinDirectory;
283extern char *	XkbInitialMap;
284extern int	_XkbClientMajor;
285extern int	_XkbClientMinor;
286extern unsigned	int XkbXIUnsupported;
287
288extern char *	XkbModelUsed,*XkbLayoutUsed,*XkbVariantUsed,*XkbOptionsUsed;
289extern Bool	noXkbExtension;
290extern Bool	XkbWantRulesProp;
291
292extern pointer	XkbLastRepeatEvent;
293
294extern CARD32	xkbDebugFlags;
295extern CARD32	xkbDebugCtrls;
296
297#define	_XkbAlloc(s)		xalloc((s))
298#define	_XkbCalloc(n,s)		Xcalloc((n)*(s))
299#define	_XkbRealloc(o,s)	Xrealloc((o),(s))
300#define	_XkbTypedAlloc(t)	((t *)xalloc(sizeof(t)))
301#define	_XkbTypedCalloc(n,t)	((t *)Xcalloc((n)*sizeof(t)))
302#define	_XkbTypedRealloc(o,n,t) \
303	((o)?(t *)Xrealloc((o),(n)*sizeof(t)):_XkbTypedCalloc(n,t))
304#define	_XkbClearElems(a,f,l,t)	bzero(&(a)[f],((l)-(f)+1)*sizeof(t))
305#define	_XkbFree(p)		Xfree(p)
306
307#define	_XkbLibError(c,l,d) \
308	{ _XkbErrCode= (c); _XkbErrLocation= (l); _XkbErrData= (d); }
309#define	_XkbErrCode2(a,b) ((XID)((((unsigned int)(a))<<24)|((b)&0xffffff)))
310#define	_XkbErrCode3(a,b,c)	_XkbErrCode2(a,(((unsigned int)(b))<<16)|(c))
311#define	_XkbErrCode4(a,b,c,d) _XkbErrCode3(a,b,((((unsigned int)(c))<<8)|(d)))
312
313extern	int	DeviceKeyPress,DeviceKeyRelease;
314extern	int	DeviceButtonPress,DeviceButtonRelease;
315
316#ifdef XINPUT
317#define	_XkbIsPressEvent(t)	(((t)==KeyPress)||((t)==DeviceKeyPress))
318#define	_XkbIsReleaseEvent(t)	(((t)==KeyRelease)||((t)==DeviceKeyRelease))
319#else
320#define	_XkbIsPressEvent(t)	((t)==KeyPress)
321#define	_XkbIsReleaseEvent(t)	((t)==KeyRelease)
322#endif
323
324#define	_XkbCoreKeycodeInRange(c,k)	(((k)>=(c)->curKeySyms.minKeyCode)&&\
325					 ((k)<=(c)->curKeySyms.maxKeyCode))
326#define	_XkbCoreNumKeys(c)	((c)->curKeySyms.maxKeyCode-\
327				 (c)->curKeySyms.minKeyCode+1)
328
329#define	XConvertCase(s,l,u)	XkbConvertCase(s,l,u)
330#undef	IsKeypadKey
331#define	IsKeypadKey(s)		XkbKSIsKeypad(s)
332
333#define	Status		int
334#define	XPointer	pointer
335#define	Display		struct _XDisplay
336
337#ifndef True
338#define	True	1
339#define	False	0
340#endif
341
342#ifndef PATH_MAX
343#ifdef MAXPATHLEN
344#define	PATH_MAX MAXPATHLEN
345#else
346#define	PATH_MAX 1024
347#endif
348#endif
349
350_XFUNCPROTOBEGIN
351
352extern void XkbUseMsg(
353    void
354);
355
356extern int XkbProcessArguments(
357    int				/* argc */,
358    char **			/* argv */,
359    int				/* i */
360);
361
362extern	void	XkbSetExtension(DeviceIntPtr device, ProcessInputProc proc);
363
364extern	void	XkbFreeCompatMap(
365    XkbDescPtr			/* xkb */,
366    unsigned int		/* which */,
367    Bool			/* freeMap */
368);
369
370extern	void XkbFreeNames(
371	XkbDescPtr		/* xkb */,
372	unsigned int		/* which */,
373	Bool			/* freeMap */
374);
375
376extern DeviceIntPtr _XkbLookupAnyDevice(
377    int			/* id */,
378    int *		/* why_rtrn */
379);
380
381extern DeviceIntPtr _XkbLookupKeyboard(
382    int			/* id */,
383    int *		/* why_rtrn */
384);
385
386extern DeviceIntPtr _XkbLookupBellDevice(
387    int			/* id */,
388    int *		/* why_rtrn */
389);
390
391extern DeviceIntPtr _XkbLookupLedDevice(
392    int			/* id */,
393    int *		/* why_rtrn */
394);
395
396extern DeviceIntPtr _XkbLookupButtonDevice(
397    int			/* id */,
398    int *		/* why_rtrn */
399);
400
401extern	XkbDescPtr XkbAllocKeyboard(
402	void
403);
404
405extern	Status XkbAllocClientMap(
406	XkbDescPtr		/* xkb */,
407	unsigned int		/* which */,
408	unsigned int		/* nTypes */
409);
410
411extern	Status XkbAllocServerMap(
412	XkbDescPtr		/* xkb */,
413	unsigned int		/* which */,
414	unsigned int		/* nNewActions */
415);
416
417extern	void	XkbFreeClientMap(
418    XkbDescPtr			/* xkb */,
419    unsigned int		/* what */,
420    Bool			/* freeMap */
421);
422
423extern	void	XkbFreeServerMap(
424    XkbDescPtr			/* xkb */,
425    unsigned int		/* what */,
426    Bool			/* freeMap */
427);
428
429extern	Status XkbAllocIndicatorMaps(
430	XkbDescPtr		/* xkb */
431);
432
433extern	Status	XkbAllocCompatMap(
434    XkbDescPtr			/* xkb */,
435    unsigned int		/* which */,
436    unsigned int		/* nInterpret */
437);
438
439extern	Status XkbAllocNames(
440	XkbDescPtr		/* xkb */,
441	unsigned int		/* which */,
442	int			/* nTotalRG */,
443	int			/* nTotalAliases */
444);
445
446extern	Status	XkbAllocControls(
447	XkbDescPtr		/* xkb */,
448	unsigned int		/* which*/
449);
450
451extern	Status	XkbCopyKeyType(
452    XkbKeyTypePtr		/* from */,
453    XkbKeyTypePtr		/* into */
454);
455
456extern	Status	XkbCopyKeyTypes(
457    XkbKeyTypePtr		/* from */,
458    XkbKeyTypePtr		/* into */,
459    int				/* num_types */
460);
461
462extern	Status	XkbResizeKeyType(
463    XkbDescPtr		/* xkb */,
464    int			/* type_ndx */,
465    int			/* map_count */,
466    Bool		/* want_preserve */,
467    int			/* new_num_lvls */
468);
469
470extern	void	XkbFreeKeyboard(
471	XkbDescPtr		/* xkb */,
472	unsigned int		/* which */,
473	Bool			/* freeDesc */
474);
475
476extern  void XkbSetActionKeyMods(
477	XkbDescPtr		/* xkb */,
478	XkbAction *		/* act */,
479	unsigned int 		/* mods */
480);
481
482extern Bool XkbCheckActionVMods(
483	XkbDescPtr		/* xkb */,
484	XkbAction *		/* act */,
485	unsigned int 		/* changed */
486);
487
488extern Bool XkbApplyVModChanges(
489    XkbSrvInfoPtr	/* xkbi */,
490    unsigned int	/* changed */,
491    XkbChangesPtr	/* pChanges */,
492    unsigned int *	/* needChecksRtrn */,
493    XkbEventCausePtr	/* cause */
494);
495
496extern void XkbApplyVModChangesToAllDevices(
497    DeviceIntPtr	/* dev */,
498    XkbDescPtr 		/* xkb */,
499    unsigned int 	/* changed */,
500    XkbEventCausePtr	/* cause */
501);
502
503extern	unsigned int XkbMaskForVMask(
504    XkbDescPtr		/* xkb */,
505    unsigned int	/* vmask */
506);
507
508extern Bool XkbVirtualModsToReal(
509	XkbDescPtr	/* xkb */,
510	unsigned int	/* virtua_mask */,
511	unsigned int *	/* mask_rtrn */
512);
513
514extern	unsigned int	XkbAdjustGroup(
515    int			/* group */,
516    XkbControlsPtr	/* ctrls */
517);
518
519extern KeySym *XkbResizeKeySyms(
520    XkbDescPtr		/* xkb */,
521    int 		/* key */,
522    int 		/* needed */
523);
524
525extern XkbAction *XkbResizeKeyActions(
526    XkbDescPtr		/* xkb */,
527    int 		/* key */,
528    int 		/* needed */
529);
530
531extern void XkbUpdateKeyTypesFromCore(
532    DeviceIntPtr	/* pXDev */,
533    KeyCode 		/* first */,
534    CARD8 		/* num */,
535    XkbChangesPtr	/* pChanges */
536);
537
538extern	void XkbUpdateDescActions(
539    XkbDescPtr		/* xkb */,
540    KeyCode		/* first */,
541    CARD8		/* num */,
542    XkbChangesPtr	/* changes */
543);
544
545extern void XkbUpdateActions(
546    DeviceIntPtr	/* pXDev */,
547    KeyCode 		/* first */,
548    CARD8 		/* num */,
549    XkbChangesPtr  	/* pChanges */,
550    unsigned int *	/* needChecksRtrn */,
551    XkbEventCausePtr	/* cause */
552);
553
554extern void XkbUpdateCoreDescription(
555    DeviceIntPtr	/* keybd */,
556    Bool		/* resize */
557);
558
559extern void XkbApplyMappingChange(
560    DeviceIntPtr	/* pXDev */,
561    CARD8 		/* request */,
562    KeyCode 		/* firstKey */,
563    CARD8 		/* num */,
564    ClientPtr		/* client */
565);
566
567extern void XkbSetIndicators(
568    DeviceIntPtr		/* pXDev */,
569    CARD32			/* affect */,
570    CARD32			/* values */,
571    XkbEventCausePtr		/* cause */
572);
573
574extern void XkbUpdateIndicators(
575    DeviceIntPtr		/* keybd */,
576    CARD32		 	/* changed */,
577    Bool			/* check_edevs */,
578    XkbChangesPtr		/* pChanges */,
579    XkbEventCausePtr		/* cause */
580);
581
582extern XkbSrvLedInfoPtr XkbAllocSrvLedInfo(
583    DeviceIntPtr		/* dev */,
584    KbdFeedbackPtr		/* kf */,
585    LedFeedbackPtr		/* lf */,
586    unsigned int		/* needed_parts */
587);
588
589extern XkbSrvLedInfoPtr XkbFindSrvLedInfo(
590    DeviceIntPtr		/* dev */,
591    unsigned int		/* class */,
592    unsigned int		/* id */,
593    unsigned int		/* needed_parts */
594);
595
596extern void XkbApplyLedNameChanges(
597    DeviceIntPtr		/* dev */,
598    XkbSrvLedInfoPtr		/* sli */,
599    unsigned int		/* changed_names */,
600    xkbExtensionDeviceNotify *	/* ed */,
601    XkbChangesPtr		/* changes */,
602    XkbEventCausePtr		/* cause */
603);
604
605extern void XkbApplyLedMapChanges(
606    DeviceIntPtr		/* dev */,
607    XkbSrvLedInfoPtr		/* sli */,
608    unsigned int		/* changed_maps */,
609    xkbExtensionDeviceNotify *	/* ed */,
610    XkbChangesPtr		/* changes */,
611    XkbEventCausePtr		/* cause */
612);
613
614extern void XkbApplyLedStateChanges(
615    DeviceIntPtr		/* dev */,
616    XkbSrvLedInfoPtr		/* sli */,
617    unsigned int		/* changed_leds */,
618    xkbExtensionDeviceNotify *	/* ed */,
619    XkbChangesPtr		/* changes */,
620    XkbEventCausePtr		/* cause */
621);
622
623extern void XkbUpdateLedAutoState(
624    DeviceIntPtr		/* dev */,
625    XkbSrvLedInfoPtr		/* sli */,
626    unsigned int		/* maps_to_check */,
627    xkbExtensionDeviceNotify *	/* ed */,
628    XkbChangesPtr		/* changes */,
629    XkbEventCausePtr		/* cause */
630);
631
632extern void XkbFlushLedEvents(
633    DeviceIntPtr		/* dev */,
634    DeviceIntPtr		/* kbd */,
635    XkbSrvLedInfoPtr		/* sli */,
636    xkbExtensionDeviceNotify *	/* ed */,
637    XkbChangesPtr		/* changes */,
638    XkbEventCausePtr		/* cause */
639);
640
641extern void XkbUpdateAllDeviceIndicators(
642    XkbChangesPtr		/* changes */,
643    XkbEventCausePtr		/* cause */
644);
645
646extern unsigned int XkbIndicatorsToUpdate(
647    DeviceIntPtr		/* dev */,
648    unsigned long		/* state_changes */,
649    Bool			/* enabled_ctrl_changes */
650);
651
652extern void XkbComputeDerivedState(
653    XkbSrvInfoPtr		/* xkbi */
654);
655
656extern void XkbCheckSecondaryEffects(
657    XkbSrvInfoPtr		/* xkbi */,
658    unsigned int		/* which */,
659    XkbChangesPtr		/* changes */,
660    XkbEventCausePtr		/* cause */
661);
662
663extern void XkbCheckIndicatorMaps(
664    DeviceIntPtr		/* dev */,
665    XkbSrvLedInfoPtr		/* sli */,
666    unsigned int		/* which */
667);
668
669extern unsigned int XkbStateChangedFlags(
670    XkbStatePtr			/* old */,
671    XkbStatePtr			/* new */
672);
673
674extern	void XkbSendStateNotify(
675       DeviceIntPtr	/* kbd */,
676       xkbStateNotify *	/* pSN */
677);
678
679extern	void XkbSendMapNotify(
680       DeviceIntPtr	/* kbd */,
681       xkbMapNotify *	/* ev */
682);
683
684extern	int  XkbComputeControlsNotify(
685	DeviceIntPtr		/* kbd */,
686	XkbControlsPtr		/* old */,
687	XkbControlsPtr		/* new */,
688	xkbControlsNotify *	/* pCN */,
689	Bool			/* forceCtrlProc */
690);
691
692extern	void XkbSendControlsNotify(
693       DeviceIntPtr		/* kbd */,
694       xkbControlsNotify *	/* ev */
695);
696
697extern	void XkbSendCompatMapNotify(
698	DeviceIntPtr		/* kbd */,
699	xkbCompatMapNotify *	/* ev */
700);
701
702extern	void XkbSendIndicatorNotify(
703       DeviceIntPtr		/* kbd */,
704       int			/* xkbType */,
705       xkbIndicatorNotify *	/* ev */
706);
707
708extern	void XkbHandleBell(
709       BOOL		/* force */,
710       BOOL		/* eventOnly */,
711       DeviceIntPtr	/* kbd */,
712       CARD8		/* percent */,
713       pointer 		/* ctrl */,
714       CARD8		/* class */,
715       Atom		/* name */,
716       WindowPtr	/* pWin */,
717       ClientPtr	/* pClient */
718);
719
720extern	void XkbSendAccessXNotify(
721       DeviceIntPtr		/* kbd */,
722       xkbAccessXNotify *	/* pEv */
723);
724
725extern	void XkbSendNamesNotify(
726       DeviceIntPtr	/* kbd */,
727       xkbNamesNotify *	/* ev */
728);
729
730extern	void XkbSendCompatNotify(
731       DeviceIntPtr		/* kbd */,
732       xkbCompatMapNotify *	/* ev */
733);
734
735extern	void XkbSendActionMessage(
736       DeviceIntPtr		/* kbd */,
737       xkbActionMessage *	/* ev */
738);
739
740extern	void XkbSendExtensionDeviceNotify(
741       DeviceIntPtr			/* kbd */,
742       ClientPtr			/* client */,
743       xkbExtensionDeviceNotify *	/* ev */
744);
745
746extern void XkbSendNotification(
747    DeviceIntPtr		/* kbd */,
748    XkbChangesPtr		/* pChanges */,
749    XkbEventCausePtr		/* cause */
750);
751
752extern void XkbProcessKeyboardEvent(
753    struct _xEvent * 		/* xE */,
754    DeviceIntPtr		/* keybd */,
755    int 			/* count */
756);
757
758extern void XkbProcessOtherEvent(
759    struct _xEvent * 		/* xE */,
760    DeviceIntPtr		/* keybd */,
761    int 			/* count */
762);
763
764extern void XkbHandleActions(
765    DeviceIntPtr		/* dev */,
766    DeviceIntPtr		/* kbd */,
767    struct _xEvent * 		/* xE */,
768    int 			/* count */
769);
770
771extern Bool XkbEnableDisableControls(
772    XkbSrvInfoPtr	/* xkbi */,
773    unsigned long	/* change */,
774    unsigned long	/* newValues */,
775    XkbChangesPtr	/* changes */,
776    XkbEventCausePtr	/* cause */
777);
778
779extern void AccessXInit(
780    DeviceIntPtr        /* dev */
781);
782
783extern Bool AccessXFilterPressEvent(
784    register struct _xEvent *	/* xE */,
785    register DeviceIntPtr	/* keybd */,
786    int				/* count */
787);
788
789extern Bool AccessXFilterReleaseEvent(
790    register struct _xEvent *	/* xE */,
791    register DeviceIntPtr	/* keybd */,
792    int				/* count */
793);
794
795extern void AccessXCancelRepeatKey(
796    XkbSrvInfoPtr	/* xkbi */,
797    KeyCode		/* key */
798);
799
800extern void AccessXComputeCurveFactor(
801    XkbSrvInfoPtr	/* xkbi */,
802    XkbControlsPtr	/* ctrls */
803);
804
805extern	XkbDeviceLedInfoPtr	XkbAddDeviceLedInfo(
806	XkbDeviceInfoPtr	/* devi */,
807	unsigned int		/* ledClass */,
808	unsigned int		/* ledId */
809);
810
811extern	XkbDeviceInfoPtr	XkbAllocDeviceInfo(
812	unsigned int		/* deviceSpec */,
813	unsigned int		/* nButtons */,
814	unsigned int		/* szLeds */
815);
816
817extern	void XkbFreeDeviceInfo(
818	XkbDeviceInfoPtr	/* devi */,
819	unsigned int		/* which */,
820	Bool			/* freeDevI */
821);
822
823extern Status XkbResizeDeviceButtonActions(
824	XkbDeviceInfoPtr        /* devi */,
825	unsigned int            /* newTotal */
826);
827
828extern	XkbInterestPtr XkbFindClientResource(
829       DevicePtr	/* inDev */,
830       ClientPtr	/* client */
831);
832
833extern	XkbInterestPtr XkbAddClientResource(
834       DevicePtr	/* inDev */,
835       ClientPtr	/* client */,
836       XID		/* id */
837);
838
839extern	int XkbRemoveClient(
840       DevicePtr	/* inDev */,
841       ClientPtr	/* client */
842);
843
844extern	int XkbRemoveResourceClient(
845       DevicePtr	/* inDev */,
846       XID		/* id */
847);
848
849extern int XkbDDXInitDevice(
850    DeviceIntPtr        /* dev */
851);
852
853extern	int XkbDDXAccessXBeep(
854    DeviceIntPtr        /* dev */,
855    unsigned int	/* what */,
856    unsigned int	/* which */
857);
858
859extern	void XkbDDXKeyClick(
860    DeviceIntPtr	/* dev */,
861    int			/* keycode */,
862    int			/* synthetic */
863);
864
865extern 	int XkbDDXUsesSoftRepeat(
866    DeviceIntPtr	/* dev */
867);
868
869extern	void XkbDDXKeybdCtrlProc(
870	DeviceIntPtr	/* dev */,
871	KeybdCtrl *	/* ctrl */
872);
873
874extern void XkbDDXChangeControls(
875	DeviceIntPtr	/* dev */,
876	XkbControlsPtr 	/* old */,
877	XkbControlsPtr 	/* new */
878);
879
880extern void XkbDDXUpdateIndicators(
881	DeviceIntPtr	/* keybd */,
882	CARD32		/* newState */
883);
884
885extern void XkbDDXUpdateDeviceIndicators(
886	DeviceIntPtr		/* dev */,
887	XkbSrvLedInfoPtr	/* sli */,
888	CARD32			/* newState */
889);
890
891extern void XkbDDXFakePointerButton(
892	int 		/* event */,
893	int		/* button */
894);
895
896extern void XkbDDXFakePointerMotion(
897 	unsigned int	/* flags */,
898	int		/* x */,
899	int		/* y */
900);
901
902extern void XkbDDXFakeDeviceButton(
903	DeviceIntPtr	/* dev */,
904	Bool		/* press */,
905	int		/* button */
906);
907
908extern int XkbDDXTerminateServer(
909	DeviceIntPtr	/* dev */,
910	KeyCode		/* key */,
911	XkbAction *	/* act */
912);
913
914extern int XkbDDXSwitchScreen(
915	DeviceIntPtr	/* dev */,
916	KeyCode		/* key */,
917	XkbAction *	/* act */
918);
919
920extern int XkbDDXPrivate(
921	DeviceIntPtr	/* dev */,
922	KeyCode		/* key */,
923	XkbAction *	/* act */
924);
925
926extern void XkbDisableComputedAutoRepeats(
927	DeviceIntPtr 	/* pXDev */,
928	unsigned int	/* key */
929);
930
931extern void XkbSetRepeatKeys(
932	DeviceIntPtr 	/* pXDev */,
933	int		/* key */,
934	int	 	/* onoff */
935);
936
937extern	int XkbLatchModifiers(
938	DeviceIntPtr 	/* pXDev */,
939	CARD8 		/* mask */,
940	CARD8 		/* latches */
941);
942
943extern	int XkbLatchGroup(
944	DeviceIntPtr  	/* pXDev */,
945	int	  	/* group */
946);
947
948extern	void XkbClearAllLatchesAndLocks(
949	DeviceIntPtr		/* dev */,
950	XkbSrvInfoPtr		/* xkbi */,
951	Bool			/* genEv */,
952	XkbEventCausePtr	/* cause */
953);
954
955extern	void	XkbSetRulesDflts(
956	char *			/* rulesFile */,
957	char *			/* model */,
958	char *			/* layout */,
959	char *			/* variant */,
960	char *			/* options */
961);
962
963extern	void	XkbInitDevice(
964	DeviceIntPtr 	/* pXDev */
965);
966
967extern	Bool	XkbInitKeyboardDeviceStruct(
968	DeviceIntPtr 		/* pXDev */,
969	XkbComponentNamesPtr	/* pNames */,
970	KeySymsPtr		/* pSyms */,
971	CARD8 			/* pMods */[],
972	BellProcPtr		/* bellProc */,
973	KbdCtrlProcPtr		/* ctrlProc */
974);
975
976extern	int SProcXkbDispatch(
977	ClientPtr		/* client */
978);
979
980extern XkbGeometryPtr XkbLookupNamedGeometry(
981	DeviceIntPtr		/* dev */,
982	Atom			/* name */,
983	Bool *			/* shouldFree */
984);
985
986extern char *	_XkbDupString(
987	char *			/* str */
988);
989
990extern void	XkbConvertCase(
991	KeySym 			/* sym */,
992	KeySym *		/* lower */,
993	KeySym *		/* upper */
994);
995
996extern	Status	 XkbChangeKeycodeRange(
997	XkbDescPtr		/* xkb */,
998	int 			/* minKC */,
999	int 			/* maxKC */,
1000	XkbChangesPtr		/* changes */
1001);
1002
1003extern int XkbFinishDeviceInit(
1004	DeviceIntPtr		/* pXDev */
1005);
1006
1007extern void XkbFreeSrvLedInfo(
1008	XkbSrvLedInfoPtr	/* sli */
1009);
1010
1011extern void XkbFreeInfo(
1012	XkbSrvInfoPtr		/* xkbi */
1013);
1014
1015extern Status XkbChangeTypesOfKey(
1016	XkbDescPtr		/* xkb */,
1017	int			/* key */,
1018	int			/* nGroups */,
1019	unsigned int		/* groups */,
1020	int *			/* newTypesIn */,
1021	XkbMapChangesPtr	/* changes */
1022);
1023
1024extern XkbKeyTypePtr XkbAddKeyType(
1025	XkbDescPtr		/* xkb */,
1026	Atom			/* name */,
1027	int			/* map_count */,
1028	Bool			/* want_preserve */,
1029	int			/* num_lvls */
1030);
1031
1032extern Status XkbInitCanonicalKeyTypes(
1033	XkbDescPtr		/* xkb */,
1034	unsigned int		/* which */,
1035	int			/* keypadVMod */
1036);
1037
1038extern int XkbKeyTypesForCoreSymbols(
1039	XkbDescPtr		/* xkb */,
1040	int			/* map_width */,
1041	KeySym *		/* core_syms */,
1042	unsigned int		/* protected */,
1043	int *			/* types_inout */,
1044	KeySym *		/* xkb_syms_rtrn */
1045);
1046
1047extern Bool XkbApplyCompatMapToKey(
1048	XkbDescPtr		/* xkb */,
1049	KeyCode			/* key */,
1050	XkbChangesPtr		/* changes */
1051);
1052
1053extern Bool XkbUpdateMapFromCore(
1054	XkbDescPtr		/* xkb */,
1055	KeyCode			/* first_key */,
1056	int			/* num_keys */,
1057	int			/* map_width */,
1058	KeySym *		/* core_keysyms */,
1059	XkbChangesPtr		/* changes */
1060);
1061
1062extern void XkbFreeControls(
1063	XkbDescPtr		/* xkb */,
1064	unsigned int		/* which */,
1065	Bool			/* freeMap */
1066);
1067
1068extern void XkbFreeIndicatorMaps(
1069	XkbDescPtr		/* xkb */
1070);
1071
1072extern Bool XkbApplyVirtualModChanges(
1073	XkbDescPtr		/* xkb */,
1074	unsigned int		/* changed */,
1075	XkbChangesPtr		/* changes */
1076);
1077
1078extern Bool XkbUpdateActionVirtualMods(
1079	XkbDescPtr		/* xkb */,
1080	XkbAction *		/* act */,
1081	unsigned int		/* changed */
1082);
1083
1084extern void XkbUpdateKeyTypeVirtualMods(
1085	XkbDescPtr		/* xkb */,
1086	XkbKeyTypePtr		/* type */,
1087	unsigned int		/* changed */,
1088	XkbChangesPtr		/* changes */
1089);
1090
1091extern void XkbSendNewKeyboardNotify(
1092	DeviceIntPtr		/* kbd */,
1093	xkbNewKeyboardNotify *	/* pNKN */
1094);
1095
1096#ifdef XKBSRV_NEED_FILE_FUNCS
1097
1098#include <X11/extensions/XKMformat.h>
1099#include <X11/extensions/XKBfile.h>
1100#include <X11/extensions/XKBrules.h>
1101
1102#define	_XkbListKeymaps		0
1103#define	_XkbListKeycodes	1
1104#define	_XkbListTypes		2
1105#define	_XkbListCompat		3
1106#define	_XkbListSymbols		4
1107#define	_XkbListGeometry	5
1108#define	_XkbListNumComponents	6
1109
1110typedef struct _XkbSrvListInfo {
1111	int		szPool;
1112	int		nPool;
1113	char *		pool;
1114
1115	int		maxRtrn;
1116	int		nTotal;
1117
1118	char *		pattern[_XkbListNumComponents];
1119	int		nFound[_XkbListNumComponents];
1120} XkbSrvListInfoRec,*XkbSrvListInfoPtr;
1121
1122char *
1123XkbGetRulesDflts(
1124	XkbRF_VarDefsPtr	/* defs */
1125);
1126
1127extern void	XkbSetRulesUsed(
1128	XkbRF_VarDefsPtr	/* defs */
1129);
1130
1131
1132extern	Status	XkbDDXList(
1133	DeviceIntPtr		/* dev */,
1134	XkbSrvListInfoPtr	/* listing */,
1135	ClientPtr		/* client */
1136);
1137
1138extern	unsigned int XkbDDXLoadKeymapByNames(
1139	DeviceIntPtr		/* keybd */,
1140	XkbComponentNamesPtr	/* names */,
1141	unsigned int		/* want */,
1142	unsigned int		/* need */,
1143	XkbFileInfoPtr		/* finfoRtrn */,
1144	char *			/* keymapNameRtrn */,
1145	int 			/* keymapNameRtrnLen */
1146);
1147
1148extern	Bool XkbDDXNamesFromRules(
1149	DeviceIntPtr		/* keybd */,
1150	char *			/* rules */,
1151	XkbRF_VarDefsPtr	/* defs */,
1152	XkbComponentNamesPtr	/* names */
1153);
1154
1155extern	FILE *XkbDDXOpenConfigFile(
1156	char *	/* mapName */,
1157	char *	/* fileNameRtrn */,
1158	int	/* fileNameRtrnLen */
1159);
1160
1161extern	Bool XkbDDXApplyConfig(
1162	XPointer	/* cfg_in */,
1163	XkbSrvInfoPtr	/* xkbi */
1164);
1165
1166extern XPointer XkbDDXPreloadConfig(
1167	char **			/* rulesFileRtrn */,
1168	XkbRF_VarDefsPtr	/* defs */,
1169	XkbComponentNamesPtr	/* names */,
1170	DeviceIntPtr		/* dev */
1171);
1172
1173extern	int _XkbStrCaseCmp(
1174	char *			/* str1 */,
1175	char *			/* str2 */
1176);
1177
1178#endif /* XKBSRV_NEED_FILE_FUNCS */
1179
1180
1181_XFUNCPROTOEND
1182
1183#define	XkbAtomGetString(d,s)	NameForAtom(s)
1184
1185#endif /* _XKBSRV_H_ */
1186
1187
1188