input.h (36864B)
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 "os.h" 60 #include <X11/extensions/XI2.h> 61 62 #define DEFAULT_KEYBOARD_CLICK 0 63 #define DEFAULT_BELL 50 64 #define DEFAULT_BELL_PITCH 400 65 #define DEFAULT_BELL_DURATION 100 66 #define DEFAULT_AUTOREPEAT TRUE 67 #define DEFAULT_AUTOREPEATS {\ 68 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\ 69 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\ 70 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ 71 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} 72 73 #define DEFAULT_LEDS 0x0 /* all off */ 74 #define DEFAULT_LEDS_MASK 0xffffffff /* 32 */ 75 #define DEFAULT_INT_RESOLUTION 1000 76 #define DEFAULT_INT_MIN_VALUE 0 77 #define DEFAULT_INT_MAX_VALUE 100 78 #define DEFAULT_INT_DISPLAYED 0 79 80 #define DEFAULT_PTR_NUMERATOR 2 81 #define DEFAULT_PTR_DENOMINATOR 1 82 #define DEFAULT_PTR_THRESHOLD 4 83 84 #define DEVICE_INIT 0 85 #define DEVICE_ON 1 86 #define DEVICE_OFF 2 87 #define DEVICE_CLOSE 3 88 #define DEVICE_ABORT 4 89 90 #define POINTER_RELATIVE (1 << 1) 91 #define POINTER_ABSOLUTE (1 << 2) 92 #define POINTER_ACCELERATE (1 << 3) 93 #define POINTER_SCREEN (1 << 4) /* Data in screen coordinates */ 94 #define POINTER_NORAW (1 << 5) /* Don't generate RawEvents */ 95 #define POINTER_EMULATED (1 << 6) /* Event was emulated from another event */ 96 #define POINTER_DESKTOP (1 << 7) /* Data in desktop coordinates */ 97 #define POINTER_RAWONLY (1 << 8) /* Only generate RawEvents */ 98 99 /* GetTouchEvent flags */ 100 #define TOUCH_ACCEPT (1 << 0) 101 #define TOUCH_REJECT (1 << 1) 102 #define TOUCH_PENDING_END (1 << 2) 103 #define TOUCH_CLIENT_ID (1 << 3) /* touch ID is the client-visible id */ 104 #define TOUCH_REPLAYING (1 << 4) /* event is being replayed */ 105 #define TOUCH_POINTER_EMULATED (1 << 5) /* touch event may be pointer emulated */ 106 #define TOUCH_END (1 << 6) /* really end this touch now */ 107 108 /* GetGestureEvent flags */ 109 #define GESTURE_CANCELLED (1 << 0) 110 111 /*int constants for pointer acceleration schemes*/ 112 #define PtrAccelNoOp 0 113 #define PtrAccelPredictable 1 114 #define PtrAccelLightweight 2 115 #define PtrAccelDefault PtrAccelPredictable 116 117 #define MAX_VALUATORS 36 118 /* Maximum number of valuators, divided by six, rounded up, to get number 119 * of events. */ 120 #define MAX_VALUATOR_EVENTS 6 121 #define MAX_BUTTONS 256 /* completely arbitrarily chosen */ 122 123 #define NO_AXIS_LIMITS -1 124 125 #define MAP_LENGTH MAX_BUTTONS 126 #define DOWN_LENGTH (MAX_BUTTONS/8) /* 256/8 => number of bytes to hold 256 bits */ 127 #define NullGrab ((GrabPtr)NULL) 128 #define PointerRootWin ((WindowPtr)PointerRoot) 129 #define NoneWin ((WindowPtr)None) 130 #define NullDevice ((DevicePtr)NULL) 131 132 #ifndef FollowKeyboard 133 #define FollowKeyboard 3 134 #endif 135 #ifndef FollowKeyboardWin 136 #define FollowKeyboardWin ((WindowPtr) FollowKeyboard) 137 #endif 138 #ifndef RevertToFollowKeyboard 139 #define RevertToFollowKeyboard 3 140 #endif 141 142 enum InputLevel { 143 CORE = 1, 144 XI = 2, 145 XI2 = 3, 146 }; 147 148 typedef unsigned long Leds; 149 typedef struct _OtherClients *OtherClientsPtr; 150 typedef struct _InputClients *InputClientsPtr; 151 typedef struct _DeviceIntRec *DeviceIntPtr; 152 typedef struct _ValuatorClassRec *ValuatorClassPtr; 153 typedef struct _ClassesRec *ClassesPtr; 154 typedef struct _SpriteRec *SpritePtr; 155 typedef struct _TouchClassRec *TouchClassPtr; 156 typedef struct _GestureClassRec *GestureClassPtr; 157 typedef struct _TouchPointInfo *TouchPointInfoPtr; 158 typedef struct _GestureInfo *GestureInfoPtr; 159 typedef struct _DDXTouchPointInfo *DDXTouchPointInfoPtr; 160 typedef union _GrabMask GrabMask; 161 162 typedef struct _ValuatorMask ValuatorMask; 163 164 /* The DIX stores incoming input events in this list */ 165 extern InternalEvent *InputEventList; 166 167 typedef int (*DeviceProc) (DeviceIntPtr /*device */ , 168 int /*what */ ); 169 170 typedef void (*ProcessInputProc) (InternalEvent * /*event */ , 171 DeviceIntPtr /*device */ ); 172 173 typedef Bool (*DeviceHandleProc) (DeviceIntPtr /*device */ , 174 void * /*data */ 175 ); 176 177 typedef void (*DeviceUnwrapProc) (DeviceIntPtr /*device */ , 178 DeviceHandleProc /*proc */ , 179 void * /*data */ 180 ); 181 182 /* pointer acceleration handling */ 183 typedef void (*PointerAccelSchemeProc) (DeviceIntPtr /*device */ , 184 ValuatorMask * /*valuators */ , 185 CARD32 /*evtime */ ); 186 187 typedef void (*DeviceCallbackProc) (DeviceIntPtr /*pDev */ ); 188 189 struct _ValuatorAccelerationRec; 190 typedef Bool (*PointerAccelSchemeInitProc) (DeviceIntPtr /*dev */ , 191 struct _ValuatorAccelerationRec * 192 /*protoScheme */ ); 193 194 typedef struct _DeviceRec { 195 void *devicePrivate; 196 ProcessInputProc processInputProc; /* current */ 197 ProcessInputProc realInputProc; /* deliver */ 198 ProcessInputProc enqueueInputProc; /* enqueue */ 199 Bool on; /* used by DDX to keep state */ 200 } DeviceRec, *DevicePtr; 201 202 typedef struct { 203 int click, bell, bell_pitch, bell_duration; 204 Bool autoRepeat; 205 unsigned char autoRepeats[32]; 206 Leds leds; 207 unsigned char id; 208 } KeybdCtrl; 209 210 typedef struct { 211 KeySym *map; 212 KeyCode minKeyCode, maxKeyCode; 213 int mapWidth; 214 } KeySymsRec, *KeySymsPtr; 215 216 typedef struct { 217 int num, den, threshold; 218 unsigned char id; 219 } PtrCtrl; 220 221 typedef struct { 222 int resolution, min_value, max_value; 223 int integer_displayed; 224 unsigned char id; 225 } IntegerCtrl; 226 227 typedef struct { 228 int max_symbols, num_symbols_supported; 229 int num_symbols_displayed; 230 KeySym *symbols_supported; 231 KeySym *symbols_displayed; 232 unsigned char id; 233 } StringCtrl; 234 235 typedef struct { 236 int percent, pitch, duration; 237 unsigned char id; 238 } BellCtrl; 239 240 typedef struct { 241 Leds led_values; 242 Mask led_mask; 243 unsigned char id; 244 } LedCtrl; 245 246 extern _X_EXPORT KeybdCtrl defaultKeyboardControl; 247 extern _X_EXPORT PtrCtrl defaultPointerControl; 248 249 typedef struct _InputOption InputOption; 250 typedef struct _XI2Mask XI2Mask; 251 252 typedef struct _InputAttributes { 253 char *product; 254 char *vendor; 255 char *device; 256 char *pnp_id; 257 char *usb_id; 258 char **tags; /* null-terminated */ 259 uint32_t flags; 260 } InputAttributes; 261 262 #define ATTR_KEYBOARD (1<<0) 263 #define ATTR_POINTER (1<<1) 264 #define ATTR_JOYSTICK (1<<2) 265 #define ATTR_TABLET (1<<3) 266 #define ATTR_TOUCHPAD (1<<4) 267 #define ATTR_TOUCHSCREEN (1<<5) 268 #define ATTR_KEY (1<<6) 269 #define ATTR_TABLET_PAD (1<<7) 270 271 /* Key/Button has been run through all input processing and events sent to clients. */ 272 #define KEY_PROCESSED 1 273 #define BUTTON_PROCESSED 1 274 /* Key/Button has not been fully processed, no events have been sent. */ 275 #define KEY_POSTED 2 276 #define BUTTON_POSTED 2 277 278 extern _X_EXPORT void set_key_down(DeviceIntPtr pDev, int key_code, int type); 279 extern _X_EXPORT void set_key_up(DeviceIntPtr pDev, int key_code, int type); 280 extern _X_EXPORT int key_is_down(DeviceIntPtr pDev, int key_code, int type); 281 extern _X_EXPORT void set_button_down(DeviceIntPtr pDev, int button, int type); 282 extern _X_EXPORT void set_button_up(DeviceIntPtr pDev, int button, int type); 283 extern _X_EXPORT int button_is_down(DeviceIntPtr pDev, int button, int type); 284 285 extern void InitCoreDevices(void); 286 extern void InitXTestDevices(void); 287 288 extern _X_EXPORT DeviceIntPtr AddInputDevice(ClientPtr /*client */ , 289 DeviceProc /*deviceProc */ , 290 Bool /*autoStart */ ); 291 292 extern _X_EXPORT Bool EnableDevice(DeviceIntPtr /*device */ , 293 BOOL /* sendevent */ ); 294 295 extern _X_EXPORT Bool ActivateDevice(DeviceIntPtr /*device */ , 296 BOOL /* sendevent */ ); 297 298 extern _X_EXPORT Bool DisableDevice(DeviceIntPtr /*device */ , 299 BOOL /* sendevent */ ); 300 extern void DisableAllDevices(void); 301 extern int InitAndStartDevices(void); 302 303 extern void CloseDownDevices(void); 304 extern void AbortDevices(void); 305 306 extern void UndisplayDevices(void); 307 308 extern _X_EXPORT int RemoveDevice(DeviceIntPtr /*dev */ , 309 BOOL /* sendevent */ ); 310 311 extern _X_EXPORT int NumMotionEvents(void); 312 313 extern _X_EXPORT int dixLookupDevice(DeviceIntPtr * /* dev */ , 314 int /* id */ , 315 ClientPtr /* client */ , 316 Mask /* access_mode */ ); 317 318 extern _X_EXPORT void QueryMinMaxKeyCodes(KeyCode * /*minCode */ , 319 KeyCode * /*maxCode */ ); 320 321 extern _X_EXPORT Bool InitButtonClassDeviceStruct(DeviceIntPtr /*device */ , 322 int /*numButtons */ , 323 Atom * /* labels */ , 324 CARD8 * /*map */ ); 325 326 extern _X_INTERNAL ValuatorClassPtr AllocValuatorClass(ValuatorClassPtr src, 327 int numAxes); 328 329 extern _X_EXPORT Bool InitValuatorClassDeviceStruct(DeviceIntPtr /*device */ , 330 int /*numAxes */ , 331 Atom * /* labels */ , 332 int /*numMotionEvents */ , 333 int /*mode */ ); 334 335 extern _X_EXPORT Bool InitPointerAccelerationScheme(DeviceIntPtr /*dev */ , 336 int /*scheme */ ); 337 338 extern _X_EXPORT Bool InitFocusClassDeviceStruct(DeviceIntPtr /*device */ ); 339 340 extern _X_EXPORT Bool InitTouchClassDeviceStruct(DeviceIntPtr /*device */ , 341 unsigned int /*max_touches */ , 342 unsigned int /*mode */ , 343 unsigned int /*numAxes */ ); 344 345 extern _X_EXPORT Bool InitGestureClassDeviceStruct(DeviceIntPtr device, 346 unsigned int max_touches); 347 348 typedef void (*BellProcPtr) (int percent, 349 DeviceIntPtr device, 350 void *ctrl, 351 int feedbackClass); 352 353 typedef void (*KbdCtrlProcPtr) (DeviceIntPtr /*device */ , 354 KeybdCtrl * /*ctrl */ ); 355 356 typedef void (*PtrCtrlProcPtr) (DeviceIntPtr /*device */ , 357 PtrCtrl * /*ctrl */ ); 358 359 extern _X_EXPORT Bool InitPtrFeedbackClassDeviceStruct(DeviceIntPtr /*device */ 360 , 361 PtrCtrlProcPtr 362 /*controlProc */ ); 363 364 typedef void (*StringCtrlProcPtr) (DeviceIntPtr /*device */ , 365 StringCtrl * /*ctrl */ ); 366 367 extern _X_EXPORT Bool InitStringFeedbackClassDeviceStruct(DeviceIntPtr 368 /*device */ , 369 StringCtrlProcPtr 370 /*controlProc */ , 371 int /*max_symbols */ , 372 int 373 /*num_symbols_supported */ 374 , 375 KeySym * /*symbols */ 376 ); 377 378 typedef void (*BellCtrlProcPtr) (DeviceIntPtr /*device */ , 379 BellCtrl * /*ctrl */ ); 380 381 extern _X_EXPORT Bool InitBellFeedbackClassDeviceStruct(DeviceIntPtr /*device */ 382 , 383 BellProcPtr 384 /*bellProc */ , 385 BellCtrlProcPtr 386 /*controlProc */ ); 387 388 typedef void (*LedCtrlProcPtr) (DeviceIntPtr /*device */ , 389 LedCtrl * /*ctrl */ ); 390 391 extern _X_EXPORT Bool InitLedFeedbackClassDeviceStruct(DeviceIntPtr /*device */ 392 , 393 LedCtrlProcPtr 394 /*controlProc */ ); 395 396 typedef void (*IntegerCtrlProcPtr) (DeviceIntPtr /*device */ , 397 IntegerCtrl * /*ctrl */ ); 398 399 extern _X_EXPORT Bool InitIntegerFeedbackClassDeviceStruct(DeviceIntPtr 400 /*device */ , 401 IntegerCtrlProcPtr 402 /*controlProc */ ); 403 404 extern _X_EXPORT Bool InitPointerDeviceStruct(DevicePtr /*device */ , 405 CARD8 * /*map */ , 406 int /*numButtons */ , 407 Atom * /* btn_labels */ , 408 PtrCtrlProcPtr /*controlProc */ , 409 int /*numMotionEvents */ , 410 int /*numAxes */ , 411 Atom * /* axes_labels */ ); 412 413 extern _X_EXPORT Bool InitKeyboardDeviceStruct(DeviceIntPtr /*device */ , 414 XkbRMLVOSet * /*rmlvo */ , 415 BellProcPtr /*bellProc */ , 416 KbdCtrlProcPtr /*controlProc */ 417 ); 418 419 extern _X_EXPORT Bool InitKeyboardDeviceStructFromString(DeviceIntPtr dev, 420 const char *keymap, 421 int keymap_length, 422 BellProcPtr bell_func, 423 KbdCtrlProcPtr ctrl_func); 424 425 extern int ApplyPointerMapping(DeviceIntPtr /* pDev */ , 426 CARD8 * /* map */ , 427 int /* len */ , 428 ClientPtr /* client */ ); 429 430 extern Bool BadDeviceMap(BYTE * /*buff */ , 431 int /*length */ , 432 unsigned /*low */ , 433 unsigned /*high */ , 434 XID * /*errval */ ); 435 436 extern void NoteLedState(DeviceIntPtr /*keybd */ , 437 int /*led */ , 438 Bool /*on */ ); 439 440 extern void MaybeStopHint(DeviceIntPtr /*device */ , 441 ClientPtr /*client */ ); 442 443 extern void ProcessPointerEvent(InternalEvent * /* ev */ , 444 DeviceIntPtr /*mouse */ ); 445 446 extern void ProcessKeyboardEvent(InternalEvent * /*ev */ , 447 DeviceIntPtr /*keybd */ ); 448 449 extern _X_EXPORT void ProcessInputEvents(void); 450 451 extern _X_EXPORT void InitInput(int /*argc */ , 452 char ** /*argv */ ); 453 extern _X_EXPORT void CloseInput(void); 454 455 extern _X_EXPORT int GetMaximumEventsNum(void); 456 457 extern _X_EXPORT InternalEvent *InitEventList(int num_events); 458 extern _X_EXPORT void FreeEventList(InternalEvent *list, int num_events); 459 460 extern void CreateClassesChangedEvent(InternalEvent *event, 461 DeviceIntPtr master, 462 DeviceIntPtr slave, int flags); 463 464 extern InternalEvent *UpdateFromMaster(InternalEvent *events, 465 DeviceIntPtr pDev, 466 int type, int *num_events); 467 468 extern _X_EXPORT int GetPointerEvents(InternalEvent *events, 469 DeviceIntPtr pDev, 470 int type, 471 int buttons, 472 int flags, const ValuatorMask *mask); 473 474 extern _X_EXPORT void QueuePointerEvents(DeviceIntPtr pDev, 475 int type, 476 int buttons, 477 int flags, const ValuatorMask *mask); 478 479 extern _X_EXPORT int GetKeyboardEvents(InternalEvent *events, 480 DeviceIntPtr pDev, 481 int type, 482 int key_code); 483 484 extern _X_EXPORT void QueueKeyboardEvents(DeviceIntPtr pDev, 485 int type, 486 int key_code); 487 488 extern int GetTouchEvents(InternalEvent *events, 489 DeviceIntPtr pDev, 490 uint32_t ddx_touchid, 491 uint16_t type, 492 uint32_t flags, const ValuatorMask *mask); 493 494 void QueueTouchEvents(DeviceIntPtr device, 495 int type, 496 uint32_t ddx_touchid, 497 int flags, const ValuatorMask *mask); 498 499 void InitGestureEvent(InternalEvent *ievent, DeviceIntPtr dev, CARD32 ms, 500 int type, uint16_t num_touches, uint32_t flags, 501 double delta_x, double delta_y, 502 double delta_unaccel_x, double delta_unaccel_y, 503 double scale, double delta_angle); 504 505 int GetGestureEvents(InternalEvent *events, DeviceIntPtr dev, 506 uint16_t type, uint16_t num_touches, uint32_t flags, 507 double delta_x, double delta_y, 508 double delta_unaccel_x, 509 double delta_unaccel_y, 510 double scale, double delta_angle); 511 512 513 void QueueGesturePinchEvents(DeviceIntPtr dev, uint16_t type, 514 uint16_t num_touches, uint32_t flags, 515 double delta_x, double delta_y, 516 double delta_unaccel_x, 517 double delta_unaccel_y, 518 double scale, double delta_angle); 519 520 void QueueGestureSwipeEvents(DeviceIntPtr dev, uint16_t type, 521 uint16_t num_touches, uint32_t flags, 522 double delta_x, double delta_y, 523 double delta_unaccel_x, 524 double delta_unaccel_y); 525 526 extern int GetTouchOwnershipEvents(InternalEvent *events, 527 DeviceIntPtr pDev, 528 TouchPointInfoPtr ti, 529 uint8_t mode, XID resource, uint32_t flags); 530 531 extern void GetDixTouchEnd(InternalEvent *ievent, 532 DeviceIntPtr dev, 533 TouchPointInfoPtr ti, 534 uint32_t flags); 535 536 extern _X_EXPORT int GetProximityEvents(InternalEvent *events, 537 DeviceIntPtr pDev, 538 int type, const ValuatorMask *mask); 539 540 extern _X_EXPORT void QueueProximityEvents(DeviceIntPtr pDev, 541 int type, const ValuatorMask *mask); 542 543 #ifdef PANORAMIX 544 _X_EXPORT 545 #endif 546 extern void PostSyntheticMotion(DeviceIntPtr pDev, 547 int x, int y, int screen, unsigned long time); 548 549 extern _X_EXPORT int GetMotionHistorySize(void); 550 551 extern _X_EXPORT void AllocateMotionHistory(DeviceIntPtr pDev); 552 553 extern _X_EXPORT int GetMotionHistory(DeviceIntPtr pDev, 554 xTimecoord ** buff, 555 unsigned long start, 556 unsigned long stop, 557 ScreenPtr pScreen, BOOL core); 558 559 extern void ReleaseButtonsAndKeys(DeviceIntPtr dev); 560 561 extern int AttachDevice(ClientPtr client, 562 DeviceIntPtr slave, DeviceIntPtr master); 563 564 extern _X_EXPORT DeviceIntPtr GetPairedDevice(DeviceIntPtr kbd); 565 extern _X_EXPORT DeviceIntPtr GetMaster(DeviceIntPtr dev, int type); 566 567 extern _X_EXPORT int AllocDevicePair(ClientPtr client, 568 const char *name, 569 DeviceIntPtr *ptr, 570 DeviceIntPtr *keybd, 571 DeviceProc ptr_proc, 572 DeviceProc keybd_proc, Bool master); 573 extern void DeepCopyDeviceClasses(DeviceIntPtr from, 574 DeviceIntPtr to, DeviceChangedEvent *dce); 575 576 /* Helper functions. */ 577 extern _X_EXPORT int generate_modkeymap(ClientPtr client, DeviceIntPtr dev, 578 KeyCode **modkeymap, 579 int *max_keys_per_mod); 580 extern int change_modmap(ClientPtr client, DeviceIntPtr dev, KeyCode *map, 581 int max_keys_per_mod); 582 extern int AllocXTestDevice(ClientPtr client, const char *name, 583 DeviceIntPtr *ptr, DeviceIntPtr *keybd, 584 DeviceIntPtr master_ptr, DeviceIntPtr master_keybd); 585 extern BOOL IsXTestDevice(DeviceIntPtr dev, DeviceIntPtr master); 586 extern DeviceIntPtr GetXTestDevice(DeviceIntPtr master); 587 extern void SendDevicePresenceEvent(int deviceid, int type); 588 extern void DeliverDeviceClassesChangedEvent(int sourceid, Time time); 589 extern _X_EXPORT InputAttributes *DuplicateInputAttributes(InputAttributes * 590 attrs); 591 extern _X_EXPORT void FreeInputAttributes(InputAttributes * attrs); 592 593 enum TouchListenerState { 594 TOUCH_LISTENER_AWAITING_BEGIN = 0, /**< Waiting for a TouchBegin event */ 595 TOUCH_LISTENER_AWAITING_OWNER, /**< Waiting for a TouchOwnership event */ 596 TOUCH_LISTENER_EARLY_ACCEPT, /**< Waiting for ownership, has already 597 accepted */ 598 TOUCH_LISTENER_IS_OWNER, /**< Is the current owner, hasn't 599 accepted */ 600 TOUCH_LISTENER_HAS_ACCEPTED, /**< Is the current owner, has accepted */ 601 TOUCH_LISTENER_HAS_END, /**< Has already received the end event */ 602 }; 603 604 enum TouchListenerType { 605 TOUCH_LISTENER_GRAB, 606 TOUCH_LISTENER_POINTER_GRAB, 607 TOUCH_LISTENER_REGULAR, 608 TOUCH_LISTENER_POINTER_REGULAR, 609 }; 610 611 enum GestureListenerType { 612 GESTURE_LISTENER_GRAB, 613 GESTURE_LISTENER_NONGESTURE_GRAB, 614 GESTURE_LISTENER_REGULAR 615 }; 616 617 extern void TouchInitDDXTouchPoint(DeviceIntPtr dev, 618 DDXTouchPointInfoPtr ddxtouch); 619 extern DDXTouchPointInfoPtr TouchBeginDDXTouch(DeviceIntPtr dev, 620 uint32_t ddx_id); 621 extern void TouchEndDDXTouch(DeviceIntPtr dev, DDXTouchPointInfoPtr ti); 622 extern DDXTouchPointInfoPtr TouchFindByDDXID(DeviceIntPtr dev, 623 uint32_t ddx_id, Bool create); 624 extern Bool TouchInitTouchPoint(TouchClassPtr touch, ValuatorClassPtr v, 625 int index); 626 extern void TouchFreeTouchPoint(DeviceIntPtr dev, int index); 627 extern TouchPointInfoPtr TouchBeginTouch(DeviceIntPtr dev, int sourceid, 628 uint32_t touchid, 629 Bool emulate_pointer); 630 extern TouchPointInfoPtr TouchFindByClientID(DeviceIntPtr dev, 631 uint32_t client_id); 632 extern void TouchEndTouch(DeviceIntPtr dev, TouchPointInfoPtr ti); 633 extern Bool TouchEventHistoryAllocate(TouchPointInfoPtr ti); 634 extern void TouchEventHistoryFree(TouchPointInfoPtr ti); 635 extern void TouchEventHistoryPush(TouchPointInfoPtr ti, const DeviceEvent *ev); 636 extern void TouchEventHistoryReplay(TouchPointInfoPtr ti, DeviceIntPtr dev, 637 XID resource); 638 extern Bool TouchResourceIsOwner(TouchPointInfoPtr ti, XID resource); 639 extern void TouchAddListener(TouchPointInfoPtr ti, XID resource, int resource_type, 640 enum InputLevel level, enum TouchListenerType type, 641 enum TouchListenerState state, WindowPtr window, GrabPtr grab); 642 extern Bool TouchRemoveListener(TouchPointInfoPtr ti, XID resource); 643 extern void TouchSetupListeners(DeviceIntPtr dev, TouchPointInfoPtr ti, 644 InternalEvent *ev); 645 extern Bool TouchBuildSprite(DeviceIntPtr sourcedev, TouchPointInfoPtr ti, 646 InternalEvent *ev); 647 extern Bool TouchBuildDependentSpriteTrace(DeviceIntPtr dev, SpritePtr sprite); 648 extern int TouchConvertToPointerEvent(const InternalEvent *ev, 649 InternalEvent *motion, 650 InternalEvent *button); 651 extern int TouchGetPointerEventType(const InternalEvent *ev); 652 extern void TouchRemovePointerGrab(DeviceIntPtr dev); 653 extern void TouchListenerGone(XID resource); 654 extern int TouchListenerAcceptReject(DeviceIntPtr dev, TouchPointInfoPtr ti, 655 int listener, int mode); 656 extern int TouchAcceptReject(ClientPtr client, DeviceIntPtr dev, int mode, 657 uint32_t touchid, Window grab_window, XID *error); 658 extern void TouchEndPhysicallyActiveTouches(DeviceIntPtr dev); 659 extern void TouchEmitTouchEnd(DeviceIntPtr dev, TouchPointInfoPtr ti, int flags, XID resource); 660 extern void TouchAcceptAndEnd(DeviceIntPtr dev, int touchid); 661 662 extern Bool GestureInitGestureInfo(GestureInfoPtr gesture); 663 extern GestureInfoPtr GestureBeginGesture(DeviceIntPtr dev, InternalEvent *ev); 664 extern GestureInfoPtr GestureFindActiveByEventType(DeviceIntPtr dev, int type); 665 extern void GestureEndGesture(GestureInfoPtr gi); 666 extern Bool GestureResourceIsOwner(GestureInfoPtr gi, XID resource); 667 extern void GestureAddListener(GestureInfoPtr gi, XID resource, int resource_type, 668 enum GestureListenerType type, 669 WindowPtr window, GrabPtr grab); 670 extern void GestureSetupListener(DeviceIntPtr dev, GestureInfoPtr gi, 671 InternalEvent *ev); 672 extern Bool GestureBuildSprite(DeviceIntPtr sourcedev, GestureInfoPtr gi); 673 extern void GestureListenerGone(XID resource); 674 extern void GestureEndActiveGestures(DeviceIntPtr dev); 675 extern void GestureEmitGestureEndToOwner(DeviceIntPtr dev, GestureInfoPtr gi); 676 extern void ProcessGestureEvent(InternalEvent *ev, DeviceIntPtr dev); 677 678 /* misc event helpers */ 679 extern Mask GetEventMask(DeviceIntPtr dev, xEvent *ev, InputClientsPtr clients); 680 extern Mask GetEventFilter(DeviceIntPtr dev, xEvent *event); 681 extern Bool WindowXI2MaskIsset(DeviceIntPtr dev, WindowPtr win, xEvent *ev); 682 extern int GetXI2MaskByte(XI2Mask *mask, DeviceIntPtr dev, int event_type); 683 void FixUpEventFromWindow(SpritePtr pSprite, 684 xEvent *xE, 685 WindowPtr pWin, Window child, Bool calcChild); 686 extern Bool PointInBorderSize(WindowPtr pWin, int x, int y); 687 extern WindowPtr XYToWindow(SpritePtr pSprite, int x, int y); 688 extern int EventIsDeliverable(DeviceIntPtr dev, int evtype, WindowPtr win); 689 extern Bool ActivatePassiveGrab(DeviceIntPtr dev, GrabPtr grab, 690 InternalEvent *ev, InternalEvent *real_event); 691 extern void ActivateGrabNoDelivery(DeviceIntPtr dev, GrabPtr grab, 692 InternalEvent *event, 693 InternalEvent *real_event); 694 /** 695 * Masks specifying the type of event to deliver for an InternalEvent; used 696 * by EventIsDeliverable. 697 * @defgroup EventIsDeliverable return flags 698 * @{ 699 */ 700 #define EVENT_XI1_MASK (1 << 0) /**< XI1.x event */ 701 #define EVENT_CORE_MASK (1 << 1) /**< Core event */ 702 #define EVENT_DONT_PROPAGATE_MASK (1 << 2) /**< DontPropagate mask set */ 703 #define EVENT_XI2_MASK (1 << 3) /**< XI2 mask set on window */ 704 /* @} */ 705 706 enum EventDeliveryState { 707 EVENT_DELIVERED, /**< Event has been delivered to a client */ 708 EVENT_NOT_DELIVERED, /**< Event was not delivered to any client */ 709 EVENT_SKIP, /**< Event can be discarded by the caller */ 710 EVENT_REJECTED, /**< Event was rejected for delivery to the client */ 711 }; 712 713 /* Implemented by the DDX. */ 714 extern _X_EXPORT int NewInputDeviceRequest(InputOption *options, 715 InputAttributes * attrs, 716 DeviceIntPtr *dev); 717 extern _X_EXPORT void DeleteInputDeviceRequest(DeviceIntPtr dev); 718 extern _X_EXPORT void RemoveInputDeviceTraces(const char *config_info); 719 720 extern _X_EXPORT void DDXRingBell(int volume, int pitch, int duration); 721 722 #define VALUATOR_MODE_ALL_AXES -1 723 extern _X_HIDDEN int valuator_get_mode(DeviceIntPtr dev, int axis); 724 extern _X_HIDDEN void valuator_set_mode(DeviceIntPtr dev, int axis, int mode); 725 726 /* Set to TRUE by default - os/utils.c sets it to FALSE on user request, 727 xfixes/cursor.c uses it to determine if the cursor is enabled */ 728 extern Bool EnableCursor; 729 730 /* Set to FALSE by default - ChangeWindowAttributes sets it to TRUE on 731 * CWCursor, xfixes/cursor.c uses it to determine if the cursor is enabled 732 */ 733 extern Bool CursorVisible; 734 735 extern _X_EXPORT ValuatorMask *valuator_mask_new(int num_valuators); 736 extern _X_EXPORT void valuator_mask_free(ValuatorMask **mask); 737 extern _X_EXPORT void valuator_mask_set_range(ValuatorMask *mask, 738 int first_valuator, 739 int num_valuators, 740 const int *valuators); 741 extern _X_EXPORT void valuator_mask_set(ValuatorMask *mask, int valuator, 742 int data); 743 extern _X_EXPORT void valuator_mask_set_double(ValuatorMask *mask, int valuator, 744 double data); 745 extern _X_EXPORT void valuator_mask_zero(ValuatorMask *mask); 746 extern _X_EXPORT int valuator_mask_size(const ValuatorMask *mask); 747 extern _X_EXPORT int valuator_mask_isset(const ValuatorMask *mask, int bit); 748 extern _X_EXPORT void valuator_mask_unset(ValuatorMask *mask, int bit); 749 extern _X_EXPORT int valuator_mask_num_valuators(const ValuatorMask *mask); 750 extern _X_EXPORT void valuator_mask_copy(ValuatorMask *dest, 751 const ValuatorMask *src); 752 extern _X_EXPORT int valuator_mask_get(const ValuatorMask *mask, int valnum); 753 extern _X_EXPORT double valuator_mask_get_double(const ValuatorMask *mask, 754 int valnum); 755 extern _X_EXPORT Bool valuator_mask_fetch(const ValuatorMask *mask, 756 int valnum, int *val); 757 extern _X_EXPORT Bool valuator_mask_fetch_double(const ValuatorMask *mask, 758 int valnum, double *val); 759 extern _X_EXPORT Bool valuator_mask_has_unaccelerated(const ValuatorMask *mask); 760 extern _X_EXPORT void valuator_mask_set_unaccelerated(ValuatorMask *mask, 761 int valuator, 762 double accel, 763 double unaccel); 764 extern _X_EXPORT void valuator_mask_set_absolute_unaccelerated(ValuatorMask *mask, 765 int valuator, 766 int absolute, 767 double unaccel); 768 extern _X_EXPORT double valuator_mask_get_accelerated(const ValuatorMask *mask, 769 int valuator); 770 extern _X_EXPORT double valuator_mask_get_unaccelerated(const ValuatorMask *mask, 771 int valuator); 772 extern _X_EXPORT Bool valuator_mask_fetch_unaccelerated(const ValuatorMask *mask, 773 int valuator, 774 double *accel, 775 double *unaccel); 776 extern _X_HIDDEN void valuator_mask_drop_unaccelerated(ValuatorMask *mask); 777 778 /* InputOption handling interface */ 779 extern _X_EXPORT InputOption *input_option_new(InputOption *list, 780 const char *key, 781 const char *value); 782 extern _X_EXPORT void input_option_free_list(InputOption **opt); 783 extern _X_EXPORT InputOption *input_option_free_element(InputOption *opt, 784 const char *key); 785 extern _X_EXPORT InputOption *input_option_find(InputOption *list, 786 const char *key); 787 extern _X_EXPORT const char *input_option_get_key(const InputOption *opt); 788 extern _X_EXPORT const char *input_option_get_value(const InputOption *opt); 789 extern _X_EXPORT void input_option_set_key(InputOption *opt, const char *key); 790 extern _X_EXPORT void input_option_set_value(InputOption *opt, 791 const char *value); 792 793 extern _X_HIDDEN Bool point_on_screen(ScreenPtr pScreen, int x, int y); 794 extern _X_HIDDEN void update_desktop_dimensions(void); 795 796 extern _X_HIDDEN void input_constrain_cursor(DeviceIntPtr pDev, ScreenPtr screen, 797 int current_x, int current_y, 798 int dest_x, int dest_y, 799 int *out_x, int *out_y, 800 int *nevents, InternalEvent* events); 801 802 extern _X_EXPORT void input_lock(void); 803 extern _X_EXPORT void input_unlock(void); 804 extern _X_EXPORT void input_force_unlock(void); 805 extern _X_EXPORT int in_input_thread(void); 806 807 extern void InputThreadPreInit(void); 808 extern void InputThreadInit(void); 809 extern void InputThreadFini(void); 810 811 extern int InputThreadRegisterDev(int fd, 812 NotifyFdProcPtr readInputProc, 813 void *readInputArgs); 814 815 extern int InputThreadUnregisterDev(int fd); 816 817 extern _X_EXPORT Bool InputThreadEnable; 818 819 #endif /* INPUT_H */