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