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