1 ! Copyright (C) 2010 Niklas Waern.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: alien alien.c-types alien.libraries alien.syntax classes.struct
4 locals math sequences x11.X x11.syntax x11.xlib ;
7 << "xinput2" "libXi.so" cdecl add-library >>
16 : mask-index ( event -- n ) -3 shift ;
17 : bitmask ( event -- n ) 7 bitand 2^ ;
20 :: XISetMask ( mask event -- )
21 event mask-index :> index
22 event bitmask index mask nth bitor
23 index mask set-nth ; inline
25 :: XIClearMask ( mask event -- )
26 event mask-index :> index
27 event bitmask bitnot index mask nth bitand
28 index mask set-nth ; inline
30 :: XIMaskIsSet ( mask event -- n )
31 event mask-index :> index
32 event bitmask index mask nth bitand ;
34 : XIMaskLen ( event -- n ) 7 + -3 shift ;
40 STRUCT: XIAddMasterInfo
46 STRUCT: XIRemoveMasterInfo
50 { return_pointer int }
51 { return_keyboard int } ;
53 STRUCT: XIAttachSlaveInfo
58 STRUCT: XIDetachSlaveInfo
62 UNION-STRUCT: XIAnyHierarchyChangeInfo
64 { add XIAddMasterInfo }
65 { remove XIRemoveMasterInfo }
66 { attach XIAttachSlaveInfo }
67 { detach XIDetachSlaveInfo } ;
69 STRUCT: XIModifierState
75 TYPEDEF: XIModifierState XIGroupState
81 STRUCT: XIValuatorState
91 STRUCT: XIAnyClassInfo
95 STRUCT: XIButtonClassInfo
100 { state XIButtonState } ;
102 STRUCT: XIKeyClassInfo
108 STRUCT: XIValuatorClassInfo
126 { classes XIAnyClassInfo** } ;
128 STRUCT: XIGrabModifiers
133 ! Generic XI2 event. All XI2 events have the same header.
143 STRUCT: XIHierarchyInfo
150 ! Notifies the client that the device hierarcy has been changed
151 ! The client is expected to re-query the server for the device
153 STRUCT: XIHierarchyEvent
163 { info XIHierarchyInfo* } ;
165 ! Notifies the client that the classes have been changed.
166 ! This happens when the slave device that sends through the
168 STRUCT: XIDeviceChangedEvent
180 { classes XIAnyClassInfo** } ;
182 STRUCT: XIDeviceEvent
201 { buttons XIButtonState }
202 { valuators XIValuatorState }
203 { mods XIModifierState }
204 { group XIGroupState } ;
218 { valuators XIValuatorState }
219 { raw_values double* } ;
242 { buttons XIButtonState }
243 { mods XIModifierState }
244 { group XIGroupState } ;
246 TYPEDEF: XIEnterEvent XILeaveEvent
247 TYPEDEF: XIEnterEvent XIFocusInEvent
248 TYPEDEF: XIEnterEvent XIFocusOutEvent
250 STRUCT: XIPropertyEvent
264 X-FUNCTION: Bool XIQueryPointer (
274 XIButtonState* buttons,
275 XIModifierState* mods,
276 XIGroupState* group )
278 X-FUNCTION: Bool XIWarpPointer (
290 X-FUNCTION: Status XIDefineCursor (
296 X-FUNCTION: Status XIUndefineCursor (
301 X-FUNCTION: Status XIChangeHierarchy (
303 XIAnyHierarchyChangeInfo* changes,
306 X-FUNCTION: Status XISetClientPointer (
311 X-FUNCTION: Bool XIGetClientPointer (
316 X-FUNCTION: int XISelectEvents (
322 X-FUNCTION: XIEventMask* XIGetSelectedEvents (
325 int* num_masks_return )
327 X-FUNCTION: Status XIQueryVersion (
329 int* major_version_inout,
330 int* minor_version_inout )
332 X-FUNCTION: XIDeviceInfo* XIQueryDevice (
335 int* ndevices_return )
337 X-FUNCTION: Status XISetFocus (
343 X-FUNCTION: Status XIGetFocus (
346 Window* focus_return )
348 X-FUNCTION: Status XIGrabDevice (
355 int paired_device_mode,
359 X-FUNCTION: Status XIUngrabDevice (
364 X-FUNCTION: Status XIAllowEvents (
370 X-FUNCTION: int XIGrabButton (
377 int paired_device_mode,
381 XIGrabModifiers* modifiers_inout )
383 X-FUNCTION: int XIGrabKeycode (
389 int paired_device_mode,
393 XIGrabModifiers* modifiers_inout )
395 X-FUNCTION: int XIGrabEnter (
401 int paired_device_mode,
405 XIGrabModifiers* modifiers_inout )
407 X-FUNCTION: int XIGrabFocusIn (
412 int paired_device_mode,
416 XIGrabModifiers* modifiers_inout )
418 X-FUNCTION: Status XIUngrabButton (
424 XIGrabModifiers* modifiers )
426 X-FUNCTION: Status XIUngrabKeycode (
432 XIGrabModifiers* modifiers )
434 X-FUNCTION: Status XIUngrabEnter (
439 XIGrabModifiers* modifiers )
441 X-FUNCTION: Status XIUngrabFocusIn (
446 XIGrabModifiers* modifiers )
448 X-FUNCTION: Atom* XIListProperties (
451 int* num_props_return )
453 X-FUNCTION: void XIChangeProperty (
463 X-FUNCTION: void XIDeleteProperty (
468 X-FUNCTION: Status XIGetProperty (
474 Bool delete_property,
478 ulong* num_items_return,
479 ulong* bytes_after_return,
482 X-FUNCTION: void XIFreeDeviceInfo ( XIDeviceInfo* info )