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