1 /* 2 * Copyright © 2009 Red Hat, Inc. 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice (including the next 12 * paragraph) shall be included in all copies or substantial portions of the 13 * Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21 * DEALINGS IN THE SOFTWARE. 22 * 23 */ 24 25 /* Definitions used by the library and client */ 26 27 #ifndef _XINPUT2_H_ 28 #define _XINPUT2_H_ 29 30 #include <X11/Xlib.h> 31 #include <X11/extensions/XI2.h> 32 #include <X11/extensions/Xge.h> 33 34 /******************************************************************* 35 * 36 */ 37 typedef struct { 38 int type; 39 char* name; 40 Bool send_core; 41 Bool enable; 42 } XIAddMasterInfo; 43 44 typedef struct { 45 int type; 46 int deviceid; 47 int return_mode; /* AttachToMaster, Floating */ 48 int return_pointer; 49 int return_keyboard; 50 } XIRemoveMasterInfo; 51 52 typedef struct { 53 int type; 54 int deviceid; 55 int new_master; 56 } XIAttachSlaveInfo; 57 58 typedef struct { 59 int type; 60 int deviceid; 61 } XIDetachSlaveInfo; 62 63 typedef union { 64 int type; /* must be first element */ 65 XIAddMasterInfo add; 66 XIRemoveMasterInfo remove; 67 XIAttachSlaveInfo attach; 68 XIDetachSlaveInfo detach; 69 } XIAnyHierarchyChangeInfo; 70 71 typedef struct 72 { 73 int base; 74 int latched; 75 int locked; 76 int effective; 77 } XIModifierState; 78 79 typedef XIModifierState XIGroupState; 80 81 typedef struct { 82 int mask_len; 83 unsigned char *mask; 84 } XIButtonState; 85 86 typedef struct { 87 int mask_len; 88 unsigned char *mask; 89 double *values; 90 } XIValuatorState; 91 92 93 typedef struct 94 { 95 int deviceid; 96 int mask_len; 97 unsigned char* mask; 98 } XIEventMask; 99 100 typedef struct 101 { 102 int type; 103 int sourceid; 104 } XIAnyClassInfo; 105 106 typedef struct 107 { 108 int type; 109 int sourceid; 110 int num_buttons; 111 Atom *labels; 112 XIButtonState state; 113 } XIButtonClassInfo; 114 115 typedef struct 116 { 117 int type; 118 int sourceid; 119 int num_keycodes; 120 int *keycodes; 121 } XIKeyClassInfo; 122 123 typedef struct 124 { 125 int type; 126 int sourceid; 127 int number; 128 Atom label; 129 double min; 130 double max; 131 double value; 132 int resolution; 133 int mode; 134 } XIValuatorClassInfo; 135 136 /* new in XI 2.1 */ 137 typedef struct 138 { 139 int type; 140 int sourceid; 141 int number; 142 int scroll_type; 143 double increment; 144 int flags; 145 } XIScrollClassInfo; 146 147 typedef struct 148 { 149 int type; 150 int sourceid; 151 int mode; 152 int num_touches; 153 } XITouchClassInfo; 154 155 typedef struct 156 { 157 int deviceid; 158 char *name; 159 int use; 160 int attachment; 161 Bool enabled; 162 int num_classes; 163 XIAnyClassInfo **classes; 164 } XIDeviceInfo; 165 166 typedef struct 167 { 168 int modifiers; 169 int status; 170 } XIGrabModifiers; 171 172 /** 173 * Generic XI2 event. All XI2 events have the same header. 174 */ 175 typedef struct { 176 int type; /* GenericEvent */ 177 unsigned long serial; /* # of last request processed by server */ 178 Bool send_event; /* true if this came from a SendEvent request */ 179 Display *display; /* Display the event was read from */ 180 int extension; /* XI extension offset */ 181 int evtype; 182 Time time; 183 } XIEvent; 184 185 186 typedef struct { 187 int deviceid; 188 int attachment; 189 int use; 190 Bool enabled; 191 int flags; 192 } XIHierarchyInfo; 193 194 /* 195 * Notifies the client that the device hierarchy has been changed. The client 196 * is expected to re-query the server for the device hierarchy. 197 */ 198 typedef struct { 199 int type; /* GenericEvent */ 200 unsigned long serial; /* # of last request processed by server */ 201 Bool send_event; /* true if this came from a SendEvent request */ 202 Display *display; /* Display the event was read from */ 203 int extension; /* XI extension offset */ 204 int evtype; /* XI_HierarchyChanged */ 205 Time time; 206 int flags; 207 int num_info; 208 XIHierarchyInfo *info; 209 } XIHierarchyEvent; 210 211 /* 212 * Notifies the client that the classes have been changed. This happens when 213 * the slave device that sends through the master changes. 214 */ 215 typedef struct { 216 int type; /* GenericEvent */ 217 unsigned long serial; /* # of last request processed by server */ 218 Bool send_event; /* true if this came from a SendEvent request */ 219 Display *display; /* Display the event was read from */ 220 int extension; /* XI extension offset */ 221 int evtype; /* XI_DeviceChanged */ 222 Time time; 223 int deviceid; /* id of the device that changed */ 224 int sourceid; /* Source for the new classes. */ 225 int reason; /* Reason for the change */ 226 int num_classes; 227 XIAnyClassInfo **classes; /* same as in XIDeviceInfo */ 228 } XIDeviceChangedEvent; 229 230 typedef struct { 231 int type; /* GenericEvent */ 232 unsigned long serial; /* # of last request processed by server */ 233 Bool send_event; /* true if this came from a SendEvent request */ 234 Display *display; /* Display the event was read from */ 235 int extension; /* XI extension offset */ 236 int evtype; 237 Time time; 238 int deviceid; 239 int sourceid; 240 int detail; 241 Window root; 242 Window event; 243 Window child; 244 double root_x; 245 double root_y; 246 double event_x; 247 double event_y; 248 int flags; 249 XIButtonState buttons; 250 XIValuatorState valuators; 251 XIModifierState mods; 252 XIGroupState group; 253 } XIDeviceEvent; 254 255 typedef struct { 256 int type; /* GenericEvent */ 257 unsigned long serial; /* # of last request processed by server */ 258 Bool send_event; /* true if this came from a SendEvent request */ 259 Display *display; /* Display the event was read from */ 260 int extension; /* XI extension offset */ 261 int evtype; /* XI_RawKeyPress, XI_RawKeyRelease, etc. */ 262 Time time; 263 int deviceid; 264 int sourceid; /* Bug: Always 0. https://bugs.freedesktop.org//show_bug.cgi?id=34240 */ 265 int detail; 266 int flags; 267 XIValuatorState valuators; 268 double *raw_values; 269 } XIRawEvent; 270 271 typedef struct { 272 int type; /* GenericEvent */ 273 unsigned long serial; /* # of last request processed by server */ 274 Bool send_event; /* true if this came from a SendEvent request */ 275 Display *display; /* Display the event was read from */ 276 int extension; /* XI extension offset */ 277 int evtype; 278 Time time; 279 int deviceid; 280 int sourceid; 281 int detail; 282 Window root; 283 Window event; 284 Window child; 285 double root_x; 286 double root_y; 287 double event_x; 288 double event_y; 289 int mode; 290 Bool focus; 291 Bool same_screen; 292 XIButtonState buttons; 293 XIModifierState mods; 294 XIGroupState group; 295 } XIEnterEvent; 296 297 typedef XIEnterEvent XILeaveEvent; 298 typedef XIEnterEvent XIFocusInEvent; 299 typedef XIEnterEvent XIFocusOutEvent; 300 301 typedef struct { 302 int type; /* GenericEvent */ 303 unsigned long serial; /* # of last request processed by server */ 304 Bool send_event; /* true if this came from a SendEvent request */ 305 Display *display; /* Display the event was read from */ 306 int extension; /* XI extension offset */ 307 int evtype; /* XI_PropertyEvent */ 308 Time time; 309 int deviceid; /* id of the device that changed */ 310 Atom property; 311 int what; 312 } XIPropertyEvent; 313 314 typedef struct { 315 int type; /* GenericEvent */ 316 unsigned long serial; /* # of last request processed by server */ 317 Bool send_event; /* true if this came from a SendEvent request */ 318 Display *display; /* Display the event was read from */ 319 int extension; /* XI extension offset */ 320 int evtype; 321 Time time; 322 int deviceid; 323 int sourceid; 324 unsigned int touchid; 325 Window root; 326 Window event; 327 Window child; 328 int flags; 329 } XITouchOwnershipEvent; 330 331 _XFUNCPROTOBEGIN 332 333 extern Bool XIQueryPointer( 334 Display* display, 335 int deviceid, 336 Window win, 337 Window* root, 338 Window* child, 339 double* root_x, 340 double* root_y, 341 double* win_x, 342 double* win_y, 343 XIButtonState *buttons, 344 XIModifierState *mods, 345 XIGroupState *group 346 ); 347 348 extern Bool XIWarpPointer( 349 Display* display, 350 int deviceid, 351 Window src_win, 352 Window dst_win, 353 double src_x, 354 double src_y, 355 unsigned int src_width, 356 unsigned int src_height, 357 double dst_x, 358 double dst_y 359 ); 360 361 extern Status XIDefineCursor( 362 Display* display, 363 int deviceid, 364 Window win, 365 Cursor cursor 366 ); 367 368 extern Status XIUndefineCursor( 369 Display* display, 370 int deviceid, 371 Window win 372 ); 373 374 extern Status XIChangeHierarchy( 375 Display* display, 376 XIAnyHierarchyChangeInfo* changes, 377 int num_changes 378 ); 379 380 extern Status XISetClientPointer( 381 Display* dpy, 382 Window win, 383 int deviceid 384 ); 385 386 extern Bool XIGetClientPointer( 387 Display* dpy, 388 Window win, 389 int* deviceid 390 ); 391 392 extern int XISelectEvents( 393 Display* dpy, 394 Window win, 395 XIEventMask *masks, 396 int num_masks 397 ); 398 399 extern XIEventMask *XIGetSelectedEvents( 400 Display* dpy, 401 Window win, 402 int *num_masks_return 403 ); 404 405 extern Status XIQueryVersion( 406 Display* dpy, 407 int* major_version_inout, 408 int* minor_version_inout 409 ); 410 411 extern XIDeviceInfo* XIQueryDevice( 412 Display* dpy, 413 int deviceid, 414 int* ndevices_return 415 ); 416 417 extern Status XISetFocus( 418 Display* dpy, 419 int deviceid, 420 Window focus, 421 Time time 422 ); 423 424 extern Status XIGetFocus( 425 Display* dpy, 426 int deviceid, 427 Window *focus_return); 428 429 extern Status XIGrabDevice( 430 Display* dpy, 431 int deviceid, 432 Window grab_window, 433 Time time, 434 Cursor cursor, 435 int grab_mode, 436 int paired_device_mode, 437 Bool owner_events, 438 XIEventMask *mask 439 ); 440 441 extern Status XIUngrabDevice( 442 Display* dpy, 443 int deviceid, 444 Time time 445 ); 446 447 extern Status XIAllowEvents( 448 Display* display, 449 int deviceid, 450 int event_mode, 451 Time time 452 ); 453 454 extern Status XIAllowTouchEvents( 455 Display* display, 456 int deviceid, 457 unsigned int touchid, 458 Window grab_window, 459 int event_mode 460 ); 461 462 extern int XIGrabButton( 463 Display* display, 464 int deviceid, 465 int button, 466 Window grab_window, 467 Cursor cursor, 468 int grab_mode, 469 int paired_device_mode, 470 int owner_events, 471 XIEventMask *mask, 472 int num_modifiers, 473 XIGrabModifiers *modifiers_inout 474 ); 475 476 extern int XIGrabKeycode( 477 Display* display, 478 int deviceid, 479 int keycode, 480 Window grab_window, 481 int grab_mode, 482 int paired_device_mode, 483 int owner_events, 484 XIEventMask *mask, 485 int num_modifiers, 486 XIGrabModifiers *modifiers_inout 487 ); 488 489 extern int XIGrabEnter( 490 Display* display, 491 int deviceid, 492 Window grab_window, 493 Cursor cursor, 494 int grab_mode, 495 int paired_device_mode, 496 int owner_events, 497 XIEventMask *mask, 498 int num_modifiers, 499 XIGrabModifiers *modifiers_inout 500 ); 501 502 extern int XIGrabFocusIn( 503 Display* display, 504 int deviceid, 505 Window grab_window, 506 int grab_mode, 507 int paired_device_mode, 508 int owner_events, 509 XIEventMask *mask, 510 int num_modifiers, 511 XIGrabModifiers *modifiers_inout 512 ); 513 514 extern int XIGrabTouchBegin( 515 Display* display, 516 int deviceid, 517 Window grab_window, 518 int owner_events, 519 XIEventMask *mask, 520 int num_modifiers, 521 XIGrabModifiers *modifiers_inout 522 ); 523 524 extern Status XIUngrabButton( 525 Display* display, 526 int deviceid, 527 int button, 528 Window grab_window, 529 int num_modifiers, 530 XIGrabModifiers *modifiers 531 ); 532 533 extern Status XIUngrabKeycode( 534 Display* display, 535 int deviceid, 536 int keycode, 537 Window grab_window, 538 int num_modifiers, 539 XIGrabModifiers *modifiers 540 ); 541 542 extern Status XIUngrabEnter( 543 Display* display, 544 int deviceid, 545 Window grab_window, 546 int num_modifiers, 547 XIGrabModifiers *modifiers 548 ); 549 550 extern Status XIUngrabFocusIn( 551 Display* display, 552 int deviceid, 553 Window grab_window, 554 int num_modifiers, 555 XIGrabModifiers *modifiers 556 ); 557 558 extern Status XIUngrabTouchBegin( 559 Display* display, 560 int deviceid, 561 Window grab_window, 562 int num_modifiers, 563 XIGrabModifiers *modifiers 564 ); 565 566 extern Atom *XIListProperties( 567 Display* display, 568 int deviceid, 569 int *num_props_return 570 ); 571 572 extern void XIChangeProperty( 573 Display* display, 574 int deviceid, 575 Atom property, 576 Atom type, 577 int format, 578 int mode, 579 unsigned char *data, 580 int num_items 581 ); 582 583 extern void 584 XIDeleteProperty( 585 Display* display, 586 int deviceid, 587 Atom property 588 ); 589 590 extern Status 591 XIGetProperty( 592 Display* display, 593 int deviceid, 594 Atom property, 595 long offset, 596 long length, 597 Bool delete_property, 598 Atom type, 599 Atom *type_return, 600 int *format_return, 601 unsigned long *num_items_return, 602 unsigned long *bytes_after_return, 603 unsigned char **data 604 ); 605 606 extern void XIFreeDeviceInfo(XIDeviceInfo *info); 607 608 _XFUNCPROTOEND 609 610 #endif /* XINPUT2_H */ 611