1 ! Copyright (C) 2010 Niklas Waern.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien alien.c-types alien.libraries alien.syntax
4 classes.struct locals sequences x11.syntax x11.xlib ;
5 EXCLUDE: math => float ;
8 << "xinput2" "libXi.so" cdecl add-library >>
17 : mask-index ( event -- n ) -3 shift ;
18 : bitmask ( event -- n ) 7 bitand 2^ ;
21 :: XISetMask ( mask event -- )
22 event mask-index :> index
23 event bitmask index mask nth bitor
24 index mask set-nth ; inline
26 :: XIClearMask ( mask event -- )
27 event mask-index :> index
28 event bitmask bitnot index mask nth bitand
29 index mask set-nth ; inline
31 :: XIMaskIsSet ( mask event -- n )
32 event mask-index :> index
33 event bitmask index mask nth bitand ;
35 : XIMaskLen ( event -- n ) 7 + -3 shift ;
41 STRUCT: XIAddMasterInfo
47 STRUCT: XIRemoveMasterInfo
51 { return_pointer int }
52 { return_keyboard int } ;
54 STRUCT: XIAttachSlaveInfo
59 STRUCT: XIDetachSlaveInfo
63 UNION-STRUCT: XIAnyHierarchyChangeInfo
65 { add XIAddMasterInfo }
66 { remove XIRemoveMasterInfo }
67 { attach XIAttachSlaveInfo }
68 { detach XIDetachSlaveInfo } ;
70 STRUCT: XIModifierState
76 TYPEDEF: XIModifierState XIGroupState
82 STRUCT: XIValuatorState
92 STRUCT: XIAnyClassInfo
96 STRUCT: XIButtonClassInfo
101 { state XIButtonState } ;
103 STRUCT: XIKeyClassInfo
109 STRUCT: XIValuatorClassInfo
127 { classes XIAnyClassInfo** } ;
129 STRUCT: XIGrabModifiers
134 ! Generic XI2 event. All XI2 events have the same header.
144 STRUCT: XIHierarchyInfo
151 ! Notifies the client that the device hierarcy has been changed
152 ! The client is expected to re-query the server for the device
154 STRUCT: XIHierarchyEvent
164 { info XIHierarchyInfo* } ;
166 ! Notifies the client that the classes have been changed.
167 ! This happens when the slave device that sends through the
169 STRUCT: XIDeviceChangedEvent
181 { classes XIAnyClassInfo** } ;
183 STRUCT: XIDeviceEvent
202 { buttons XIButtonState }
203 { valuators XIValuatorState }
204 { mods XIModifierState }
205 { group XIGroupState } ;
219 { valuators XIValuatorState }
220 { raw_values double* } ;
243 { buttons XIButtonState }
244 { mods XIModifierState }
245 { group XIGroupState } ;
247 TYPEDEF: XIEnterEvent XILeaveEvent
248 TYPEDEF: XIEnterEvent XIFocusInEvent
249 TYPEDEF: XIEnterEvent XIFocusOutEvent
251 STRUCT: XIPropertyEvent
265 X-FUNCTION: Bool XIQueryPointer (
275 XIButtonState* buttons,
276 XIModifierState* mods,
277 XIGroupState* group ) ;
279 X-FUNCTION: Bool XIWarpPointer (
291 X-FUNCTION: Status XIDefineCursor (
297 X-FUNCTION: Status XIUndefineCursor (
302 X-FUNCTION: Status XIChangeHierarchy (
304 XIAnyHierarchyChangeInfo* changes,
307 X-FUNCTION: Status XISetClientPointer (
312 X-FUNCTION: Bool XIGetClientPointer (
317 X-FUNCTION: int XISelectEvents (
323 X-FUNCTION: XIEventMask* XIGetSelectedEvents (
326 int* num_masks_return ) ;
328 X-FUNCTION: Status XIQueryVersion (
330 int* major_version_inout,
331 int* minor_version_inout ) ;
333 X-FUNCTION: XIDeviceInfo* XIQueryDevice (
336 int* ndevices_return ) ;
338 X-FUNCTION: Status XISetFocus (
344 X-FUNCTION: Status XIGetFocus (
347 Window* focus_return ) ;
349 X-FUNCTION: Status XIGrabDevice (
356 int paired_device_mode,
358 XIEventMask* mask ) ;
360 X-FUNCTION: Status XIUngrabDevice (
365 X-FUNCTION: Status XIAllowEvents (
371 X-FUNCTION: int XIGrabButton (
378 int paired_device_mode,
382 XIGrabModifiers* modifiers_inout ) ;
384 X-FUNCTION: int XIGrabKeycode (
390 int paired_device_mode,
394 XIGrabModifiers* modifiers_inout ) ;
396 X-FUNCTION: int XIGrabEnter (
402 int paired_device_mode,
406 XIGrabModifiers* modifiers_inout ) ;
408 X-FUNCTION: int XIGrabFocusIn (
413 int paired_device_mode,
417 XIGrabModifiers* modifiers_inout ) ;
419 X-FUNCTION: Status XIUngrabButton (
425 XIGrabModifiers* modifiers ) ;
427 X-FUNCTION: Status XIUngrabKeycode (
433 XIGrabModifiers* modifiers ) ;
435 X-FUNCTION: Status XIUngrabEnter (
440 XIGrabModifiers* modifiers ) ;
442 X-FUNCTION: Status XIUngrabFocusIn (
447 XIGrabModifiers* modifiers ) ;
449 X-FUNCTION: Atom* XIListProperties (
452 int* num_props_return ) ;
454 X-FUNCTION: void XIChangeProperty (
464 X-FUNCTION: void XIDeleteProperty (
469 X-FUNCTION: Status XIGetProperty (
475 Bool delete_property,
479 ulong* num_items_return,
480 ulong* bytes_after_return,
483 X-FUNCTION: void XIFreeDeviceInfo ( XIDeviceInfo* info ) ;