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