 ! See http://factorcode.org/license.txt for BSD license.
 USING: alien alien.c-types alien.destructors alien.libraries
 alien.syntax cairo.ffi classes.struct combinators
-gobject-introspection kernel system vocabs.loader ;
+gobject-introspection gobject-introspection.standard-types
+kernel system vocabs.loader ;
 IN: gdk.ffi
 
 <<

    { [ os unix? ] [ "libgdk-x11-2.0.so" cdecl add-library ] }
} cond
>>

IMPLEMENT-STRUCTS: GdkEventAny GdkEventKey GdkEventButton
GdkEventScroll GdkEventMotion GdkEventExpose GdkEventVisibility
GdkEventCrossing GdkEventFocus GdkEventConfigure GdkEventProperty
GdkEventSelection GdkEventDND GdkEventProximity GdkEventClient
GdkEventNoExpose GdkEventWindowState GdkEventSetting
GdkEventOwnerChange GdkEventGrabBroken GdkRectangle ;

! <workaround these types are from cairo 1.10
STRUCT: cairo_rectangle_int_t

GIR: vocab:gdk/Gdk-3.0.gir

DESTRUCTOR: gdk_cursor_unref

STRUCT: GdkEventButton
    { type GdkEventType }
    { window GdkWindow* }
    { send_event gint8 }
    { time guint32 }
    { x gdouble }
    { y gdouble }
    { axes* gdouble }
    { state guint }
    { button guint }
    { device GdkDevice* }
    { x_root gdouble }
    { y_root gdouble } ;

STRUCT: GdkEventConfigure
    { type GdkEventType }
    { window GdkWindow* }
    { send_event gint8 }
    { x gint }
    { y gint }
    { width gint }
    { height gint } ;

STRUCT: GdkEventKey
    { type GdkEventType }
    { window GdkWindow* }
    { send_event gint8 }
    { time guint32 }
    { state guint }
    { keyval guint }
    { length gint }
    { string gchar* }
    { hardware_keycode guint16 }
    { group guint8 }
    { is_modifier uint bits: 1 } ;

STRUCT: GdkEventMotion
    { type GdkEventType }
    { window GdkWindow* }
    { send_event gint8 }
    { time guint32 }
    { x gdouble }
    { y gdouble }
    { axes gdouble* }
    { state guint }
    { is_hint gint16 }
    { device GdkDevice* }
    { x_root gdouble }
    { y_root gdouble } ;

STRUCT: GdkEventScroll
    { type GdkEventType }
    { window GdkWindow* }
    { send_event gint8 }
    { time guint32 }
    { x gdouble }
    { y gdouble }
    { state guint }
    { direction GdkScrollDirection }
    { device GdkDevice* }
    { x_root gdouble }
    { y_root gdouble } ;
