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