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