Imported Debian patch 2:1.11.4-0ubuntu10.1
[glsdk/xserver.git] / include / input.h
1 /************************************************************
3 Copyright 1987, 1998  The Open Group
5 Permission to use, copy, modify, distribute, and sell this software and its
6 documentation for any purpose is hereby granted without fee, provided that
7 the above copyright notice appear in all copies and that both that
8 copyright notice and this permission notice appear in supporting
9 documentation.
11 The above copyright notice and this permission notice shall be included in
12 all copies or substantial portions of the Software.
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
17 OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
18 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 Except as contained in this notice, the name of The Open Group shall not be
22 used in advertising or otherwise to promote the sale, use or other dealings
23 in this Software without prior written authorization from The Open Group.
26 Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
28                         All Rights Reserved
30 Permission to use, copy, modify, and distribute this software and its 
31 documentation for any purpose and without fee is hereby granted, 
32 provided that the above copyright notice appear in all copies and that
33 both that copyright notice and this permission notice appear in 
34 supporting documentation, and that the name of Digital not be
35 used in advertising or publicity pertaining to distribution of the
36 software without specific, written prior permission.  
38 DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
39 ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
40 DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
41 ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
42 WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
43 ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
44 SOFTWARE.
46 ********************************************************/
48 #ifndef INPUT_H
49 #define INPUT_H
51 #include "misc.h"
52 #include "screenint.h"
53 #include <X11/Xmd.h>
54 #include <X11/Xproto.h>
55 #include <stdint.h>
56 #include "window.h"     /* for WindowPtr */
57 #include "xkbrules.h"
58 #include "events.h"
59 #include "list.h"
60 #include <X11/extensions/XI2.h>
62 #define DEVICE_INIT     0
63 #define DEVICE_ON       1
64 #define DEVICE_OFF      2
65 #define DEVICE_CLOSE    3
67 #define POINTER_RELATIVE        (1 << 1)
68 #define POINTER_ABSOLUTE        (1 << 2)
69 #define POINTER_ACCELERATE      (1 << 3)
70 #define POINTER_SCREEN          (1 << 4)        /* Data in screen coordinates */
71 #define POINTER_NORAW           (1 << 5)        /* Don't generate RawEvents */
72 #define POINTER_EMULATED        (1 << 6)        /* Event was emulated from another event */
74 /* GetTouchEvent flags */
75 #define TOUCH_ACCEPT            (1 << 0)
76 #define TOUCH_REJECT            (1 << 1)
77 #define TOUCH_PENDING_END       (1 << 2)
78 #define TOUCH_CLIENT_ID         (1 << 3)        /* touch ID is the client-visible id */
79 #define TOUCH_REPLAYING         (1 << 4)        /* event is being replayed */
80 #define TOUCH_POINTER_EMULATED  (1 << 5)        /* touch event may be pointer emulated */
81 #define TOUCH_END               (1 << 6)        /* really end this touch now */
83 /*int constants for pointer acceleration schemes*/
84 #define PtrAccelNoOp            0
85 #define PtrAccelPredictable     1
86 #define PtrAccelLightweight     2
87 #define PtrAccelDefault         PtrAccelPredictable
89 #define MAX_VALUATORS 36
90 /* Maximum number of valuators, divided by six, rounded up, to get number
91  * of events. */
92 #define MAX_VALUATOR_EVENTS 6
93 #define MAX_BUTTONS 256 /* completely arbitrarily chosen */
95 #define NO_AXIS_LIMITS -1
97 #define MAP_LENGTH      256
98 #define DOWN_LENGTH     32      /* 256/8 => number of bytes to hold 256 bits */
99 #define NullGrab ((GrabPtr)NULL)
100 #define PointerRootWin ((WindowPtr)PointerRoot)
101 #define NoneWin ((WindowPtr)None)
102 #define NullDevice ((DevicePtr)NULL)
104 #ifndef FollowKeyboard
105 #define FollowKeyboard          3
106 #endif
107 #ifndef FollowKeyboardWin
108 #define FollowKeyboardWin  ((WindowPtr) FollowKeyboard)
109 #endif
110 #ifndef RevertToFollowKeyboard
111 #define RevertToFollowKeyboard  3
112 #endif
114 enum InputLevel {
115     CORE,
116     XI,
117     XI2,
118 };
120 typedef unsigned long Leds;
121 typedef struct _OtherClients *OtherClientsPtr;
122 typedef struct _InputClients *InputClientsPtr;
123 typedef struct _DeviceIntRec *DeviceIntPtr;
124 typedef struct _ValuatorClassRec *ValuatorClassPtr;
125 typedef struct _ClassesRec *ClassesPtr;
126 typedef struct _SpriteRec *SpritePtr;
127 typedef struct _TouchClassRec *TouchClassPtr;
128 typedef struct _TouchPointInfo *TouchPointInfoPtr;
129 typedef struct _DDXTouchPointInfo *DDXTouchPointInfoPtr;
130 typedef union _GrabMask GrabMask;
132 typedef struct _ValuatorMask ValuatorMask;
134 /* The DIX stores incoming input events in this list */
135 extern InternalEvent* InputEventList;
137 typedef int (*DeviceProc)(
138     DeviceIntPtr /*device*/,
139     int /*what*/);
141 typedef void (*ProcessInputProc)(
142     InternalEvent * /*event*/,
143     DeviceIntPtr /*device*/);
145 typedef Bool (*DeviceHandleProc)(
146     DeviceIntPtr /*device*/,
147     void* /*data*/
148     );
150 typedef void (*DeviceUnwrapProc)(
151     DeviceIntPtr /*device*/,
152     DeviceHandleProc /*proc*/,
153     void* /*data*/
154     );
156 /* pointer acceleration handling */
157 typedef void (*PointerAccelSchemeProc)(
158     DeviceIntPtr /*device*/,
159     ValuatorMask* /*valuators*/,
160     CARD32 /*evtime*/);
162 typedef void (*DeviceCallbackProc)(
163               DeviceIntPtr /*pDev*/);
165 struct _ValuatorAccelerationRec;
166 typedef Bool (*PointerAccelSchemeInitProc)(
167               DeviceIntPtr /*dev*/,
168               struct _ValuatorAccelerationRec* /*protoScheme*/);
170 typedef struct _DeviceRec {
171     pointer     devicePrivate;
172     ProcessInputProc processInputProc;  /* current */
173     ProcessInputProc realInputProc;     /* deliver */
174     ProcessInputProc enqueueInputProc;  /* enqueue */
175     Bool        on;                     /* used by DDX to keep state */
176 } DeviceRec, *DevicePtr;
178 typedef struct {
179     int                 click, bell, bell_pitch, bell_duration;
180     Bool                autoRepeat;
181     unsigned char       autoRepeats[32];
182     Leds                leds;
183     unsigned char       id;
184 } KeybdCtrl;
186 typedef struct {
187     KeySym  *map;
188     KeyCode minKeyCode,
189             maxKeyCode;
190     int     mapWidth;
191 } KeySymsRec, *KeySymsPtr;
193 typedef struct {
194     int         num, den, threshold;
195     unsigned char id;
196 } PtrCtrl;
198 typedef struct {
199     int         resolution, min_value, max_value;
200     int         integer_displayed;
201     unsigned char id;
202 } IntegerCtrl;
204 typedef struct {
205     int         max_symbols, num_symbols_supported;
206     int         num_symbols_displayed;
207     KeySym      *symbols_supported;
208     KeySym      *symbols_displayed;
209     unsigned char id;
210 } StringCtrl;
212 typedef struct {
213     int         percent, pitch, duration;
214     unsigned char id;
215 } BellCtrl;
217 typedef struct {
218     Leds        led_values;
219     Mask        led_mask;
220     unsigned char id;
221 } LedCtrl;
223 extern _X_EXPORT KeybdCtrl      defaultKeyboardControl;
224 extern _X_EXPORT PtrCtrl        defaultPointerControl;
226 typedef struct _InputOption {
227     char                *key;
228     char                *value;
229     struct _InputOption *next;
230 } InputOption;
231 typedef struct _XI2Mask XI2Mask;
233 typedef struct _InputAttributes {
234     char                *product;
235     char                *vendor;
236     char                *device;
237     char                *pnp_id;
238     char                *usb_id;
239     char                **tags; /* null-terminated */
240     uint32_t            flags;
241 } InputAttributes;
243 #define ATTR_KEYBOARD (1<<0)
244 #define ATTR_POINTER (1<<1)
245 #define ATTR_JOYSTICK (1<<2)
246 #define ATTR_TABLET (1<<3)
247 #define ATTR_TOUCHPAD (1<<4)
248 #define ATTR_TOUCHSCREEN (1<<5)
250 /* Key/Button has been run through all input processing and events sent to clients. */
251 #define KEY_PROCESSED 1
252 #define BUTTON_PROCESSED 1
253 /* Key/Button has not been fully processed, no events have been sent. */
254 #define KEY_POSTED 2
255 #define BUTTON_POSTED 2
257 extern void set_key_down(DeviceIntPtr pDev, int key_code, int type);
258 extern void set_key_up(DeviceIntPtr pDev, int key_code, int type);
259 extern int key_is_down(DeviceIntPtr pDev, int key_code, int type);
260 extern void set_button_down(DeviceIntPtr pDev, int button, int type);
261 extern void set_button_up(DeviceIntPtr pDev, int button, int type);
262 extern int button_is_down(DeviceIntPtr pDev, int button, int type);
264 extern void InitCoreDevices(void);
265 extern void InitXTestDevices(void);
267 extern _X_EXPORT DeviceIntPtr AddInputDevice(
268     ClientPtr /*client*/,
269     DeviceProc /*deviceProc*/,
270     Bool /*autoStart*/);
272 extern _X_EXPORT Bool EnableDevice(
273     DeviceIntPtr /*device*/,
274     BOOL /* sendevent */);
276 extern _X_EXPORT Bool ActivateDevice(
277     DeviceIntPtr /*device*/,
278     BOOL /* sendevent */);
280 extern _X_EXPORT Bool DisableDevice(
281     DeviceIntPtr /*device*/,
282     BOOL /* sendevent */);
284 extern int InitAndStartDevices(void);
286 extern void CloseDownDevices(void);
288 extern void UndisplayDevices(void);
290 extern _X_EXPORT int RemoveDevice(
291     DeviceIntPtr /*dev*/,
292     BOOL /* sendevent */);
294 extern _X_EXPORT int NumMotionEvents(void);
296 extern _X_EXPORT int dixLookupDevice(
297     DeviceIntPtr *         /* dev */,
298     int                    /* id */,
299     ClientPtr              /* client */,
300     Mask                   /* access_mode */);
302 extern _X_EXPORT void QueryMinMaxKeyCodes(
303     KeyCode* /*minCode*/,
304     KeyCode* /*maxCode*/);
306 extern _X_EXPORT Bool SetKeySymsMap(
307     KeySymsPtr /*dst*/,
308     KeySymsPtr /*src*/);
310 extern _X_EXPORT Bool InitButtonClassDeviceStruct(
311     DeviceIntPtr /*device*/,
312     int /*numButtons*/,
313     Atom* /* labels */,
314     CARD8* /*map*/);
316 extern _X_INTERNAL ValuatorClassPtr AllocValuatorClass(
317     ValuatorClassPtr src,
318     int numAxes);
320 extern _X_EXPORT Bool InitValuatorClassDeviceStruct(
321     DeviceIntPtr /*device*/,
322     int /*numAxes*/,
323     Atom* /* labels */,
324     int /*numMotionEvents*/,
325     int /*mode*/);
327 extern _X_EXPORT Bool InitPointerAccelerationScheme(
328     DeviceIntPtr /*dev*/,
329     int /*scheme*/);
331 extern _X_EXPORT Bool InitFocusClassDeviceStruct(
332     DeviceIntPtr /*device*/);
334 extern _X_EXPORT Bool InitTouchClassDeviceStruct(
335     DeviceIntPtr /*device*/,
336     unsigned int /*max_touches*/,
337     unsigned int /*mode*/,
338     unsigned int /*numAxes*/);
340 typedef void (*BellProcPtr)(
341     int /*percent*/,
342     DeviceIntPtr /*device*/,
343     pointer /*ctrl*/,
344     int);
346 typedef void (*KbdCtrlProcPtr)(
347     DeviceIntPtr /*device*/,
348     KeybdCtrl * /*ctrl*/);
350 typedef void (*PtrCtrlProcPtr)(
351     DeviceIntPtr /*device*/,
352     PtrCtrl * /*ctrl*/);
354 extern _X_EXPORT Bool InitPtrFeedbackClassDeviceStruct(
355     DeviceIntPtr /*device*/,
356     PtrCtrlProcPtr /*controlProc*/);
358 typedef void (*StringCtrlProcPtr)(
359     DeviceIntPtr /*device*/,
360     StringCtrl * /*ctrl*/);
362 extern _X_EXPORT Bool InitStringFeedbackClassDeviceStruct(
363     DeviceIntPtr /*device*/,
364     StringCtrlProcPtr /*controlProc*/,
365     int /*max_symbols*/,
366     int /*num_symbols_supported*/,
367     KeySym* /*symbols*/);
369 typedef void (*BellCtrlProcPtr)(
370     DeviceIntPtr /*device*/,
371     BellCtrl * /*ctrl*/);
373 extern _X_EXPORT Bool InitBellFeedbackClassDeviceStruct(
374     DeviceIntPtr /*device*/,
375     BellProcPtr /*bellProc*/,
376     BellCtrlProcPtr /*controlProc*/);
378 typedef void (*LedCtrlProcPtr)(
379     DeviceIntPtr /*device*/,
380     LedCtrl * /*ctrl*/);
382 extern _X_EXPORT Bool InitLedFeedbackClassDeviceStruct(
383     DeviceIntPtr /*device*/,
384     LedCtrlProcPtr /*controlProc*/);
386 typedef void (*IntegerCtrlProcPtr)(
387     DeviceIntPtr /*device*/,
388     IntegerCtrl * /*ctrl*/);
391 extern _X_EXPORT Bool InitIntegerFeedbackClassDeviceStruct(
392     DeviceIntPtr /*device*/,
393     IntegerCtrlProcPtr /*controlProc*/);
395 extern _X_EXPORT Bool InitPointerDeviceStruct(
396     DevicePtr /*device*/,
397     CARD8* /*map*/,
398     int /*numButtons*/,
399     Atom* /* btn_labels */,
400     PtrCtrlProcPtr /*controlProc*/,
401     int /*numMotionEvents*/,
402     int /*numAxes*/,
403     Atom* /* axes_labels */);
405 extern _X_EXPORT Bool InitKeyboardDeviceStruct(
406     DeviceIntPtr /*device*/,
407     XkbRMLVOSet * /*rmlvo*/,
408     BellProcPtr /*bellProc*/,
409     KbdCtrlProcPtr /*controlProc*/);
411 extern int ApplyPointerMapping(
412     DeviceIntPtr /* pDev */,
413     CARD8 *      /* map */,
414     int          /* len */,
415     ClientPtr   /* client */);
417 extern Bool BadDeviceMap(
418     BYTE* /*buff*/,
419     int /*length*/,
420     unsigned /*low*/,
421     unsigned /*high*/,
422     XID* /*errval*/);
424 extern void NoteLedState(
425     DeviceIntPtr /*keybd*/,
426     int /*led*/,
427     Bool /*on*/);
429 extern void MaybeStopHint(
430     DeviceIntPtr /*device*/,
431     ClientPtr /*client*/);
433 extern void ProcessPointerEvent(
434     InternalEvent* /* ev */,
435     DeviceIntPtr /*mouse*/);
437 extern void ProcessKeyboardEvent(
438     InternalEvent* /*ev*/,
439     DeviceIntPtr   /*keybd*/);
441 extern Bool LegalModifier(
442     unsigned int /*key*/, 
443     DeviceIntPtr /*pDev*/);
445 extern _X_EXPORT void ProcessInputEvents(void);
447 extern _X_EXPORT void InitInput(
448     int  /*argc*/,
449     char ** /*argv*/);
450 extern _X_EXPORT void CloseInput(void);
452 extern _X_EXPORT int GetMaximumEventsNum(void);
454 extern _X_EXPORT InternalEvent *InitEventList(int num_events);
455 extern _X_EXPORT void FreeEventList(InternalEvent *list, int num_events);
457 extern void CreateClassesChangedEvent(InternalEvent *event,
458                                       DeviceIntPtr master,
459                                       DeviceIntPtr slave,
460                                       int flags);
462 extern InternalEvent * UpdateFromMaster(
463     InternalEvent *events,
464     DeviceIntPtr pDev,
465     int type,
466     int *num_events);
468 extern _X_EXPORT int GetPointerEvents(
469     InternalEvent *events,
470     DeviceIntPtr pDev,
471     int type,
472     int buttons,
473     int flags,
474     const ValuatorMask *mask);
476 extern _X_EXPORT void QueuePointerEvents(
477     DeviceIntPtr pDev,
478     int type,
479     int buttons,
480     int flags,
481     const ValuatorMask *mask);
483 extern _X_EXPORT int GetKeyboardEvents(
484     InternalEvent *events,
485     DeviceIntPtr pDev,
486     int type,
487     int key_code,
488     const ValuatorMask *mask);
490 extern _X_EXPORT void QueueKeyboardEvents(
491     DeviceIntPtr pDev,
492     int type,
493     int key_code,
494     const ValuatorMask *mask);
496 extern int GetTouchEvents(
497     InternalEvent *events,
498     DeviceIntPtr pDev,
499     uint32_t ddx_touchid,
500     uint16_t type,
501     uint32_t flags,
502     const ValuatorMask *mask);
504 void QueueTouchEvents(DeviceIntPtr device,
505                       int type,
506                       uint32_t ddx_touchid,
507                       int flags,
508                       const ValuatorMask *mask);
510 extern int GetTouchOwnershipEvents(
511     InternalEvent *events,
512     DeviceIntPtr pDev,
513     TouchPointInfoPtr ti,
514     uint8_t mode,
515     XID resource,
516     uint32_t flags);
518 extern _X_EXPORT int GetProximityEvents(
519     InternalEvent *events,
520     DeviceIntPtr pDev,
521     int type,
522     const ValuatorMask *mask);
524 extern _X_EXPORT void QueueProximityEvents(
525     DeviceIntPtr pDev,
526     int type,
527     const ValuatorMask *mask);
529 extern void PostSyntheticMotion(
530     DeviceIntPtr pDev,
531     int x,
532     int y,
533     int screen,
534     unsigned long time);
536 extern _X_EXPORT int GetMotionHistorySize(
537     void);
539 extern _X_EXPORT void AllocateMotionHistory(
540     DeviceIntPtr pDev);
542 extern _X_EXPORT int GetMotionHistory(
543     DeviceIntPtr pDev,
544     xTimecoord **buff,
545     unsigned long start,
546     unsigned long stop,
547     ScreenPtr pScreen,
548     BOOL core);
550 extern void ReleaseButtonsAndKeys(DeviceIntPtr dev);
552 extern int AttachDevice(ClientPtr client,
553                         DeviceIntPtr slave,
554                         DeviceIntPtr master);
556 extern _X_EXPORT DeviceIntPtr GetPairedDevice(DeviceIntPtr kbd);
557 extern DeviceIntPtr GetMaster(DeviceIntPtr dev, int type);
559 extern _X_EXPORT int AllocDevicePair(ClientPtr client,
560                              char* name,
561                              DeviceIntPtr* ptr,
562                              DeviceIntPtr* keybd,
563                              DeviceProc ptr_proc,
564                              DeviceProc keybd_proc,
565                              Bool master);
566 extern void DeepCopyDeviceClasses(DeviceIntPtr from,
567                                   DeviceIntPtr to,
568                                   DeviceChangedEvent *dce);
570 /* Helper functions. */
571 extern _X_EXPORT int generate_modkeymap(ClientPtr client, DeviceIntPtr dev,
572                               KeyCode **modkeymap, int *max_keys_per_mod);
573 extern int change_modmap(ClientPtr client, DeviceIntPtr dev, KeyCode *map,
574                          int max_keys_per_mod);
575 extern int AllocXTestDevice(ClientPtr client,
576                              char* name,
577                              DeviceIntPtr* ptr,
578                              DeviceIntPtr* keybd,
579                              DeviceIntPtr master_ptr,
580                              DeviceIntPtr master_keybd);
581 extern BOOL IsXTestDevice(DeviceIntPtr dev, DeviceIntPtr master);
582 extern DeviceIntPtr GetXTestDevice(DeviceIntPtr master);
583 extern void SendDevicePresenceEvent(int deviceid, int type);
584 extern _X_EXPORT InputAttributes *DuplicateInputAttributes(InputAttributes *attrs);
585 extern _X_EXPORT void FreeInputAttributes(InputAttributes *attrs);
587 enum TouchListenerState{
588     LISTENER_AWAITING_BEGIN = 0,   /**< Waiting for a TouchBegin event */
589     LISTENER_AWAITING_OWNER,       /**< Waiting for a TouchOwnership event */
590     LISTENER_EARLY_ACCEPT,         /**< Waiting for ownership, has already
591                                         accepted */
592     LISTENER_IS_OWNER,             /**< Is the current owner, hasn't accepted */
593     LISTENER_HAS_ACCEPTED,         /**< Is the current owner, has accepted */
594     LISTENER_HAS_END,              /**< Has already received the end event */
595 };
597 enum TouchListenerType {
598     LISTENER_GRAB,
599     LISTENER_POINTER_GRAB,
600     LISTENER_REGULAR,
601     LISTENER_POINTER_REGULAR,
602 };
604 extern void TouchInitDDXTouchPoint(DeviceIntPtr dev, DDXTouchPointInfoPtr ddxtouch);
605 extern DDXTouchPointInfoPtr TouchBeginDDXTouch(DeviceIntPtr dev, uint32_t ddx_id);
606 extern void TouchEndDDXTouch(DeviceIntPtr dev, DDXTouchPointInfoPtr ti);
607 extern DDXTouchPointInfoPtr TouchFindByDDXID(DeviceIntPtr dev,
608                                              uint32_t ddx_id,
609                                              Bool create);
610 extern Bool TouchInitTouchPoint(TouchClassPtr touch, ValuatorClassPtr v, int index);
611 extern void TouchFreeTouchPoint(DeviceIntPtr dev, int index);
612 extern TouchPointInfoPtr TouchBeginTouch(DeviceIntPtr dev, int sourceid,
613                                          uint32_t touchid, Bool emulate_pointer);
614 extern TouchPointInfoPtr TouchFindByClientID(DeviceIntPtr dev,
615                                              uint32_t client_id);
616 extern void TouchEndTouch(DeviceIntPtr dev, TouchPointInfoPtr ti);
617 extern Bool TouchEventHistoryAllocate(TouchPointInfoPtr ti);
618 extern void TouchEventHistoryFree(TouchPointInfoPtr ti);
619 extern void TouchEventHistoryPush(TouchPointInfoPtr ti, const DeviceEvent *ev);
620 extern void TouchEventHistoryReplay(TouchPointInfoPtr ti, DeviceIntPtr dev, XID resource);
621 extern Bool TouchResourceIsOwner(TouchPointInfoPtr ti, XID resource);
622 extern void TouchAddListener(TouchPointInfoPtr ti, XID resource, enum InputLevel level,
623                              enum TouchListenerType type, enum TouchListenerState state,
624                              WindowPtr window);
625 extern Bool TouchRemoveListener(TouchPointInfoPtr ti, XID resource);
626 extern void TouchSetupListeners(DeviceIntPtr dev, TouchPointInfoPtr ti, InternalEvent *ev);
627 extern Bool TouchEnsureSprite(DeviceIntPtr sourcedev, TouchPointInfoPtr ti,
628                               InternalEvent *ev);
629 extern Bool TouchBuildDependentSpriteTrace(DeviceIntPtr dev, SpritePtr sprite);
630 extern int TouchConvertToPointerEvent(const InternalEvent *ev,
631                                       InternalEvent *motion, InternalEvent *button);
632 extern int TouchGetPointerEventType(const InternalEvent *ev);
633 extern void TouchRemovePointerGrab(DeviceIntPtr dev);
634 extern void TouchListenerGone(XID resource);
635 extern int TouchAcceptReject(ClientPtr client, DeviceIntPtr dev, int mode,
636                              uint32_t touchid, Window grab_window, XID *error);
638 /* misc event helpers */
639 extern Mask GetEventMask(DeviceIntPtr dev, xEvent* ev, InputClientsPtr clients);
640 extern Mask GetEventFilter(DeviceIntPtr dev, xEvent *event);
641 extern Bool WindowXI2MaskIsset(DeviceIntPtr dev, WindowPtr win, xEvent* ev);
642 extern int GetXI2MaskByte(XI2Mask *mask, DeviceIntPtr dev, int event_type);
643 void FixUpEventFromWindow(SpritePtr pSprite,
644                           xEvent *xE,
645                           WindowPtr pWin,
646                           Window child,
647                           Bool calcChild);
648 extern WindowPtr XYToWindow(SpritePtr pSprite, int x, int y);
649 extern int EventIsDeliverable(DeviceIntPtr dev, int evtype, WindowPtr win);
650 extern Bool ActivatePassiveGrab(DeviceIntPtr dev, GrabPtr grab,
651                                 InternalEvent *ev, InternalEvent *real_event);
652 /**
653  * Masks specifying the type of event to deliver for an InternalEvent; used
654  * by EventIsDeliverable.
655  * @defgroup EventIsDeliverable return flags
656  * @{
657  */
658 #define EVENT_XI1_MASK                (1 << 0) /**< XI1.x event */
659 #define EVENT_CORE_MASK               (1 << 1) /**< Core event */
660 #define EVENT_DONT_PROPAGATE_MASK     (1 << 2) /**< DontPropagate mask set */
661 #define EVENT_XI2_MASK                (1 << 3) /**< XI2 mask set on window */
662 /* @} */
664 enum EventDeliveryState {
665     EVENT_DELIVERED,     /**< Event has been delivered to a client  */
666     EVENT_NOT_DELIVERED, /**< Event was not delivered to any client */
667     EVENT_SKIP,          /**< Event can be discarded by the caller  */
668     EVENT_REJECTED,      /**< Event was rejected for delivery to the client */
669 };
671 /* Implemented by the DDX. */
672 extern _X_EXPORT int NewInputDeviceRequest(
673     InputOption *options,
674     InputAttributes *attrs,
675     DeviceIntPtr *dev);
676 extern  _X_EXPORT void DeleteInputDeviceRequest(
677     DeviceIntPtr dev);
679 extern _X_EXPORT void DDXRingBell(
680     int volume,
681     int pitch,
682     int duration);
684 #define VALUATOR_MODE_ALL_AXES -1
685 extern _X_HIDDEN int valuator_get_mode(DeviceIntPtr dev, int axis);
686 extern _X_HIDDEN void valuator_set_mode(DeviceIntPtr dev, int axis, int mode);
688 /* Set to TRUE by default - os/utils.c sets it to FALSE on user request,
689    xfixes/cursor.c uses it to determine if the cursor is enabled */
690 extern Bool EnableCursor;
692 extern _X_EXPORT ValuatorMask  *valuator_mask_new(int num_valuators);
693 extern _X_EXPORT void valuator_mask_free(ValuatorMask **mask);
694 extern _X_EXPORT void valuator_mask_set_range(ValuatorMask *mask,
695                                        int first_valuator, int num_valuators,
696                                        const int* valuators);
697 extern _X_EXPORT void valuator_mask_set(ValuatorMask *mask,
698                                         int valuator,
699                                         int data);
700 extern _X_EXPORT void valuator_mask_set_double(ValuatorMask *mask,
701                                                int valuator,
702                                                double data);
703 extern _X_EXPORT void valuator_mask_zero(ValuatorMask *mask);
704 extern _X_EXPORT int valuator_mask_size(const ValuatorMask *mask);
705 extern _X_EXPORT int valuator_mask_isset(const ValuatorMask *mask, int bit);
706 extern _X_EXPORT void valuator_mask_unset(ValuatorMask *mask, int bit);
707 extern _X_EXPORT int valuator_mask_num_valuators(const ValuatorMask *mask);
708 extern _X_EXPORT void valuator_mask_copy(ValuatorMask *dest,
709                                          const ValuatorMask *src);
710 extern _X_EXPORT int valuator_mask_get(const ValuatorMask *mask, int valnum);
711 extern _X_EXPORT double valuator_mask_get_double(const ValuatorMask *mask,
712                                                  int valnum);
713 extern _X_EXPORT Bool valuator_mask_fetch(const ValuatorMask *mask,
714                                           int valnum, int *val);
715 extern _X_EXPORT Bool valuator_mask_fetch_double(const ValuatorMask *mask,
716                                                  int valnum, double *val);
718 extern _X_HIDDEN Bool point_on_screen(ScreenPtr pScreen, int x, int y);
719 extern _X_HIDDEN void update_desktop_dimensions(void);
721 #endif /* INPUT_H */