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