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