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