]> gitweb.factorcode.org Git - factor.git/commitdiff
x11.xinput2.ffi
authorNiklas.Waern <ceninan@gmail.com>
Fri, 21 May 2010 19:54:33 +0000 (21:54 +0200)
committerNiklas.Waern <ceninan@gmail.com>
Fri, 21 May 2010 22:12:51 +0000 (00:12 +0200)
basis/x11/xinput2/ffi/authors.txt [new file with mode: 0644]
basis/x11/xinput2/ffi/ffi.factor [new file with mode: 0644]

diff --git a/basis/x11/xinput2/ffi/authors.txt b/basis/x11/xinput2/ffi/authors.txt
new file mode 100644 (file)
index 0000000..8e15658
--- /dev/null
@@ -0,0 +1 @@
+Niklas Waern
diff --git a/basis/x11/xinput2/ffi/ffi.factor b/basis/x11/xinput2/ffi/ffi.factor
new file mode 100644 (file)
index 0000000..65ed731
--- /dev/null
@@ -0,0 +1,482 @@
+! Copyright (C) 2010 Niklas Waern.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien alien.c-types alien.libraries alien.syntax
+classes.struct locals sequences x11.syntax x11.xlib ;
+EXCLUDE: math => float ;
+IN: x11.xinput2.ffi
+
+<< "xinput2" "libXi.so" cdecl add-library >>
+
+LIBRARY: xinput2
+
+
+! *********
+! * XI2.h *
+! *********
+:: XISetMask ( mask event -- )
+    event -3 shift    :> index
+    event 7 bitand 2^ :> bit-mask
+    bit-mask index mask nth bitor
+    index mask set-nth ; inline
+
+:: XIClearMask ( mask event -- )
+    event -3 shift           :> index
+    event 7 bitand 2^ bitnot :> bit-mask
+    bit-mask index mask nth bitand
+    index mask set-nth ; inline
+
+:: XIMaskIsSet ( mask event -- n )
+    event -3 shift    :> index
+    event 7 bitand 2^ :> bit-mask
+    bit-mask index mask nth bitand ;
+
+: XIMaskLen ( event -- n ) 7 + -3 shift ;
+
+
+! *************
+! * XInput2.h *
+! *************
+STRUCT: XIAddMasterInfo
+    { type      int }
+    { name      c-string }
+    { send_core Bool }
+    { enable    Bool } ;
+
+STRUCT: XIRemoveMasterInfo
+    { type            int }
+    { deviceid        int }
+    { return_mode     int }
+    { return_pointer  int }
+    { return_keyboard int } ;
+
+STRUCT: XIAttachSlaveInfo
+    { type       int }
+    { deviceid   int }
+    { new_master int } ;
+
+STRUCT: XIDetachSlaveInfo
+    { type     int }
+    { deviceid int } ;
+
+UNION-STRUCT: XIAnyHierarchyChangeInfo
+    { type   int }
+    { add    XIAddMasterInfo }
+    { remove XIRemoveMasterInfo }
+    { attach XIAttachSlaveInfo }
+    { detach XIDetachSlaveInfo } ;
+
+STRUCT: XIModifierState
+    { base      int }
+    { latched   int }
+    { locked    int }
+    { effective int } ;
+
+TYPEDEF: XIModifierState XIGroupState
+
+STRUCT: XIButtonState
+    { mask_len int }
+    { mask     uchar* } ;
+
+STRUCT: XIValuatorState
+    { mask_len int }
+    { mask     uchar* }
+    { values   double* } ;
+
+STRUCT: XIEventMask
+    { deviceid int }
+    { mask_len int }
+    { mask     uchar* } ;
+
+STRUCT: XIAnyClassInfo
+    { type     int }
+    { sourceid int } ;
+
+STRUCT: XIButtonClassInfo
+    { type        int }
+    { sourceid    int }
+    { num_buttons int }
+    { labels      Atom* }
+    { state       XIButtonState } ;
+
+STRUCT: XIKeyClassInfo
+    { type         int }
+    { sourceid     int }
+    { num_keycodes int }
+    { keycodes     int* } ;
+
+STRUCT: XIValuatorClassInfo
+    { type       int }
+    { sourceid   int }
+    { number     int }
+    { label      Atom }
+    { min        double }
+    { max        double }
+    { value      double }
+    { resolution int }
+    { mode       int } ;
+
+STRUCT: XIDeviceInfo
+    { deviceid    int }
+    { name        c-string }
+    { use         int }
+    { attachment  int }
+    { enabled     Bool }
+    { num_classes int }
+    { classes     XIAnyClassInfo** } ;
+
+STRUCT: XIGrabModifiers
+    { modifiers int }
+    { status    int } ;
+
+
+! Generic XI2 event. All XI2 events have the same header.
+STRUCT: XIEvent
+    { type       int }
+    { serial     ulong }
+    { send_event Bool }
+    { display    Display* }
+    { extension  int }
+    { evtype     int }
+    { time       Time } ;
+
+STRUCT: XIHierarchyInfo
+    { deviceid   int }
+    { attachment int }
+    { use        int }
+    { enabled    Bool }
+    { flags      int } ;
+
+! Notifies the client that the device hierarcy has been changed
+! The client is expected to re-query the server for the device
+! hierarchy.
+STRUCT: XIHierarchyEvent
+    { type       int }
+    { serial     ulong }
+    { send_event Bool }
+    { display    Display }
+    { extension  int }
+    { evtype     int }
+    { time       Time }
+    { flags      int }
+    { num_info   int }
+    { info       XIHierarchyInfo* } ;
+
+! Notifies the client that the classes have been changed.
+! This happens when the slave device that sends through the
+! master changes.
+STRUCT: XIDeviceChangedEvent
+    { type        int }
+    { serial      ulong }
+    { send_event  Bool }
+    { display     Display* }
+    { extension   int }
+    { evtype      int }
+    { time        Time }
+    { deviceid    int }
+    { sourceid    int }
+    { reason      int }
+    { num_classes int }
+    { classes     XIAnyClassInfo** } ;
+
+STRUCT: XIDeviceEvent
+    { type       int }
+    { serial     ulong }
+    { send_event Bool }
+    { display    Display* }
+    { extension  int }
+    { evtype     int }
+    { time       Time }
+    { deviceid   int }
+    { sourceid   int }
+    { detail     int }
+    { root       Window }
+    { event      Window }
+    { child      Window }
+    { root_x     double }
+    { root_y     double }
+    { event_x    double }
+    { event_y    double }
+    { flags      int }
+    { buttons    XIButtonState }
+    { valuators  XIValuatorState }
+    { mods       XIModifierState }
+    { group      XIGroupState } ;
+
+STRUCT: XIRawEvent
+    { type       int }
+    { serial     ulong }
+    { send_event Bool }
+    { display    Display* }
+    { extension  int }
+    { evtype     int }
+    { time       Time }
+    { deviceid   int }
+    { sourceid   int }
+    { detail     int }
+    { flags      int }
+    { valuators  XIValuatorState }
+    { raw_values double* } ;
+
+STRUCT: XIEnterEvent
+    { type        int }
+    { serial      ulong }
+    { send_event  Bool }
+    { display     Display* }
+    { extension   int }
+    { evtype      int }
+    { time        Time }
+    { deviceid    int }
+    { sourceid    int }
+    { detail      int }
+    { root        Window }
+    { event       Window }
+    { child       Window }
+    { root_x      double }
+    { root_y      double }
+    { event_x     double }
+    { event_y     double }
+    { mode        int }
+    { focus       Bool }
+    { same_screen Bool }
+    { buttons     XIButtonState }
+    { mods        XIModifierState }
+    { group       XIGroupState } ;
+
+TYPEDEF: XIEnterEvent XILeaveEvent
+TYPEDEF: XIEnterEvent XIFocusInEvent
+TYPEDEF: XIEnterEvent XIFocusOutEvent
+
+STRUCT: XIPropertyEvent
+    { type       int }
+    { serial     ulong }
+    { send_event Bool }
+    { display    Display* }
+    { extension  int }
+    { evtype     int }
+    { time       Time }
+    { deviceid   int }
+    { property   Atom }
+    { what       int } ;
+
+
+
+X-FUNCTION: Bool XIQueryPointer (
+    Display*         display,
+    int              deviceid,
+    Window           win,
+    Window*          root,
+    Window*          child,
+    double*          root_x,
+    double*          root_y,
+    double*          win_x,
+    double*          win_y,
+    XIButtonState*   buttons,
+    XIModifierState* mods,
+    XIGroupState*    group ) ;
+
+X-FUNCTION: Bool XIWarpPointer (
+    Display* display,
+    int      deviceid,
+    Window   src_win,
+    Window   dst_win,
+    double   src_x,
+    double   src_y,
+    uint     src_width,
+    uint     src_height,
+    double   dst_x,
+    double   dst_y ) ;
+
+X-FUNCTION: Status XIDefineCursor (
+    Display* display,
+    int      deviceid,
+    Window   win,
+    Cursor   cursor ) ;
+
+X-FUNCTION: Status XIUndefineCursor (
+    Display* display,
+    int      deviceid,
+    Window   win ) ;
+
+X-FUNCTION: Status XIChangeHierarchy (
+    Display*                  display,
+    XIAnyHierarchyChangeInfo* changes,
+    int                       num_changes ) ;
+
+X-FUNCTION: Status XISetClientPointer (
+    Display* dpy,
+    Window   win,
+    int      deviceid ) ;
+
+X-FUNCTION: Bool XIGetClientPointer (
+    Display* dpy,
+    Window   win,
+    int*     deviceid ) ;
+
+X-FUNCTION: int XISelectEvents (
+    Display*     dpy,
+    Window       win,
+    XIEventMask* masks,
+    int          num_masks ) ;
+
+X-FUNCTION: XIEventMask* XIGetSelectedEvents (
+    Display* dpy,
+    Window   win,
+    int*     num_masks_return ) ;
+
+X-FUNCTION: Status XIQueryVersion (
+    Display* display,
+    int*     major_version_inout,
+    int*     minor_version_inout ) ;
+
+X-FUNCTION: XIDeviceInfo* XIQueryDevice (
+    Display* dpy,
+    int      deviceid,
+    int*     ndevices_return ) ;
+
+X-FUNCTION: Status XISetFocus (
+    Display* dpy,
+    int      deviceid,
+    Window   focus,
+    Time     time ) ;
+
+X-FUNCTION: Status XIGetFocus (
+    Display* dpy,
+    int      deviceid,
+    Window*  focus_return ) ;
+
+X-FUNCTION: Status XIGrabDevice (
+    Display*     dpy,
+    int          deviceid,
+    Window       grab_window,
+    Time         time,
+    Cursor       cursor,
+    int          grab_mode,
+    int          paired_device_mode,
+    Bool         owner_events,
+    XIEventMask* mask ) ;
+
+X-FUNCTION: Status XIUngrabDevice (
+    Display* dpy,
+    int      deviceid,
+    Time     time ) ;
+
+X-FUNCTION: Status XIAllowEvents (
+    Display* display,
+    int      deviceid,
+    int      event_mode,
+    Time     time ) ;
+
+X-FUNCTION: int XIGrabButton (
+    Display*         display,
+    int              deviceid,
+    int              button,
+    Window           grab_window,
+    Cursor           cursor,
+    int              grab_mode,
+    int              paired_device_mode,
+    int              owner_events,
+    XIEventMask*     mask,
+    int              num_modifiers,
+    XIGrabModifiers* modifiers_inout ) ;
+
+X-FUNCTION: int XIGrabKeycode (
+    Display*         display,
+    int              deviceid,
+    int              keycode,
+    Window           grab_window,
+    int              grab_mode,
+    int              paired_device_mode,
+    int              owner_events,
+    XIEventMask*     mask,
+    int              num_modifiers,
+    XIGrabModifiers* modifiers_inout ) ;
+
+X-FUNCTION: int XIGrabEnter (
+    Display*         display,
+    int              deviceid,
+    Window           grab_window,
+    Cursor           cursor,
+    int              grab_mode,
+    int              paired_device_mode,
+    int              owner_events,
+    XIEventMask*     mask,
+    int              num_modifiers,
+    XIGrabModifiers* modifiers_inout ) ;
+
+X-FUNCTION: int XIGrabFocusIn (
+    Display*         display,
+    int              deviceid,
+    Window           grab_window,
+    int              grab_mode,
+    int              paired_device_mode,
+    int              owner_events,
+    XIEventMask*     mask,
+    int              num_modifiers,
+    XIGrabModifiers* modifiers_inout ) ;
+
+X-FUNCTION: Status XIUngrabButton (
+    Display*         display,
+    int              deviceid,
+    int              button,
+    Window           grab_window,
+    int              num_modifiers,
+    XIGrabModifiers* modifiers ) ;
+
+X-FUNCTION: Status XIUngrabKeycode (
+    Display*         display,
+    int              deviceid,
+    int              keycode,
+    Window           grab_window,
+    int              num_modifiers,
+    XIGrabModifiers* modifiers ) ;
+
+X-FUNCTION: Status XIUngrabEnter (
+    Display*         display,
+    int              deviceid,
+    Window           grab_window,
+    int              num_modifiers,
+    XIGrabModifiers* modifiers ) ;
+
+X-FUNCTION: Status XIUngrabFocusIn (
+    Display*         display,
+    int              deviceid,
+    Window           grab_window,
+    int              num_modifiers,
+    XIGrabModifiers* modifiers ) ;
+
+X-FUNCTION: Atom* XIListProperties (
+    Display* display,
+    int      deviceid,
+    int*     num_props_return ) ;
+
+X-FUNCTION: void XIChangeProperty (
+    Display* display,
+    int      deviceid,
+    Atom     property,
+    Atom     type,
+    int      format,
+    int      mode,
+    uchar*   data,
+    int      num_items ) ;
+
+X-FUNCTION: void XIDeleteProperty (
+    Display* display,
+    int      deviceid,
+    Atom     property ) ;
+
+X-FUNCTION: Status XIGetProperty (
+    Display* display,
+    int      deviceid,
+    Atom     property,
+    long     offset,
+    long     length,
+    Bool     delete_property,
+    Atom     type,
+    Atom*    type_return,
+    int*     format_return,
+    ulong*   num_items_return,
+    ulong*   bytes_after_return,
+    uchar**  data ) ;
+
+X-FUNCTION: void XIFreeDeviceInfo ( XIDeviceInfo* info ) ;
+