{.deadCodeElim: on.}
import 
  glib2, gdk2pixbuf, pango

when defined(win32): 
  const 
    lib = "libgdk-win32-2.0-0.dll"
elif defined(macosx): 
  #    linklib gtk-x11-2.0
  #    linklib gdk-x11-2.0
  #    linklib pango-1.0.0
  #    linklib glib-2.0.0
  #    linklib gobject-2.0.0
  #    linklib gdk_pixbuf-2.0.0
  #    linklib atk-1.0.0
  const 
    lib = "libgdk-x11-2.0.dylib"
else: 
  const 
    lib = "libgdk-x11-2.0.so(|.0)"
const 
  NUMPTSTOBUFFER* = 200
  MAX_TIMECOORD_AXES* = 128

type 
  PDeviceClass* = ptr TDeviceClass
  TDeviceClass* = object of TGObjectClass
  PVisualClass* = ptr TVisualClass
  TVisualClass* = object of TGObjectClass
  PColor* = ptr TColor
  TColor*{.final, pure.} = object 
    pixel*: guint32
    red*: guint16
    green*: guint16
    blue*: guint16

  PColormap* = ptr TColormap
  PDrawable* = ptr TDrawable
  TDrawable* = object of TGObject
  PWindow* = ptr TWindow
  TWindow* = TDrawable
  PPixmap* = ptr TPixmap
  TPixmap* = TDrawable
  PBitmap* = ptr TBitmap
  TBitmap* = TDrawable
  PFontType* = ptr TFontType
  TFontType* = enum 
    FONT_FONT, FONT_FONTSET
  PFont* = ptr TFont
  TFont*{.final, pure.} = object 
    `type`*: TFontType
    ascent*: gint
    descent*: gint

  PFunction* = ptr TFunction
  TFunction* = enum 
    funcCOPY, funcINVERT, funcXOR, funcCLEAR, funcAND, 
    funcAND_REVERSE, funcAND_INVERT, funcNOOP, funcOR, funcEQUIV, 
    funcOR_REVERSE, funcCOPY_INVERT, funcOR_INVERT, funcNAND, funcNOR, funcSET
  PCapStyle* = ptr TCapStyle
  TCapStyle* = enum 
    CAP_NOT_LAST, CAP_BUTT, CAP_ROUND, CAP_PROJECTING
  PFill* = ptr TFill
  TFill* = enum 
    SOLID, TILED, STIPPLED, OPAQUE_STIPPLED
  PJoinStyle* = ptr TJoinStyle
  TJoinStyle* = enum 
    JOIN_MITER, JOIN_ROUND, JOIN_BEVEL
  PLineStyle* = ptr TLineStyle
  TLineStyle* = enum 
    LINE_SOLID, LINE_ON_OFF_DASH, LINE_DOUBLE_DASH
  PSubwindowMode* = ptr TSubwindowMode
  TSubwindowMode* = int
  PGCValuesMask* = ptr TGCValuesMask
  TGCValuesMask* = int32
  PGCValues* = ptr TGCValues
  TGCValues*{.final, pure.} = object 
    foreground*: TColor
    background*: TColor
    font*: PFont
    `function`*: TFunction
    fill*: TFill
    tile*: PPixmap
    stipple*: PPixmap
    clip_mask*: PPixmap
    subwindow_mode*: TSubwindowMode
    ts_x_origin*: gint
    ts_y_origin*: gint
    clip_x_origin*: gint
    clip_y_origin*: gint
    graphics_exposures*: gint
    line_width*: gint
    line_style*: TLineStyle
    cap_style*: TCapStyle
    join_style*: TJoinStyle

  PGC* = ptr TGC
  TGC* = object of TGObject
    clip_x_origin*: gint
    clip_y_origin*: gint
    ts_x_origin*: gint
    ts_y_origin*: gint
    colormap*: PColormap

  PImageType* = ptr TImageType
  TImageType* = enum 
    IMAGE_NORMAL, IMAGE_SHARED, IMAGE_FASTEST
  PImage* = ptr TImage
  PDevice* = ptr TDevice
  PTimeCoord* = ptr TTimeCoord
  PPTimeCoord* = ptr PTimeCoord
  PRgbDither* = ptr TRgbDither
  TRgbDither* = enum 
    RGB_DITHER_NONE, RGB_DITHER_NORMAL, RGB_DITHER_MAX
  PDisplay* = ptr TDisplay
  PScreen* = ptr TScreen
  TScreen* = object of TGObject
  PInputCondition* = ptr TInputCondition
  TInputCondition* = int32
  PStatus* = ptr TStatus
  TStatus* = int32
  TPoint*{.final, pure.} = object 
    x*: gint
    y*: gint

  PPoint* = ptr TPoint
  PPPoint* = ptr PPoint
  PSpan* = ptr TSpan
  PWChar* = ptr TWChar
  TWChar* = guint32
  PSegment* = ptr TSegment
  TSegment*{.final, pure.} = object 
    x1*: gint
    y1*: gint
    x2*: gint
    y2*: gint

  PRectangle* = ptr TRectangle
  TRectangle*{.final, pure.} = object 
    x*: gint
    y*: gint
    width*: gint
    height*: gint

  PAtom* = ptr TAtom
  TAtom* = gulong
  PByteOrder* = ptr TByteOrder
  TByteOrder* = enum 
    LSB_FIRST, MSB_FIRST
  PModifierType* = ptr TModifierType
  TModifierType* = gint
  PVisualType* = ptr TVisualType
  TVisualType* = enum 
    VISUAL_STATIC_GRAY, VISUAL_GRAYSCALE, VISUAL_STATIC_COLOR, 
    VISUAL_PSEUDO_COLOR, VISUAL_TRUE_COLOR, VISUAL_DIRECT_COLOR
  PVisual* = ptr TVisual
  TVisual* = object of TGObject
    TheType*: TVisualType
    depth*: gint
    byte_order*: TByteOrder
    colormap_size*: gint
    bits_per_rgb*: gint
    red_mask*: guint32
    red_shift*: gint
    red_prec*: gint
    green_mask*: guint32
    green_shift*: gint
    green_prec*: gint
    blue_mask*: guint32
    blue_shift*: gint
    blue_prec*: gint
    screen*: PScreen

  PColormapClass* = ptr TColormapClass
  TColormapClass* = object of TGObjectClass
  TColormap* = object of TGObject
    size*: gint
    colors*: PColor
    visual*: PVisual
    windowing_data*: gpointer
    screen*: PScreen

  PCursorType* = ptr TCursorType
  TCursorType* = gint
  PCursor* = ptr TCursor
  TCursor*{.final, pure.} = object 
    `type`*: TCursorType
    ref_count*: guint

  PDragAction* = ptr TDragAction
  TDragAction* = int32
  PDragProtocol* = ptr TDragProtocol
  TDragProtocol* = enum 
    DRAG_PROTO_MOTIF, DRAG_PROTO_XDND, DRAG_PROTO_ROOTWIN, DRAG_PROTO_NONE, 
    DRAG_PROTO_WIN32_DROPFILES, DRAG_PROTO_OLE2, DRAG_PROTO_LOCAL
  PDragContext* = ptr TDragContext
  TDragContext* = object of TGObject
    protocol*: TDragProtocol
    is_source*: gboolean
    source_window*: PWindow
    dest_window*: PWindow
    targets*: PGList
    actions*: TDragAction
    suggested_action*: TDragAction
    action*: TDragAction
    start_time*: guint32
    windowing_data*: gpointer

  PDragContextClass* = ptr TDragContextClass
  TDragContextClass* = object of TGObjectClass
  PRegionBox* = ptr TRegionBox
  TRegionBox* = TSegment
  PRegion* = ptr TRegion
  TRegion*{.final, pure.} = object 
    size*: int32
    numRects*: int32
    rects*: PRegionBox
    extents*: TRegionBox

  PPOINTBLOCK* = ptr TPOINTBLOCK
  TPOINTBLOCK*{.final, pure.} = object 
    pts*: array[0..(NUMPTSTOBUFFER) - 1, TPoint]
    next*: PPOINTBLOCK

  PDrawableClass* = ptr TDrawableClass
  TDrawableClass* = object of TGObjectClass
    create_gc*: proc (drawable: PDrawable, values: PGCValues, 
                      mask: TGCValuesMask): PGC{.cdecl.}
    draw_rectangle*: proc (drawable: PDrawable, gc: PGC, filled: gint, x: gint, 
                           y: gint, width: gint, height: gint){.cdecl.}
    draw_arc*: proc (drawable: PDrawable, gc: PGC, filled: gint, x: gint, 
                     y: gint, width: gint, height: gint, angle1: gint, 
                     angle2: gint){.cdecl.}
    draw_polygon*: proc (drawable: PDrawable, gc: PGC, filled: gint, 
                         points: PPoint, npoints: gint){.cdecl.}
    draw_text*: proc (drawable: PDrawable, font: PFont, gc: PGC, x: gint, 
                      y: gint, text: cstring, text_length: gint){.cdecl.}
    draw_text_wc*: proc (drawable: PDrawable, font: PFont, gc: PGC, x: gint, 
                         y: gint, text: PWChar, text_length: gint){.cdecl.}
    draw_drawable*: proc (drawable: PDrawable, gc: PGC, src: PDrawable, 
                          xsrc: gint, ysrc: gint, xdest: gint, ydest: gint, 
                          width: gint, height: gint){.cdecl.}
    draw_points*: proc (drawable: PDrawable, gc: PGC, points: PPoint, 
                        npoints: gint){.cdecl.}
    draw_segments*: proc (drawable: PDrawable, gc: PGC, segs: PSegment, 
                          nsegs: gint){.cdecl.}
    draw_lines*: proc (drawable: PDrawable, gc: PGC, points: PPoint, 
                       npoints: gint){.cdecl.}
    draw_glyphs*: proc (drawable: PDrawable, gc: PGC, font: PFont, x: gint, 
                        y: gint, glyphs: PGlyphString){.cdecl.}
    draw_image*: proc (drawable: PDrawable, gc: PGC, image: PImage, xsrc: gint, 
                       ysrc: gint, xdest: gint, ydest: gint, width: gint, 
                       height: gint){.cdecl.}
    get_depth*: proc (drawable: PDrawable): gint{.cdecl.}
    get_size*: proc (drawable: PDrawable, width: Pgint, height: Pgint){.cdecl.}
    set_colormap*: proc (drawable: PDrawable, cmap: PColormap){.cdecl.}
    get_colormap*: proc (drawable: PDrawable): PColormap{.cdecl.}
    get_visual*: proc (drawable: PDrawable): PVisual{.cdecl.}
    get_screen*: proc (drawable: PDrawable): PScreen{.cdecl.}
    get_image*: proc (drawable: PDrawable, x: gint, y: gint, width: gint, 
                      height: gint): PImage{.cdecl.}
    get_clip_region*: proc (drawable: PDrawable): PRegion{.cdecl.}
    get_visible_region*: proc (drawable: PDrawable): PRegion{.cdecl.}
    get_composite_drawable*: proc (drawable: PDrawable, x: gint, y: gint, 
                                   width: gint, height: gint, 
                                   composite_x_offset: Pgint, 
                                   composite_y_offset: Pgint): PDrawable{.cdecl.}
    `draw_pixbuf`*: proc (drawable: PDrawable, gc: PGC, pixbuf: PPixbuf, 
                          src_x: gint, src_y: gint, dest_x: gint, dest_y: gint, 
                          width: gint, height: gint, dither: TRgbDither, 
                          x_dither: gint, y_dither: gint){.cdecl.}
    `copy_to_image`*: proc (drawable: PDrawable, image: PImage, src_x: gint, 
                            src_y: gint, dest_x: gint, dest_y: gint, 
                            width: gint, height: gint): PImage{.cdecl.}
    `reserved1`: proc (){.cdecl.}
    `reserved2`: proc (){.cdecl.}
    `reserved3`: proc (){.cdecl.}
    `reserved4`: proc (){.cdecl.}
    `reserved5`: proc (){.cdecl.}
    `reserved6`: proc (){.cdecl.}
    `reserved7`: proc (){.cdecl.}
    `reserved9`: proc (){.cdecl.}
    `reserved10`: proc (){.cdecl.}
    `reserved11`: proc (){.cdecl.}
    `reserved12`: proc (){.cdecl.}
    `reserved13`: proc (){.cdecl.}
    `reserved14`: proc (){.cdecl.}
    `reserved15`: proc (){.cdecl.}
    `reserved16`: proc (){.cdecl.}

  PEvent* = ptr TEvent
  TEventFunc* = proc (event: PEvent, data: gpointer){.cdecl.}
  PXEvent* = ptr TXEvent
  TXEvent* = proc () {.cdecl.}
  PFilterReturn* = ptr TFilterReturn
  TFilterReturn* = enum 
    FILTER_CONTINUE, FILTER_TRANSLATE, FILTER_REMOVE
  TFilterFunc* = proc (xevent: PXEvent, event: PEvent, data: gpointer): TFilterReturn{.
      cdecl.}
  PEventType* = ptr TEventType
  TEventType* = gint
  PEventMask* = ptr TEventMask
  TEventMask* = gint32
  PVisibilityState* = ptr TVisibilityState
  TVisibilityState* = enum 
    VISIBILITY_UNOBSCURED, VISIBILITY_PARTIAL, VISIBILITY_FULLY_OBSCURED
  PScrollDirection* = ptr TScrollDirection
  TScrollDirection* = enum 
    SCROLL_UP, SCROLL_DOWN, SCROLL_LEFT, SCROLL_RIGHT
  PNotifyType* = ptr TNotifyType
  TNotifyType* = int
  PCrossingMode* = ptr TCrossingMode
  TCrossingMode* = enum 
    CROSSING_NORMAL, CROSSING_GRAB, CROSSING_UNGRAB
  PPropertyState* = ptr TPropertyState
  TPropertyState* = enum 
    PROPERTY_NEW_VALUE, PROPERTY_STATE_DELETE
  PWindowState* = ptr TWindowState
  TWindowState* = gint
  PSettingAction* = ptr TSettingAction
  TSettingAction* = enum 
    SETTING_ACTION_NEW, SETTING_ACTION_CHANGED, SETTING_ACTION_DELETED
  PEventAny* = ptr TEventAny
  TEventAny*{.final, pure.} = object 
    `type`*: TEventType
    window*: PWindow
    send_event*: gint8

  PEventExpose* = ptr TEventExpose
  TEventExpose*{.final, pure.} = object 
    `type`*: TEventType
    window*: PWindow
    send_event*: gint8
    area*: TRectangle
    region*: PRegion
    count*: gint

  PEventNoExpose* = ptr TEventNoExpose
  TEventNoExpose*{.final, pure.} = object 
    `type`*: TEventType
    window*: PWindow
    send_event*: gint8

  PEventVisibility* = ptr TEventVisibility
  TEventVisibility*{.final, pure.} = object 
    `type`*: TEventType
    window*: PWindow
    send_event*: gint8
    state*: TVisibilityState

  PEventMotion* = ptr TEventMotion
  TEventMotion*{.final, pure.} = object 
    `type`*: TEventType
    window*: PWindow
    send_event*: gint8
    time*: guint32
    x*: gdouble
    y*: gdouble
    axes*: Pgdouble
    state*: guint
    is_hint*: gint16
    device*: PDevice
    x_root*: gdouble
    y_root*: gdouble

  PEventButton* = ptr TEventButton
  TEventButton*{.final, pure.} = object 
    `type`*: TEventType
    window*: PWindow
    send_event*: gint8
    time*: guint32
    x*: gdouble
    y*: gdouble
    axes*: Pgdouble
    state*: guint
    button*: guint
    device*: PDevice
    x_root*: gdouble
    y_root*: gdouble

  PEventScroll* = ptr TEventScroll
  TEventScroll*{.final, pure.} = object 
    `type`*: TEventType
    window*: PWindow
    send_event*: gint8
    time*: guint32
    x*: gdouble
    y*: gdouble
    state*: guint
    direction*: TScrollDirection
    device*: PDevice
    x_root*: gdouble
    y_root*: gdouble

  PEventKey* = ptr TEventKey
  TEventKey*{.final, pure.} = object 
    `type`*: TEventType
    window*: PWindow
    send_event*: gint8
    time*: guint32
    state*: guint
    keyval*: guint
    length*: gint
    `string`*: cstring
    hardware_keycode*: guint16
    group*: guint8

  PEventCrossing* = ptr TEventCrossing
  TEventCrossing*{.final, pure.} = object 
    `type`*: TEventType
    window*: PWindow
    send_event*: gint8
    subwindow*: PWindow
    time*: guint32
    x*: gdouble
    y*: gdouble
    x_root*: gdouble
    y_root*: gdouble
    mode*: TCrossingMode
    detail*: TNotifyType
    focus*: gboolean
    state*: guint

  PEventFocus* = ptr TEventFocus
  TEventFocus*{.final, pure.} = object 
    `type`*: TEventType
    window*: PWindow
    send_event*: gint8
    `in`*: gint16

  PEventConfigure* = ptr TEventConfigure
  TEventConfigure*{.final, pure.} = object 
    `type`*: TEventType
    window*: PWindow
    send_event*: gint8
    x*: gint
    y*: gint
    width*: gint
    height*: gint

  PEventProperty* = ptr TEventProperty
  TEventProperty*{.final, pure.} = object 
    `type`*: TEventType
    window*: PWindow
    send_event*: gint8
    atom*: TAtom
    time*: guint32
    state*: guint

  TNativeWindow* = pointer
  PEventSelection* = ptr TEventSelection
  TEventSelection*{.final, pure.} = object 
    `type`*: TEventType
    window*: PWindow
    send_event*: gint8
    selection*: TAtom
    target*: TAtom
    `property`*: TAtom
    time*: guint32
    requestor*: TNativeWindow

  PEventProximity* = ptr TEventProximity
  TEventProximity*{.final, pure.} = object 
    `type`*: TEventType
    window*: PWindow
    send_event*: gint8
    time*: guint32
    device*: PDevice

  PmatDUMMY* = ptr TmatDUMMY
  TmatDUMMY*{.final, pure.} = object 
    b*: array[0..19, char]

  PEventClient* = ptr TEventClient
  TEventClient*{.final, pure.} = object 
    `type`*: TEventType
    window*: PWindow
    send_event*: gint8
    message_type*: TAtom
    data_format*: gushort
    b*: array[0..19, char]

  PEventSetting* = ptr TEventSetting
  TEventSetting*{.final, pure.} = object 
    `type`*: TEventType
    window*: PWindow
    send_event*: gint8
    action*: TSettingAction
    name*: cstring

  PEventWindowState* = ptr TEventWindowState
  TEventWindowState*{.final, pure.} = object 
    `type`*: TEventType
    window*: PWindow
    send_event*: gint8
    changed_mask*: TWindowState
    new_window_state*: TWindowState

  PEventDND* = ptr TEventDND
  TEventDND*{.final, pure.} = object 
    `type`*: TEventType
    window*: PWindow
    send_event*: gint8
    context*: PDragContext
    time*: guint32
    x_root*: gshort
    y_root*: gshort

  TEvent*{.final, pure.} = object 
    data*: array[0..255, char] # union of
                               # `type`: TEventType
                               #  any: TEventAny
                               #  expose: TEventExpose
                               #  no_expose: TEventNoExpose
                               #  visibility: TEventVisibility
                               #  motion: TEventMotion
                               #  button: TEventButton
                               #  scroll: TEventScroll
                               #  key: TEventKey
                               #  crossing: TEventCrossing
                               #  focus_change: TEventFocus
                               #  configure: TEventConfigure
                               #  `property`: TEventProperty
                               #  selection: TEventSelection
                               #  proximity: TEventProximity
                               #  client: TEventClient
                               #  dnd: TEventDND
                               #  window_state: TEventWindowState
                               #  setting: TEventSetting
  
  PGCClass* = ptr TGCClass
  TGCClass* = object of TGObjectClass
    get_values*: proc (gc: PGC, values: PGCValues){.cdecl.}
    set_values*: proc (gc: PGC, values: PGCValues, mask: TGCValuesMask){.cdecl.}
    set_dashes*: proc (gc: PGC, dash_offset: gint, dash_list: openarray[gint8]){.
        cdecl.}
    `reserved1`*: proc (){.cdecl.}
    `reserved2`*: proc (){.cdecl.}
    `reserved3`*: proc (){.cdecl.}
    `reserved4`*: proc (){.cdecl.}

  PImageClass* = ptr TImageClass
  TImageClass* = object of TGObjectClass
  TImage* = object of TGObject
    `type`*: TImageType
    visual*: PVisual
    byte_order*: TByteOrder
    width*: gint
    height*: gint
    depth*: guint16
    bpp*: guint16
    bpl*: guint16
    bits_per_pixel*: guint16
    mem*: gpointer
    colormap*: PColormap
    windowing_data*: gpointer

  PExtensionMode* = ptr TExtensionMode
  TExtensionMode* = enum 
    EXTENSION_EVENTS_NONE, EXTENSION_EVENTS_ALL, EXTENSION_EVENTS_CURSOR
  PInputSource* = ptr TInputSource
  TInputSource* = enum 
    SOURCE_MOUSE, SOURCE_PEN, SOURCE_ERASER, SOURCE_CURSOR
  PInputMode* = ptr TInputMode
  TInputMode* = enum 
    MODE_DISABLED, MODE_SCREEN, MODE_WINDOW
  PAxisUse* = ptr TAxisUse
  TAxisUse* = int32
  PDeviceKey* = ptr TDeviceKey
  TDeviceKey*{.final, pure.} = object 
    keyval*: guint
    modifiers*: TModifierType

  PDeviceAxis* = ptr TDeviceAxis
  TDeviceAxis*{.final, pure.} = object 
    use*: TAxisUse
    min*: gdouble
    max*: gdouble

  TDevice* = object of TGObject
    name*: cstring
    source*: TInputSource
    mode*: TInputMode
    has_cursor*: gboolean
    num_axes*: gint
    axes*: PDeviceAxis
    num_keys*: gint
    keys*: PDeviceKey

  TTimeCoord*{.final, pure.} = object 
    time*: guint32
    axes*: array[0..(MAX_TIMECOORD_AXES) - 1, gdouble]

  PKeymapKey* = ptr TKeymapKey
  TKeymapKey*{.final, pure.} = object 
    keycode*: guint
    group*: gint
    level*: gint

  PKeymap* = ptr TKeymap
  TKeymap* = object of TGObject
    display*: PDisplay

  PKeymapClass* = ptr TKeymapClass
  TKeymapClass* = object of TGObjectClass
    direction_changed*: proc (keymap: PKeymap){.cdecl.}

  PAttrStipple* = ptr TAttrStipple
  TAttrStipple*{.final, pure.} = object 
    attr*: TAttribute
    stipple*: PBitmap

  PAttrEmbossed* = ptr TAttrEmbossed
  TAttrEmbossed*{.final, pure.} = object 
    attr*: TAttribute
    embossed*: gboolean

  PPixmapObject* = ptr TPixmapObject
  TPixmapObject* = object of TDrawable
    impl*: PDrawable
    depth*: gint

  PPixmapObjectClass* = ptr TPixmapObjectClass
  TPixmapObjectClass* = object of TDrawableClass
  PPropMode* = ptr TPropMode
  TPropMode* = enum 
    PROP_MODE_REPLACE, PROP_MODE_PREPEND, PROP_MODE_APPEND
  PFillRule* = ptr TFillRule
  TFillRule* = enum 
    EVEN_ODD_RULE, WINDING_RULE
  POverlapType* = ptr TOverlapType
  TOverlapType* = enum 
    OVERLAP_RECTANGLE_IN, OVERLAP_RECTANGLE_OUT, OVERLAP_RECTANGLE_PART
  TSpanFunc* = proc (span: PSpan, data: gpointer){.cdecl.}
  PRgbCmap* = ptr TRgbCmap
  TRgbCmap*{.final, pure.} = object 
    colors*: array[0..255, guint32]
    n_colors*: gint
    info_list*: PGSList

  TDisplay* = object of TGObject
    queued_events*: PGList
    queued_tail*: PGList
    button_click_time*: array[0..1, guint32]
    button_window*: array[0..1, PWindow]
    button_number*: array[0..1, guint]
    double_click_time*: guint

  PDisplayClass* = ptr TDisplayClass
  TDisplayClass* = object of TGObjectClass
    get_display_name*: proc (display: PDisplay): cstring{.cdecl.}
    get_n_screens*: proc (display: PDisplay): gint{.cdecl.}
    get_screen*: proc (display: PDisplay, screen_num: gint): PScreen{.cdecl.}
    get_default_screen*: proc (display: PDisplay): PScreen{.cdecl.}

  PScreenClass* = ptr TScreenClass
  TScreenClass* = object of TGObjectClass
    get_display*: proc (screen: PScreen): PDisplay{.cdecl.}
    get_width*: proc (screen: PScreen): gint{.cdecl.}
    get_height*: proc (screen: PScreen): gint{.cdecl.}
    get_width_mm*: proc (screen: PScreen): gint{.cdecl.}
    get_height_mm*: proc (screen: PScreen): gint{.cdecl.}
    get_root_depth*: proc (screen: PScreen): gint{.cdecl.}
    get_screen_num*: proc (screen: PScreen): gint{.cdecl.}
    get_root_window*: proc (screen: PScreen): PWindow{.cdecl.}
    get_default_colormap*: proc (screen: PScreen): PColormap{.cdecl.}
    set_default_colormap*: proc (screen: PScreen, colormap: PColormap){.cdecl.}
    get_window_at_pointer*: proc (screen: PScreen, win_x: Pgint, win_y: Pgint): PWindow{.
        cdecl.}
    get_n_monitors*: proc (screen: PScreen): gint{.cdecl.}
    get_monitor_geometry*: proc (screen: PScreen, monitor_num: gint, 
                                 dest: PRectangle){.cdecl.}

  PGrabStatus* = ptr TGrabStatus
  TGrabStatus* = int
  TInputFunction* = proc (data: gpointer, source: gint, 
                          condition: TInputCondition){.cdecl.}
  TDestroyNotify* = proc (data: gpointer){.cdecl.}
  TSpan*{.final, pure.} = object 
    x*: gint
    y*: gint
    width*: gint

  PWindowClass* = ptr TWindowClass
  TWindowClass* = enum 
    INPUT_OUTPUT, INPUT_ONLY
  PWindowType* = ptr TWindowType
  TWindowType* = enum 
    WINDOW_ROOT, WINDOW_TOPLEVEL, WINDOW_CHILD, WINDOW_DIALOG, WINDOW_TEMP, 
    WINDOW_FOREIGN
  PWindowAttributesType* = ptr TWindowAttributesType
  TWindowAttributesType* = int32
  PWindowHints* = ptr TWindowHints
  TWindowHints* = int32
  PWindowTypeHint* = ptr TWindowTypeHint
  TWindowTypeHint* = enum 
    WINDOW_TYPE_HINT_NORMAL, WINDOW_TYPE_HINT_DIALOG, WINDOW_TYPE_HINT_MENU, 
    WINDOW_TYPE_HINT_TOOLBAR, WINDOW_TYPE_HINT_SPLASHSCREEN,
    WINDOW_TYPE_HINT_UTILITY, WINDOW_TYPE_HINT_DOCK,
    WINDOW_TYPE_HINT_DESKTOP, WINDOW_TYPE_HINT_DROPDOWN_MENU,
    WINDOW_TYPE_HINT_POPUP_MENU, WINDOW_TYPE_HINT_TOOLTIP,
    WINDOW_TYPE_HINT_NOTIFICATION, WINDOW_TYPE_HINT_COMBO,
    WINDOW_TYPE_HINT_DND
  PWMDecoration* = ptr TWMDecoration
  TWMDecoration* = int32
  PWMFunction* = ptr TWMFunction
  TWMFunction* = int32
  PGravity* = ptr TGravity
  TGravity* = int
  PWindowEdge* = ptr TWindowEdge
  TWindowEdge* = enum 
    WINDOW_EDGE_NORTH_WEST, WINDOW_EDGE_NORTH, WINDOW_EDGE_NORTH_EAST, 
    WINDOW_EDGE_WEST, WINDOW_EDGE_EAST, WINDOW_EDGE_SOUTH_WEST, 
    WINDOW_EDGE_SOUTH, WINDOW_EDGE_SOUTH_EAST
  PWindowAttr* = ptr TWindowAttr
  TWindowAttr*{.final, pure.} = object 
    title*: cstring
    event_mask*: gint
    x*: gint
    y*: gint
    width*: gint
    height*: gint
    wclass*: TWindowClass
    visual*: PVisual
    colormap*: PColormap
    window_type*: TWindowType
    cursor*: PCursor
    wmclass_name*: cstring
    wmclass_class*: cstring
    override_redirect*: gboolean

  PGeometry* = ptr TGeometry
  TGeometry*{.final, pure.} = object 
    min_width*: gint
    min_height*: gint
    max_width*: gint
    max_height*: gint
    base_width*: gint
    base_height*: gint
    width_inc*: gint
    height_inc*: gint
    min_aspect*: gdouble
    max_aspect*: gdouble
    win_gravity*: TGravity

  PPointerHooks* = ptr TPointerHooks
  TPointerHooks*{.final, pure.} = object 
    get_pointer*: proc (window: PWindow, x: Pgint, y: Pgint, mask: PModifierType): PWindow{.
        cdecl.}
    window_at_pointer*: proc (screen: PScreen, win_x: Pgint, win_y: Pgint): PWindow{.
        cdecl.}

  PWindowObject* = ptr TWindowObject
  TWindowObject* = object of TDrawable
    impl*: PDrawable
    parent*: PWindowObject
    user_data*: gpointer
    x*: gint
    y*: gint
    extension_events*: gint
    filters*: PGList
    children*: PGList
    bg_color*: TColor
    bg_pixmap*: PPixmap
    paint_stack*: PGSList
    update_area*: PRegion
    update_freeze_count*: guint
    window_type*: guint8
    depth*: guint8
    resize_count*: guint8
    state*: TWindowState
    flag0*: guint16
    event_mask*: TEventMask

  PWindowObjectClass* = ptr TWindowObjectClass
  TWindowObjectClass* = object of TDrawableClass
  window_invalidate_maybe_recurse_child_func* = proc (para1: PWindow, 
      para2: gpointer): gboolean {.cdecl.}

proc TYPE_COLORMAP*(): GType
proc COLORMAP*(anObject: pointer): PColormap
proc COLORMAP_CLASS*(klass: pointer): PColormapClass
proc IS_COLORMAP*(anObject: pointer): bool
proc IS_COLORMAP_CLASS*(klass: pointer): bool
proc COLORMAP_GET_CLASS*(obj: pointer): PColormapClass
proc TYPE_COLOR*(): GType
proc colormap_get_type*(): GType{.cdecl, dynlib: lib, 
                                  importc: "gdk_colormap_get_type".}
proc colormap_new*(visual: PVisual, allocate: gboolean): PColormap{.cdecl, 
    dynlib: lib, importc: "gdk_colormap_new".}
proc alloc_colors*(colormap: PColormap, colors: PColor, ncolors: gint, 
                            writeable: gboolean, best_match: gboolean, 
                            success: Pgboolean): gint{.cdecl, dynlib: lib, 
    importc: "gdk_colormap_alloc_colors".}
proc alloc_color*(colormap: PColormap, color: PColor, 
                           writeable: gboolean, best_match: gboolean): gboolean{.
    cdecl, dynlib: lib, importc: "gdk_colormap_alloc_color".}
proc free_colors*(colormap: PColormap, colors: PColor, ncolors: gint){.
    cdecl, dynlib: lib, importc: "gdk_colormap_free_colors".}
proc query_color*(colormap: PColormap, pixel: gulong, result: PColor){.
    cdecl, dynlib: lib, importc: "gdk_colormap_query_color".}
proc get_visual*(colormap: PColormap): PVisual{.cdecl, dynlib: lib, 
    importc: "gdk_colormap_get_visual".}
proc copy*(color: PColor): PColor{.cdecl, dynlib: lib, 
    importc: "gdk_color_copy".}
proc free*(color: PColor){.cdecl, dynlib: lib, importc: "gdk_color_free".}
proc color_parse*(spec: cstring, color: PColor): gint{.cdecl, dynlib: lib, 
    importc: "gdk_color_parse".}
proc hash*(colora: PColor): guint{.cdecl, dynlib: lib, 
    importc: "gdk_color_hash".}
proc equal*(colora: PColor, colorb: PColor): gboolean{.cdecl, dynlib: lib, 
    importc: "gdk_color_equal".}
proc color_get_type*(): GType{.cdecl, dynlib: lib, importc: "gdk_color_get_type".}
const 
  CURSOR_IS_PIXMAP* = - (1)
  X_CURSOR* = 0
  ARROW* = 2
  BASED_ARROW_DOWN* = 4
  BASED_ARROW_UP* = 6
  BOAT* = 8
  BOGOSITY* = 10
  BOTTOM_LEFT_CORNER* = 12
  BOTTOM_RIGHT_CORNER* = 14
  BOTTOM_SIDE* = 16
  BOTTOM_TEE* = 18
  BOX_SPIRAL* = 20
  CENTER_PTR* = 22
  CIRCLE* = 24
  CLOCK* = 26
  COFFEE_MUG* = 28
  CROSS* = 30
  CROSS_REVERSE* = 32
  CROSSHAIR* = 34
  DIAMOND_CROSS* = 36
  DOT* = 38
  DOTBOX* = 40
  DOUBLE_ARROW* = 42
  DRAFT_LARGE* = 44
  DRAFT_SMALL* = 46
  DRAPED_BOX* = 48
  EXCHANGE* = 50
  FLEUR* = 52
  GOBBLER* = 54
  GUMBY* = 56
  HAND1* = 58
  HAND2* = 60
  HEART* = 62
  ICON* = 64
  IRON_CROSS* = 66
  LEFT_PTR* = 68
  LEFT_SIDE* = 70
  LEFT_TEE* = 72
  LEFTBUTTON* = 74
  LL_ANGLE* = 76
  LR_ANGLE* = 78
  MAN* = 80
  MIDDLEBUTTON* = 82
  MOUSE* = 84
  PENCIL* = 86
  PIRATE* = 88
  PLUS* = 90
  QUESTION_ARROW* = 92
  RIGHT_PTR* = 94
  RIGHT_SIDE* = 96
  RIGHT_TEE* = 98
  RIGHTBUTTON* = 100
  RTL_LOGO* = 102
  SAILBOAT* = 104
  SB_DOWN_ARROW* = 106
  SB_H_DOUBLE_ARROW* = 108
  SB_LEFT_ARROW* = 110
  SB_RIGHT_ARROW* = 112
  SB_UP_ARROW* = 114
  SB_V_DOUBLE_ARROW* = 116
  SHUTTLE* = 118
  SIZING* = 120
  SPIDER* = 122
  SPRAYCAN* = 124
  STAR* = 126
  TARGET* = 128
  TCROSS* = 130
  TOP_LEFT_ARROW* = 132
  TOP_LEFT_CORNER* = 134
  TOP_RIGHT_CORNER* = 136
  TOP_SIDE* = 138
  TOP_TEE* = 140
  TREK* = 142
  UL_ANGLE* = 144
  UMBRELLA* = 146
  UR_ANGLE* = 148
  WATCH* = 150
  XTERM* = 152
  LAST_CURSOR* = XTERM + 1

proc TYPE_CURSOR*(): GType
proc cursor_get_type*(): GType{.cdecl, dynlib: lib, 
                                importc: "gdk_cursor_get_type".}
proc cursor_new_for_screen*(screen: PScreen, cursor_type: TCursorType): PCursor{.
    cdecl, dynlib: lib, importc: "gdk_cursor_new_for_screen".}
proc cursor_new_from_pixmap*(source: PPixmap, mask: PPixmap, fg: PColor, 
                             bg: PColor, x: gint, y: gint): PCursor{.cdecl, 
    dynlib: lib, importc: "gdk_cursor_new_from_pixmap".}
proc get_screen*(cursor: PCursor): PScreen{.cdecl, dynlib: lib, 
    importc: "gdk_cursor_get_screen".}
proc reference*(cursor: PCursor): PCursor{.cdecl, dynlib: lib, 
    importc: "gdk_cursor_ref".}
proc unref*(cursor: PCursor){.cdecl, dynlib: lib, 
                                     importc: "gdk_cursor_unref".}
const 
  ACTION_DEFAULT* = 1 shl 0
  ACTION_COPY* = 1 shl 1
  ACTION_MOVE* = 1 shl 2
  ACTION_LINK* = 1 shl 3
  ACTION_PRIVATE* = 1 shl 4
  ACTION_ASK* = 1 shl 5

proc TYPE_DRAG_CONTEXT*(): GType
proc DRAG_CONTEXT*(anObject: Pointer): PDragContext
proc DRAG_CONTEXT_CLASS*(klass: Pointer): PDragContextClass
proc IS_DRAG_CONTEXT*(anObject: Pointer): bool
proc IS_DRAG_CONTEXT_CLASS*(klass: Pointer): bool
proc DRAG_CONTEXT_GET_CLASS*(obj: Pointer): PDragContextClass
proc drag_context_get_type*(): GType{.cdecl, dynlib: lib, 
                                      importc: "gdk_drag_context_get_type".}
proc drag_context_new*(): PDragContext{.cdecl, dynlib: lib, 
                                        importc: "gdk_drag_context_new".}
proc status*(context: PDragContext, action: TDragAction, time: guint32){.
    cdecl, dynlib: lib, importc: "gdk_drag_status".}
proc drop_reply*(context: PDragContext, ok: gboolean, time: guint32){.cdecl, 
    dynlib: lib, importc: "gdk_drop_reply".}
proc drop_finish*(context: PDragContext, success: gboolean, time: guint32){.
    cdecl, dynlib: lib, importc: "gdk_drop_finish".}
proc get_selection*(context: PDragContext): TAtom{.cdecl, dynlib: lib, 
    importc: "gdk_drag_get_selection".}
proc drag_begin*(window: PWindow, targets: PGList): PDragContext{.cdecl, 
    dynlib: lib, importc: "gdk_drag_begin".}
proc drag_get_protocol_for_display*(display: PDisplay, xid: guint32, 
                                    protocol: PDragProtocol): guint32{.cdecl, 
    dynlib: lib, importc: "gdk_drag_get_protocol_for_display".}
proc find_window*(context: PDragContext, drag_window: PWindow, 
                       x_root: gint, y_root: gint, w: var PWindow, 
                       protocol: PDragProtocol){.cdecl, dynlib: lib, 
    importc: "gdk_drag_find_window".}
proc motion*(context: PDragContext, dest_window: PWindow, 
                  protocol: TDragProtocol, x_root: gint, y_root: gint, 
                  suggested_action: TDragAction, possible_actions: TDragAction, 
                  time: guint32): gboolean{.cdecl, dynlib: lib, 
    importc: "gdk_drag_motion".}
proc drop*(context: PDragContext, time: guint32){.cdecl, dynlib: lib, 
    importc: "gdk_drag_drop".}
proc abort*(context: PDragContext, time: guint32){.cdecl, dynlib: lib, 
    importc: "gdk_drag_abort".}
proc region_EXTENTCHECK*(r1, r2: PRegionBox): bool
proc EXTENTS*(r: PRegionBox, idRect: PRegion)
proc MEMCHECK*(reg: PRegion, ARect, firstrect: var PRegionBox): bool
proc CHECK_PREVIOUS*(Reg: PRegion, R: PRegionBox, 
                            Rx1, Ry1, Rx2, Ry2: gint): bool
proc ADDRECT*(reg: PRegion, r: PRegionBox, rx1, ry1, rx2, ry2: gint)
proc ADDRECTNOX*(reg: PRegion, r: PRegionBox, rx1, ry1, rx2, ry2: gint)
proc EMPTY_REGION*(pReg: PRegion): bool
proc REGION_NOT_EMPTY*(pReg: PRegion): bool
proc region_INBOX*(r: TRegionBox, x, y: gint): bool
proc TYPE_DRAWABLE*(): GType
proc DRAWABLE*(anObject: Pointer): PDrawable
proc DRAWABLE_CLASS*(klass: Pointer): PDrawableClass
proc IS_DRAWABLE*(anObject: Pointer): bool
proc IS_DRAWABLE_CLASS*(klass: Pointer): bool
proc DRAWABLE_GET_CLASS*(obj: Pointer): PDrawableClass
proc drawable_get_type*(): GType{.cdecl, dynlib: lib, 
                                  importc: "gdk_drawable_get_type".}
proc get_size*(drawable: PDrawable, width: Pgint, height: Pgint){.
    cdecl, dynlib: lib, importc: "gdk_drawable_get_size".}
proc set_colormap*(drawable: PDrawable, colormap: PColormap){.cdecl, 
    dynlib: lib, importc: "gdk_drawable_set_colormap".}
proc get_colormap*(drawable: PDrawable): PColormap{.cdecl, dynlib: lib, 
    importc: "gdk_drawable_get_colormap".}
proc get_visual*(drawable: PDrawable): PVisual{.cdecl, dynlib: lib, 
    importc: "gdk_drawable_get_visual".}
proc get_depth*(drawable: PDrawable): gint{.cdecl, dynlib: lib, 
    importc: "gdk_drawable_get_depth".}
proc get_screen*(drawable: PDrawable): PScreen{.cdecl, dynlib: lib, 
    importc: "gdk_drawable_get_screen".}
proc get_display*(drawable: PDrawable): PDisplay{.cdecl, dynlib: lib, 
    importc: "gdk_drawable_get_display".}
proc point*(drawable: PDrawable, gc: PGC, x: gint, y: gint){.cdecl, 
    dynlib: lib, importc: "gdk_draw_point".}
proc line*(drawable: PDrawable, gc: PGC, x1: gint, y1: gint, x2: gint, 
                y2: gint){.cdecl, dynlib: lib, importc: "gdk_draw_line".}
proc rectangle*(drawable: PDrawable, gc: PGC, filled: gint, x: gint, 
                     y: gint, width: gint, height: gint){.cdecl, dynlib: lib, 
    importc: "gdk_draw_rectangle".}
proc arc*(drawable: PDrawable, gc: PGC, filled: gint, x: gint, y: gint, 
               width: gint, height: gint, angle1: gint, angle2: gint){.cdecl, 
    dynlib: lib, importc: "gdk_draw_arc".}
proc polygon*(drawable: PDrawable, gc: PGC, filled: gint, points: PPoint, 
                   npoints: gint){.cdecl, dynlib: lib, 
                                   importc: "gdk_draw_polygon".}
proc drawable*(drawable: PDrawable, gc: PGC, src: PDrawable, xsrc: gint, 
                    ysrc: gint, xdest: gint, ydest: gint, width: gint, 
                    height: gint){.cdecl, dynlib: lib, 
                                   importc: "gdk_draw_drawable".}
proc image*(drawable: PDrawable, gc: PGC, image: PImage, xsrc: gint, 
                 ysrc: gint, xdest: gint, ydest: gint, width: gint, height: gint){.
    cdecl, dynlib: lib, importc: "gdk_draw_image".}
proc points*(drawable: PDrawable, gc: PGC, points: PPoint, npoints: gint){.
    cdecl, dynlib: lib, importc: "gdk_draw_points".}
proc segments*(drawable: PDrawable, gc: PGC, segs: PSegment, nsegs: gint){.
    cdecl, dynlib: lib, importc: "gdk_draw_segments".}
proc lines*(drawable: PDrawable, gc: PGC, points: PPoint, npoints: gint){.
    cdecl, dynlib: lib, importc: "gdk_draw_lines".}
proc glyphs*(drawable: PDrawable, gc: PGC, font: PFont, x: gint, 
                  y: gint, glyphs: PGlyphString){.cdecl, dynlib: lib, 
    importc: "gdk_draw_glyphs".}
proc layout_line*(drawable: PDrawable, gc: PGC, x: gint, y: gint, 
                       line: PLayoutLine){.cdecl, dynlib: lib, 
    importc: "gdk_draw_layout_line".}
proc layout*(drawable: PDrawable, gc: PGC, x: gint, y: gint, 
                  layout: PLayout){.cdecl, dynlib: lib, 
    importc: "gdk_draw_layout".}
proc layout_line*(drawable: PDrawable, gc: PGC, x: gint, 
                                   y: gint, line: PLayoutLine, 
                                   foreground: PColor, background: PColor){.
    cdecl, dynlib: lib, importc: "gdk_draw_layout_line_with_colors".}
proc layout*(drawable: PDrawable, gc: PGC, x: gint, y: gint, 
                              layout: PLayout, foreground: PColor, 
                              background: PColor){.cdecl, dynlib: lib, 
    importc: "gdk_draw_layout_with_colors".}
proc get_image*(drawable: PDrawable, x: gint, y: gint, width: gint, 
                         height: gint): PImage{.cdecl, dynlib: lib, 
    importc: "gdk_drawable_get_image".}
proc get_clip_region*(drawable: PDrawable): PRegion{.cdecl, 
    dynlib: lib, importc: "gdk_drawable_get_clip_region".}
proc get_visible_region*(drawable: PDrawable): PRegion{.cdecl, 
    dynlib: lib, importc: "gdk_drawable_get_visible_region".}
const 
  NOTHING* = - (1)
  DELETE* = 0
  constDESTROY* = 1
  EXPOSE* = 2
  MOTION_NOTIFY* = 3
  BUTTON_PRESS* = 4
  BUTTON2_PRESS* = 5
  BUTTON3_PRESS* = 6
  BUTTON_RELEASE* = 7
  KEY_PRESS* = 8
  KEY_RELEASE* = 9
  ENTER_NOTIFY* = 10
  LEAVE_NOTIFY* = 11
  FOCUS_CHANGE* = 12
  CONFIGURE* = 13
  MAP* = 14
  UNMAP* = 15
  PROPERTY_NOTIFY* = 16
  SELECTION_CLEAR* = 17
  SELECTION_REQUEST* = 18
  SELECTION_NOTIFY* = 19
  PROXIMITY_IN* = 20
  PROXIMITY_OUT* = 21
  DRAG_ENTER* = 22
  DRAG_LEAVE* = 23
  DRAG_MOTION_EVENT* = 24
  DRAG_STATUS_EVENT* = 25
  DROP_START* = 26
  DROP_FINISHED* = 27
  CLIENT_EVENT* = 28
  VISIBILITY_NOTIFY* = 29
  NO_EXPOSE* = 30
  constSCROLL* = 31
  WINDOW_STATE* = 32
  SETTING* = 33
  NOTIFY_ANCESTOR* = 0
  NOTIFY_VIRTUAL* = 1
  NOTIFY_INFERIOR* = 2
  NOTIFY_NONLINEAR* = 3
  NOTIFY_NONLINEAR_VIRTUAL* = 4
  NOTIFY_UNKNOWN* = 5

proc TYPE_EVENT*(): GType
const 
  G_PRIORITY_DEFAULT* = 0
  PRIORITY_EVENTS* = G_PRIORITY_DEFAULT #GDK_PRIORITY_REDRAW* = G_PRIORITY_HIGH_IDLE + 20
  EXPOSURE_MASK* = 1 shl 1
  POINTER_MOTION_MASK* = 1 shl 2
  POINTER_MOTION_HINT_MASK* = 1 shl 3
  BUTTON_MOTION_MASK* = 1 shl 4
  BUTTON1_MOTION_MASK* = 1 shl 5
  BUTTON2_MOTION_MASK* = 1 shl 6
  BUTTON3_MOTION_MASK* = 1 shl 7
  BUTTON_PRESS_MASK* = 1 shl 8
  BUTTON_RELEASE_MASK* = 1 shl 9
  KEY_PRESS_MASK* = 1 shl 10
  KEY_RELEASE_MASK* = 1 shl 11
  ENTER_NOTIFY_MASK* = 1 shl 12
  LEAVE_NOTIFY_MASK* = 1 shl 13
  FOCUS_CHANGE_MASK* = 1 shl 14
  STRUCTURE_MASK* = 1 shl 15
  PROPERTY_CHANGE_MASK* = 1 shl 16
  VISIBILITY_NOTIFY_MASK* = 1 shl 17
  PROXIMITY_IN_MASK* = 1 shl 18
  PROXIMITY_OUT_MASK* = 1 shl 19
  SUBSTRUCTURE_MASK* = 1 shl 20
  SCROLL_MASK* = 1 shl 21
  ALL_EVENTS_MASK* = 0x003FFFFE
  WINDOW_STATE_WITHDRAWN* = 1 shl 0
  WINDOW_STATE_ICONIFIED* = 1 shl 1
  WINDOW_STATE_MAXIMIZED* = 1 shl 2
  WINDOW_STATE_STICKY* = 1 shl 3

proc event_get_type*(): GType{.cdecl, dynlib: lib, importc: "gdk_event_get_type".}
proc events_pending*(): gboolean{.cdecl, dynlib: lib, 
                                  importc: "gdk_events_pending".}
proc event_get*(): PEvent{.cdecl, dynlib: lib, importc: "gdk_event_get".}
proc event_peek*(): PEvent{.cdecl, dynlib: lib, importc: "gdk_event_peek".}
proc event_get_graphics_expose*(window: PWindow): PEvent{.cdecl, dynlib: lib, 
    importc: "gdk_event_get_graphics_expose".}
proc put*(event: PEvent){.cdecl, dynlib: lib, importc: "gdk_event_put".}
proc copy*(event: PEvent): PEvent{.cdecl, dynlib: lib, 
    importc: "gdk_event_copy".}
proc free*(event: PEvent){.cdecl, dynlib: lib, importc: "gdk_event_free".}
proc get_time*(event: PEvent): guint32{.cdecl, dynlib: lib, 
    importc: "gdk_event_get_time".}
proc get_state*(event: PEvent, state: PModifierType): gboolean{.cdecl, 
    dynlib: lib, importc: "gdk_event_get_state".}
proc get_coords*(event: PEvent, x_win: Pgdouble, y_win: Pgdouble): gboolean{.
    cdecl, dynlib: lib, importc: "gdk_event_get_coords".}
proc get_root_coords*(event: PEvent, x_root: Pgdouble, y_root: Pgdouble): gboolean{.
    cdecl, dynlib: lib, importc: "gdk_event_get_root_coords".}
proc get_axis*(event: PEvent, axis_use: TAxisUse, value: Pgdouble): gboolean{.
    cdecl, dynlib: lib, importc: "gdk_event_get_axis".}
proc event_handler_set*(func: TEventFunc, data: gpointer, 
                        notify: TGDestroyNotify){.cdecl, dynlib: lib, 
    importc: "gdk_event_handler_set".}
proc set_show_events*(show_events: gboolean){.cdecl, dynlib: lib, 
    importc: "gdk_set_show_events".}
proc get_show_events*(): gboolean{.cdecl, dynlib: lib, 
                                   importc: "gdk_get_show_events".}
proc TYPE_FONT*(): GType
proc font_get_type*(): GType{.cdecl, dynlib: lib, importc: "gdk_font_get_type".}
proc font_load_for_display*(display: PDisplay, font_name: cstring): PFont{.
    cdecl, dynlib: lib, importc: "gdk_font_load_for_display".}
proc fontset_load_for_display*(display: PDisplay, fontset_name: cstring): PFont{.
    cdecl, dynlib: lib, importc: "gdk_fontset_load_for_display".}
proc font_from_description_for_display*(display: PDisplay, 
                                        font_desc: PFontDescription): PFont{.
    cdecl, dynlib: lib, importc: "gdk_font_from_description_for_display".}
proc reference*(font: PFont): PFont{.cdecl, dynlib: lib, importc: "gdk_font_ref".}
proc unref*(font: PFont){.cdecl, dynlib: lib, importc: "gdk_font_unref".}
proc id*(font: PFont): gint{.cdecl, dynlib: lib, importc: "gdk_font_id".}
proc equal*(fonta: PFont, fontb: PFont): gboolean{.cdecl, dynlib: lib, 
    importc: "gdk_font_equal".}
proc string_width*(font: PFont, `string`: cstring): gint{.cdecl, dynlib: lib, 
    importc: "gdk_string_width".}
proc text_width*(font: PFont, text: cstring, text_length: gint): gint{.cdecl, 
    dynlib: lib, importc: "gdk_text_width".}
proc text_width_wc*(font: PFont, text: PWChar, text_length: gint): gint{.cdecl, 
    dynlib: lib, importc: "gdk_text_width_wc".}
proc char_width*(font: PFont, character: gchar): gint{.cdecl, dynlib: lib, 
    importc: "gdk_char_width".}
proc char_width_wc*(font: PFont, character: TWChar): gint{.cdecl, dynlib: lib, 
    importc: "gdk_char_width_wc".}
proc string_measure*(font: PFont, `string`: cstring): gint{.cdecl, dynlib: lib, 
    importc: "gdk_string_measure".}
proc text_measure*(font: PFont, text: cstring, text_length: gint): gint{.cdecl, 
    dynlib: lib, importc: "gdk_text_measure".}
proc char_measure*(font: PFont, character: gchar): gint{.cdecl, dynlib: lib, 
    importc: "gdk_char_measure".}
proc string_height*(font: PFont, `string`: cstring): gint{.cdecl, dynlib: lib, 
    importc: "gdk_string_height".}
proc text_height*(font: PFont, text: cstring, text_length: gint): gint{.cdecl, 
    dynlib: lib, importc: "gdk_text_height".}
proc char_height*(font: PFont, character: gchar): gint{.cdecl, dynlib: lib, 
    importc: "gdk_char_height".}
proc text_extents*(font: PFont, text: cstring, text_length: gint, 
                   lbearing: Pgint, rbearing: Pgint, width: Pgint, 
                   ascent: Pgint, descent: Pgint){.cdecl, dynlib: lib, 
    importc: "gdk_text_extents".}
proc text_extents_wc*(font: PFont, text: PWChar, text_length: gint, 
                      lbearing: Pgint, rbearing: Pgint, width: Pgint, 
                      ascent: Pgint, descent: Pgint){.cdecl, dynlib: lib, 
    importc: "gdk_text_extents_wc".}
proc string_extents*(font: PFont, `string`: cstring, lbearing: Pgint, 
                     rbearing: Pgint, width: Pgint, ascent: Pgint, 
                     descent: Pgint){.cdecl, dynlib: lib, 
                                      importc: "gdk_string_extents".}
proc get_display*(font: PFont): PDisplay{.cdecl, dynlib: lib, 
    importc: "gdk_font_get_display".}
const 
  GC_FOREGROUND* = 1 shl 0
  GC_BACKGROUND* = 1 shl 1
  GC_FONT* = 1 shl 2
  GC_FUNCTION* = 1 shl 3
  GC_FILL* = 1 shl 4
  GC_TILE* = 1 shl 5
  GC_STIPPLE* = 1 shl 6
  GC_CLIP_MASK* = 1 shl 7
  GC_SUBWINDOW* = 1 shl 8
  GC_TS_X_ORIGIN* = 1 shl 9
  GC_TS_Y_ORIGIN* = 1 shl 10
  GC_CLIP_X_ORIGIN* = 1 shl 11
  GC_CLIP_Y_ORIGIN* = 1 shl 12
  GC_EXPOSURES* = 1 shl 13
  GC_LINE_WIDTH* = 1 shl 14
  GC_LINE_STYLE* = 1 shl 15
  GC_CAP_STYLE* = 1 shl 16
  GC_JOIN_STYLE* = 1 shl 17
  CLIP_BY_CHILDREN* = 0
  INCLUDE_INFERIORS* = 1

proc TYPE_GC*(): GType
proc GC*(anObject: Pointer): PGC
proc GC_CLASS*(klass: Pointer): PGCClass
proc IS_GC*(anObject: Pointer): bool
proc IS_GC_CLASS*(klass: Pointer): bool
proc GC_GET_CLASS*(obj: Pointer): PGCClass
proc gc_get_type*(): GType{.cdecl, dynlib: lib, importc: "gdk_gc_get_type".}
proc gc_new*(drawable: PDrawable): PGC{.cdecl, dynlib: lib, 
                                        importc: "gdk_gc_new".}
proc gc_new*(drawable: PDrawable, values: PGCValues, 
                         values_mask: TGCValuesMask): PGC{.cdecl, dynlib: lib, 
    importc: "gdk_gc_new_with_values".}
proc get_values*(gc: PGC, values: PGCValues){.cdecl, dynlib: lib, 
    importc: "gdk_gc_get_values".}
proc set_values*(gc: PGC, values: PGCValues, values_mask: TGCValuesMask){.
    cdecl, dynlib: lib, importc: "gdk_gc_set_values".}
proc set_foreground*(gc: PGC, color: PColor){.cdecl, dynlib: lib, 
    importc: "gdk_gc_set_foreground".}
proc set_background*(gc: PGC, color: PColor){.cdecl, dynlib: lib, 
    importc: "gdk_gc_set_background".}
proc set_function*(gc: PGC, `function`: TFunction){.cdecl, dynlib: lib, 
    importc: "gdk_gc_set_function".}
proc set_fill*(gc: PGC, fill: TFill){.cdecl, dynlib: lib, 
    importc: "gdk_gc_set_fill".}
proc set_tile*(gc: PGC, tile: PPixmap){.cdecl, dynlib: lib, 
    importc: "gdk_gc_set_tile".}
proc set_stipple*(gc: PGC, stipple: PPixmap){.cdecl, dynlib: lib, 
    importc: "gdk_gc_set_stipple".}
proc set_ts_origin*(gc: PGC, x: gint, y: gint){.cdecl, dynlib: lib, 
    importc: "gdk_gc_set_ts_origin".}
proc set_clip_origin*(gc: PGC, x: gint, y: gint){.cdecl, dynlib: lib, 
    importc: "gdk_gc_set_clip_origin".}
proc set_clip_mask*(gc: PGC, mask: PBitmap){.cdecl, dynlib: lib, 
    importc: "gdk_gc_set_clip_mask".}
proc set_clip_rectangle*(gc: PGC, rectangle: PRectangle){.cdecl, dynlib: lib, 
    importc: "gdk_gc_set_clip_rectangle".}
proc set_clip_region*(gc: PGC, region: PRegion){.cdecl, dynlib: lib, 
    importc: "gdk_gc_set_clip_region".}
proc set_subwindow*(gc: PGC, mode: TSubwindowMode){.cdecl, dynlib: lib, 
    importc: "gdk_gc_set_subwindow".}
proc set_exposures*(gc: PGC, exposures: gboolean){.cdecl, dynlib: lib, 
    importc: "gdk_gc_set_exposures".}
proc set_line_attributes*(gc: PGC, line_width: gint, line_style: TLineStyle, 
                             cap_style: TCapStyle, join_style: TJoinStyle){.
    cdecl, dynlib: lib, importc: "gdk_gc_set_line_attributes".}
proc set_dashes*(gc: PGC, dash_offset: gint, dash_list: openarray[gint8]){.
    cdecl, dynlib: lib, importc: "gdk_gc_set_dashes".}
proc offset*(gc: PGC, x_offset: gint, y_offset: gint){.cdecl, dynlib: lib, 
    importc: "gdk_gc_offset".}
proc copy*(dst_gc: PGC, src_gc: PGC){.cdecl, dynlib: lib, 
    importc: "gdk_gc_copy".}
proc set_colormap*(gc: PGC, colormap: PColormap){.cdecl, dynlib: lib, 
    importc: "gdk_gc_set_colormap".}
proc get_colormap*(gc: PGC): PColormap{.cdecl, dynlib: lib, 
    importc: "gdk_gc_get_colormap".}
proc set_rgb_fg_color*(gc: PGC, color: PColor){.cdecl, dynlib: lib, 
    importc: "gdk_gc_set_rgb_fg_color".}
proc set_rgb_bg_color*(gc: PGC, color: PColor){.cdecl, dynlib: lib, 
    importc: "gdk_gc_set_rgb_bg_color".}
proc get_screen*(gc: PGC): PScreen{.cdecl, dynlib: lib, 
                                       importc: "gdk_gc_get_screen".}
proc TYPE_IMAGE*(): GType
proc IMAGE*(anObject: Pointer): PImage
proc IMAGE_CLASS*(klass: Pointer): PImageClass
proc IS_IMAGE*(anObject: Pointer): bool
proc IS_IMAGE_CLASS*(klass: Pointer): bool
proc IMAGE_GET_CLASS*(obj: Pointer): PImageClass
proc image_get_type*(): GType{.cdecl, dynlib: lib, importc: "gdk_image_get_type".}
proc image_new*(`type`: TImageType, visual: PVisual, width: gint, height: gint): PImage{.
    cdecl, dynlib: lib, importc: "gdk_image_new".}
proc put_pixel*(image: PImage, x: gint, y: gint, pixel: guint32){.cdecl, 
    dynlib: lib, importc: "gdk_image_put_pixel".}
proc get_pixel*(image: PImage, x: gint, y: gint): guint32{.cdecl, 
    dynlib: lib, importc: "gdk_image_get_pixel".}
proc set_colormap*(image: PImage, colormap: PColormap){.cdecl, 
    dynlib: lib, importc: "gdk_image_set_colormap".}
proc get_colormap*(image: PImage): PColormap{.cdecl, dynlib: lib, 
    importc: "gdk_image_get_colormap".}
const 
  AXIS_IGNORE* = 0
  AXIS_X* = 1
  AXIS_Y* = 2
  AXIS_PRESSURE* = 3
  AXIS_XTILT* = 4
  AXIS_YTILT* = 5
  AXIS_WHEEL* = 6
  AXIS_LAST* = 7

proc TYPE_DEVICE*(): GType
proc DEVICE*(anObject: Pointer): PDevice
proc DEVICE_CLASS*(klass: Pointer): PDeviceClass
proc IS_DEVICE*(anObject: Pointer): bool
proc IS_DEVICE_CLASS*(klass: Pointer): bool
proc DEVICE_GET_CLASS*(obj: Pointer): PDeviceClass
proc device_get_type*(): GType{.cdecl, dynlib: lib, 
                                importc: "gdk_device_get_type".}
proc set_source*(device: PDevice, source: TInputSource){.cdecl, 
    dynlib: lib, importc: "gdk_device_set_source".}
proc set_mode*(device: PDevice, mode: TInputMode): gboolean{.cdecl, 
    dynlib: lib, importc: "gdk_device_set_mode".}
proc set_key*(device: PDevice, index: guint, keyval: guint, 
                     modifiers: TModifierType){.cdecl, dynlib: lib, 
    importc: "gdk_device_set_key".}
proc set_axis_use*(device: PDevice, index: guint, use: TAxisUse){.cdecl, 
    dynlib: lib, importc: "gdk_device_set_axis_use".}
proc get_state*(device: PDevice, window: PWindow, axes: Pgdouble, 
                       mask: PModifierType){.cdecl, dynlib: lib, 
    importc: "gdk_device_get_state".}
proc get_history*(device: PDevice, window: PWindow, start: guint32, 
                         stop: guint32, s: var PPTimeCoord, n_events: Pgint): gboolean{.
    cdecl, dynlib: lib, importc: "gdk_device_get_history".}
proc device_free_history*(events: PPTimeCoord, n_events: gint){.cdecl, 
    dynlib: lib, importc: "gdk_device_free_history".}
proc get_axis*(device: PDevice, axes: Pgdouble, use: TAxisUse, 
                      value: Pgdouble): gboolean{.cdecl, dynlib: lib, 
    importc: "gdk_device_get_axis".}
proc input_set_extension_events*(window: PWindow, mask: gint, 
                                 mode: TExtensionMode){.cdecl, dynlib: lib, 
    importc: "gdk_input_set_extension_events".}
proc device_get_core_pointer*(): PDevice{.cdecl, dynlib: lib, 
    importc: "gdk_device_get_core_pointer".}
proc TYPE_KEYMAP*(): GType
proc KEYMAP*(anObject: Pointer): PKeymap
proc KEYMAP_CLASS*(klass: Pointer): PKeymapClass
proc IS_KEYMAP*(anObject: Pointer): bool
proc IS_KEYMAP_CLASS*(klass: Pointer): bool
proc KEYMAP_GET_CLASS*(obj: Pointer): PKeymapClass
proc keymap_get_type*(): GType{.cdecl, dynlib: lib, 
                                importc: "gdk_keymap_get_type".}
proc keymap_get_for_display*(display: PDisplay): PKeymap{.cdecl, dynlib: lib, 
    importc: "gdk_keymap_get_for_display".}
proc lookup_key*(keymap: PKeymap, key: PKeymapKey): guint{.cdecl, 
    dynlib: lib, importc: "gdk_keymap_lookup_key".}
proc translate_keyboard_state*(keymap: PKeymap, hardware_keycode: guint, 
                                      state: TModifierType, group: gint, 
                                      keyval: Pguint, effective_group: Pgint, 
                                      level: Pgint, 
                                      consumed_modifiers: PModifierType): gboolean{.
    cdecl, dynlib: lib, importc: "gdk_keymap_translate_keyboard_state".}
proc get_entries_for_keyval*(keymap: PKeymap, keyval: guint, 
                                    s: var PKeymapKey, n_keys: Pgint): gboolean{.
    cdecl, dynlib: lib, importc: "gdk_keymap_get_entries_for_keyval".}
proc get_entries_for_keycode*(keymap: PKeymap, hardware_keycode: guint, 
                                     s: var PKeymapKey, sasdf: var Pguint, 
                                     n_entries: Pgint): gboolean{.cdecl, 
    dynlib: lib, importc: "gdk_keymap_get_entries_for_keycode".}
proc get_direction*(keymap: PKeymap): TDirection{.cdecl, 
    dynlib: lib, importc: "gdk_keymap_get_direction".}
proc keyval_name*(keyval: guint): cstring{.cdecl, dynlib: lib, 
    importc: "gdk_keyval_name".}
proc keyval_from_name*(keyval_name: cstring): guint{.cdecl, dynlib: lib, 
    importc: "gdk_keyval_from_name".}
proc keyval_convert_case*(symbol: guint, lower: Pguint, upper: Pguint){.cdecl, 
    dynlib: lib, importc: "gdk_keyval_convert_case".}
proc keyval_to_upper*(keyval: guint): guint{.cdecl, dynlib: lib, 
    importc: "gdk_keyval_to_upper".}
proc keyval_to_lower*(keyval: guint): guint{.cdecl, dynlib: lib, 
    importc: "gdk_keyval_to_lower".}
proc keyval_is_upper*(keyval: guint): gboolean{.cdecl, dynlib: lib, 
    importc: "gdk_keyval_is_upper".}
proc keyval_is_lower*(keyval: guint): gboolean{.cdecl, dynlib: lib, 
    importc: "gdk_keyval_is_lower".}
proc keyval_to_unicode*(keyval: guint): guint32{.cdecl, dynlib: lib, 
    importc: "gdk_keyval_to_unicode".}
proc unicode_to_keyval*(wc: guint32): guint{.cdecl, dynlib: lib, 
    importc: "gdk_unicode_to_keyval".}
const 
  KEY_VoidSymbol* = 0x00FFFFFF
  KEY_BackSpace* = 0x0000FF08
  KEY_Tab* = 0x0000FF09
  KEY_Linefeed* = 0x0000FF0A
  KEY_Clear* = 0x0000FF0B
  KEY_Return* = 0x0000FF0D
  KEY_Pause* = 0x0000FF13
  KEY_Scroll_Lock* = 0x0000FF14
  KEY_Sys_Req* = 0x0000FF15
  KEY_Escape* = 0x0000FF1B
  KEY_Delete* = 0x0000FFFF
  KEY_Multi_key* = 0x0000FF20
  KEY_Codeinput* = 0x0000FF37
  KEY_SingleCandidate* = 0x0000FF3C
  KEY_MultipleCandidate* = 0x0000FF3D
  KEY_PreviousCandidate* = 0x0000FF3E
  KEY_Kanji* = 0x0000FF21
  KEY_Muhenkan* = 0x0000FF22
  KEY_Henkan_Mode* = 0x0000FF23
  KEY_Henkan* = 0x0000FF23
  KEY_Romaji* = 0x0000FF24
  KEY_Hiragana* = 0x0000FF25
  KEY_Katakana* = 0x0000FF26
  KEY_Hiragana_Katakana* = 0x0000FF27
  KEY_Zenkaku* = 0x0000FF28
  KEY_Hankaku* = 0x0000FF29
  KEY_Zenkaku_Hankaku* = 0x0000FF2A
  KEY_Touroku* = 0x0000FF2B
  KEY_Massyo* = 0x0000FF2C
  KEY_Kana_Lock* = 0x0000FF2D
  KEY_Kana_Shift* = 0x0000FF2E
  KEY_Eisu_Shift* = 0x0000FF2F
  KEY_Eisu_toggle* = 0x0000FF30
  KEY_Kanji_Bangou* = 0x0000FF37
  KEY_Zen_Koho* = 0x0000FF3D
  KEY_Mae_Koho* = 0x0000FF3E
  KEY_Home* = 0x0000FF50
  KEY_Left* = 0x0000FF51
  KEY_Up* = 0x0000FF52
  KEY_Right* = 0x0000FF53
  KEY_Down* = 0x0000FF54
  KEY_Prior* = 0x0000FF55
  KEY_Page_Up* = 0x0000FF55
  KEY_Next* = 0x0000FF56
  KEY_Page_Down* = 0x0000FF56
  KEY_End* = 0x0000FF57
  KEY_Begin* = 0x0000FF58
  KEY_Select* = 0x0000FF60
  KEY_Print* = 0x0000FF61
  KEY_Execute* = 0x0000FF62
  KEY_Insert* = 0x0000FF63
  KEY_Undo* = 0x0000FF65
  KEY_Redo* = 0x0000FF66
  KEY_Menu* = 0x0000FF67
  KEY_Find* = 0x0000FF68
  KEY_Cancel* = 0x0000FF69
  KEY_Help* = 0x0000FF6A
  KEY_Break* = 0x0000FF6B
  KEY_Mode_switch* = 0x0000FF7E
  KEY_script_switch* = 0x0000FF7E
  KEY_Num_Lock* = 0x0000FF7F
  KEY_KP_Space* = 0x0000FF80
  KEY_KP_Tab* = 0x0000FF89
  KEY_KP_Enter* = 0x0000FF8D
  KEY_KP_F1* = 0x0000FF91
  KEY_KP_F2* = 0x0000FF92
  KEY_KP_F3* = 0x0000FF93
  KEY_KP_F4* = 0x0000FF94
  KEY_KP_Home* = 0x0000FF95
  KEY_KP_Left* = 0x0000FF96
  KEY_KP_Up* = 0x0000FF97
  KEY_KP_Right* = 0x0000FF98
  KEY_KP_Down* = 0x0000FF99
  KEY_KP_Prior* = 0x0000FF9A
  KEY_KP_Page_Up* = 0x0000FF9A
  KEY_KP_Next* = 0x0000FF9B
  KEY_KP_Page_Down* = 0x0000FF9B
  KEY_KP_End* = 0x0000FF9C
  KEY_KP_Begin* = 0x0000FF9D
  KEY_KP_Insert* = 0x0000FF9E
  KEY_KP_Delete* = 0x0000FF9F
  KEY_KP_Equal* = 0x0000FFBD
  KEY_KP_Multiply* = 0x0000FFAA
  KEY_KP_Add* = 0x0000FFAB
  KEY_KP_Separator* = 0x0000FFAC
  KEY_KP_Subtract* = 0x0000FFAD
  KEY_KP_Decimal* = 0x0000FFAE
  KEY_KP_Divide* = 0x0000FFAF
  KEY_KP_0* = 0x0000FFB0
  KEY_KP_1* = 0x0000FFB1
  KEY_KP_2* = 0x0000FFB2
  KEY_KP_3* = 0x0000FFB3
  KEY_KP_4* = 0x0000FFB4
  KEY_KP_5* = 0x0000FFB5
  KEY_KP_6* = 0x0000FFB6
  KEY_KP_7* = 0x0000FFB7
  KEY_KP_8* = 0x0000FFB8
  KEY_KP_9* = 0x0000FFB9
  KEY_F1* = 0x0000FFBE
  KEY_F2* = 0x0000FFBF
  KEY_F3* = 0x0000FFC0
  KEY_F4* = 0x0000FFC1
  KEY_F5* = 0x0000FFC2
  KEY_F6* = 0x0000FFC3
  KEY_F7* = 0x0000FFC4
  KEY_F8* = 0x0000FFC5
  KEY_F9* = 0x0000FFC6
  KEY_F10* = 0x0000FFC7
  KEY_F11* = 0x0000FFC8
  KEY_L1* = 0x0000FFC8
  KEY_F12* = 0x0000FFC9
  KEY_L2* = 0x0000FFC9
  KEY_F13* = 0x0000FFCA
  KEY_L3* = 0x0000FFCA
  KEY_F14* = 0x0000FFCB
  KEY_L4* = 0x0000FFCB
  KEY_F15* = 0x0000FFCC
  KEY_L5* = 0x0000FFCC
  KEY_F16* = 0x0000FFCD
  KEY_L6* = 0x0000FFCD
  KEY_F17* = 0x0000FFCE
  KEY_L7* = 0x0000FFCE
  KEY_F18* = 0x0000FFCF
  KEY_L8* = 0x0000FFCF
  KEY_F19* = 0x0000FFD0
  KEY_L9* = 0x0000FFD0
  KEY_F20* = 0x0000FFD1
  KEY_L10* = 0x0000FFD1
  KEY_F21* = 0x0000FFD2
  KEY_R1* = 0x0000FFD2
  KEY_F22* = 0x0000FFD3
  KEY_R2* = 0x0000FFD3
  KEY_F23* = 0x0000FFD4
  KEY_R3* = 0x0000FFD4
  KEY_F24* = 0x0000FFD5
  KEY_R4* = 0x0000FFD5
  KEY_F25* = 0x0000FFD6
  KEY_R5* = 0x0000FFD6
  KEY_F26* = 0x0000FFD7
  KEY_R6* = 0x0000FFD7
  KEY_F27* = 0x0000FFD8
  KEY_R7* = 0x0000FFD8
  KEY_F28* = 0x0000FFD9
  KEY_R8* = 0x0000FFD9
  KEY_F29* = 0x0000FFDA
  KEY_R9* = 0x0000FFDA
  KEY_F30* = 0x0000FFDB
  KEY_R10* = 0x0000FFDB
  KEY_F31* = 0x0000FFDC
  KEY_R11* = 0x0000FFDC
  KEY_F32* = 0x0000FFDD
  KEY_R12* = 0x0000FFDD
  KEY_F33* = 0x0000FFDE
  KEY_R13* = 0x0000FFDE
  KEY_F34* = 0x0000FFDF
  KEY_R14* = 0x0000FFDF
  KEY_F35* = 0x0000FFE0
  KEY_R15* = 0x0000FFE0
  KEY_Shift_L* = 0x0000FFE1
  KEY_Shift_R* = 0x0000FFE2
  KEY_Control_L* = 0x0000FFE3
  KEY_Control_R* = 0x0000FFE4
  KEY_Caps_Lock* = 0x0000FFE5
  KEY_Shift_Lock* = 0x0000FFE6
  KEY_Meta_L* = 0x0000FFE7
  KEY_Meta_R* = 0x0000FFE8
  KEY_Alt_L* = 0x0000FFE9
  KEY_Alt_R* = 0x0000FFEA
  KEY_Super_L* = 0x0000FFEB
  KEY_Super_R* = 0x0000FFEC
  KEY_Hyper_L* = 0x0000FFED
  KEY_Hyper_R* = 0x0000FFEE
  KEY_ISO_Lock* = 0x0000FE01
  KEY_ISO_Level2_Latch* = 0x0000FE02
  KEY_ISO_Level3_Shift* = 0x0000FE03
  KEY_ISO_Level3_Latch* = 0x0000FE04
  KEY_ISO_Level3_Lock* = 0x0000FE05
  KEY_ISO_Group_Shift* = 0x0000FF7E
  KEY_ISO_Group_Latch* = 0x0000FE06
  KEY_ISO_Group_Lock* = 0x0000FE07
  KEY_ISO_Next_Group* = 0x0000FE08
  KEY_ISO_Next_Group_Lock* = 0x0000FE09
  KEY_ISO_Prev_Group* = 0x0000FE0A
  KEY_ISO_Prev_Group_Lock* = 0x0000FE0B
  KEY_ISO_First_Group* = 0x0000FE0C
  KEY_ISO_First_Group_Lock* = 0x0000FE0D
  KEY_ISO_Last_Group* = 0x0000FE0E
  KEY_ISO_Last_Group_Lock* = 0x0000FE0F
  KEY_ISO_Left_Tab* = 0x0000FE20
  KEY_ISO_Move_Line_Up* = 0x0000FE21
  KEY_ISO_Move_Line_Down* = 0x0000FE22
  KEY_ISO_Partial_Line_Up* = 0x0000FE23
  KEY_ISO_Partial_Line_Down* = 0x0000FE24
  KEY_ISO_Partial_Space_Left* = 0x0000FE25
  KEY_ISO_Partial_Space_Right* = 0x0000FE26
  KEY_ISO_Set_Margin_Left* = 0x0000FE27
  KEY_ISO_Set_Margin_Right* = 0x0000FE28
  KEY_ISO_Release_Margin_Left* = 0x0000FE29
  KEY_ISO_Release_Margin_Right* = 0x0000FE2A
  KEY_ISO_Release_Both_Margins* = 0x0000FE2B
  KEY_ISO_Fast_Cursor_Left* = 0x0000FE2C
  KEY_ISO_Fast_Cursor_Right* = 0x0000FE2D
  KEY_ISO_Fast_Cursor_Up* = 0x0000FE2E
  KEY_ISO_Fast_Cursor_Down* = 0x0000FE2F
  KEY_ISO_Continuous_Underline* = 0x0000FE30
  KEY_ISO_Discontinuous_Underline* = 0x0000FE31
  KEY_ISO_Emphasize* = 0x0000FE32
  KEY_ISO_Center_Object* = 0x0000FE33
  KEY_ISO_Enter* = 0x0000FE34
  KEY_dead_grave* = 0x0000FE50
  KEY_dead_acute* = 0x0000FE51
  KEY_dead_circumflex* = 0x0000FE52
  KEY_dead_tilde* = 0x0000FE53
  KEY_dead_macron* = 0x0000FE54
  KEY_dead_breve* = 0x0000FE55
  KEY_dead_abovedot* = 0x0000FE56
  KEY_dead_diaeresis* = 0x0000FE57
  KEY_dead_abovering* = 0x0000FE58
  KEY_dead_doubleacute* = 0x0000FE59
  KEY_dead_caron* = 0x0000FE5A
  KEY_dead_cedilla* = 0x0000FE5B
  KEY_dead_ogonek* = 0x0000FE5C
  KEY_dead_iota* = 0x0000FE5D
  KEY_dead_voiced_sound* = 0x0000FE5E
  KEY_dead_semivoiced_sound* = 0x0000FE5F
  KEY_dead_belowdot* = 0x0000FE60
  KEY_First_Virtual_Screen* = 0x0000FED0
  KEY_Prev_Virtual_Screen* = 0x0000FED1
  KEY_Next_Virtual_Screen* = 0x0000FED2
  KEY_Last_Virtual_Screen* = 0x0000FED4
  KEY_Terminate_Server* = 0x0000FED5
  KEY_AccessX_Enable* = 0x0000FE70
  KEY_AccessX_Feedback_Enable* = 0x0000FE71
  KEY_RepeatKeys_Enable* = 0x0000FE72
  KEY_SlowKeys_Enable* = 0x0000FE73
  KEY_BounceKeys_Enable* = 0x0000FE74
  KEY_StickyKeys_Enable* = 0x0000FE75
  KEY_MouseKeys_Enable* = 0x0000FE76
  KEY_MouseKeys_Accel_Enable* = 0x0000FE77
  KEY_Overlay1_Enable* = 0x0000FE78
  KEY_Overlay2_Enable* = 0x0000FE79
  KEY_AudibleBell_Enable* = 0x0000FE7A
  KEY_Pointer_Left* = 0x0000FEE0
  KEY_Pointer_Right* = 0x0000FEE1
  KEY_Pointer_Up* = 0x0000FEE2
  KEY_Pointer_Down* = 0x0000FEE3
  KEY_Pointer_UpLeft* = 0x0000FEE4
  KEY_Pointer_UpRight* = 0x0000FEE5
  KEY_Pointer_DownLeft* = 0x0000FEE6
  KEY_Pointer_DownRight* = 0x0000FEE7
  KEY_Pointer_Button_Dflt* = 0x0000FEE8
  KEY_Pointer_Button1* = 0x0000FEE9
  KEY_Pointer_Button2* = 0x0000FEEA
  KEY_Pointer_Button3* = 0x0000FEEB
  KEY_Pointer_Button4* = 0x0000FEEC
  KEY_Pointer_Button5* = 0x0000FEED
  KEY_Pointer_DblClick_Dflt* = 0x0000FEEE
  KEY_Pointer_DblClick1* = 0x0000FEEF
  KEY_Pointer_DblClick2* = 0x0000FEF0
  KEY_Pointer_DblClick3* = 0x0000FEF1
  KEY_Pointer_DblClick4* = 0x0000FEF2
  KEY_Pointer_DblClick5* = 0x0000FEF3
  KEY_Pointer_Drag_Dflt* = 0x0000FEF4
  KEY_Pointer_Drag1* = 0x0000FEF5
  KEY_Pointer_Drag2* = 0x0000FEF6
  KEY_Pointer_Drag3* = 0x0000FEF7
  KEY_Pointer_Drag4* = 0x0000FEF8
  KEY_Pointer_Drag5* = 0x0000FEFD
  KEY_Pointer_EnableKeys* = 0x0000FEF9
  KEY_Pointer_Accelerate* = 0x0000FEFA
  KEY_Pointer_DfltBtnNext* = 0x0000FEFB
  KEY_Pointer_DfltBtnPrev* = 0x0000FEFC
  KEY_3270_Duplicate* = 0x0000FD01
  KEY_3270_FieldMark* = 0x0000FD02
  KEY_3270_Right2* = 0x0000FD03
  KEY_3270_Left2* = 0x0000FD04
  KEY_3270_BackTab* = 0x0000FD05
  KEY_3270_EraseEOF* = 0x0000FD06
  KEY_3270_EraseInput* = 0x0000FD07
  KEY_3270_Reset* = 0x0000FD08
  KEY_3270_Quit* = 0x0000FD09
  KEY_3270_PA1* = 0x0000FD0A
  KEY_3270_PA2* = 0x0000FD0B
  KEY_3270_PA3* = 0x0000FD0C
  KEY_3270_Test* = 0x0000FD0D
  KEY_3270_Attn* = 0x0000FD0E
  KEY_3270_CursorBlink* = 0x0000FD0F
  KEY_3270_AltCursor* = 0x0000FD10
  KEY_3270_KeyClick* = 0x0000FD11
  KEY_3270_Jump* = 0x0000FD12
  KEY_3270_Ident* = 0x0000FD13
  KEY_3270_Rule* = 0x0000FD14
  KEY_3270_Copy* = 0x0000FD15
  KEY_3270_Play* = 0x0000FD16
  KEY_3270_Setup* = 0x0000FD17
  KEY_3270_Record* = 0x0000FD18
  KEY_3270_ChangeScreen* = 0x0000FD19
  KEY_3270_DeleteWord* = 0x0000FD1A
  KEY_3270_ExSelect* = 0x0000FD1B
  KEY_3270_CursorSelect* = 0x0000FD1C
  KEY_3270_PrintScreen* = 0x0000FD1D
  KEY_3270_Enter* = 0x0000FD1E
  KEY_space* = 0x00000020
  KEY_exclam* = 0x00000021
  KEY_quotedbl* = 0x00000022
  KEY_numbersign* = 0x00000023
  KEY_dollar* = 0x00000024
  KEY_percent* = 0x00000025
  KEY_ampersand* = 0x00000026
  KEY_apostrophe* = 0x00000027
  KEY_quoteright* = 0x00000027
  KEY_parenleft* = 0x00000028
  KEY_parenright* = 0x00000029
  KEY_asterisk* = 0x0000002A
  KEY_plus* = 0x0000002B
  KEY_comma* = 0x0000002C
  KEY_minus* = 0x0000002D
  KEY_period* = 0x0000002E
  KEY_slash* = 0x0000002F
  KEY_0* = 0x00000030
  KEY_1* = 0x00000031
  KEY_2* = 0x00000032
  KEY_3* = 0x00000033
  KEY_4* = 0x00000034
  KEY_5* = 0x00000035
  KEY_6* = 0x00000036
  KEY_7* = 0x00000037
  KEY_8* = 0x00000038
  KEY_9* = 0x00000039
  KEY_colon* = 0x0000003A
  KEY_semicolon* = 0x0000003B
  KEY_less* = 0x0000003C
  KEY_equal* = 0x0000003D
  KEY_greater* = 0x0000003E
  KEY_question* = 0x0000003F
  KEY_at* = 0x00000040
  KEY_CAPITAL_A* = 0x00000041
  KEY_CAPITAL_B* = 0x00000042
  KEY_CAPITAL_C* = 0x00000043
  KEY_CAPITAL_D* = 0x00000044
  KEY_CAPITAL_E* = 0x00000045
  KEY_CAPITAL_F* = 0x00000046
  KEY_CAPITAL_G* = 0x00000047
  KEY_CAPITAL_H* = 0x00000048
  KEY_CAPITAL_I* = 0x00000049
  KEY_CAPITAL_J* = 0x0000004A
  KEY_CAPITAL_K* = 0x0000004B
  KEY_CAPITAL_L* = 0x0000004C
  KEY_CAPITAL_M* = 0x0000004D
  KEY_CAPITAL_N* = 0x0000004E
  KEY_CAPITAL_O* = 0x0000004F
  KEY_CAPITAL_P* = 0x00000050
  KEY_CAPITAL_Q* = 0x00000051
  KEY_CAPITAL_R* = 0x00000052
  KEY_CAPITAL_S* = 0x00000053
  KEY_CAPITAL_T* = 0x00000054
  KEY_CAPITAL_U* = 0x00000055
  KEY_CAPITAL_V* = 0x00000056
  KEY_CAPITAL_W* = 0x00000057
  KEY_CAPITAL_X* = 0x00000058
  KEY_CAPITAL_Y* = 0x00000059
  KEY_CAPITAL_Z* = 0x0000005A
  KEY_bracketleft* = 0x0000005B
  KEY_backslash* = 0x0000005C
  KEY_bracketright* = 0x0000005D
  KEY_asciicircum* = 0x0000005E
  KEY_underscore* = 0x0000005F
  KEY_grave* = 0x00000060
  KEY_quoteleft* = 0x00000060
  KEY_a* = 0x00000061
  KEY_b* = 0x00000062
  KEY_c* = 0x00000063
  KEY_d* = 0x00000064
  KEY_e* = 0x00000065
  KEY_f* = 0x00000066
  KEY_g* = 0x00000067
  KEY_h* = 0x00000068
  KEY_i* = 0x00000069
  KEY_j* = 0x0000006A
  KEY_k* = 0x0000006B
  KEY_l* = 0x0000006C
  KEY_m* = 0x0000006D
  KEY_n* = 0x0000006E
  KEY_o* = 0x0000006F
  KEY_p* = 0x00000070
  KEY_q* = 0x00000071
  KEY_r* = 0x00000072
  KEY_s* = 0x00000073
  KEY_t* = 0x00000074
  KEY_u* = 0x00000075
  KEY_v* = 0x00000076
  KEY_w* = 0x00000077
  KEY_x* = 0x00000078
  KEY_y* = 0x00000079
  KEY_z* = 0x0000007A
  KEY_braceleft* = 0x0000007B
  KEY_bar* = 0x0000007C
  KEY_braceright* = 0x0000007D
  KEY_asciitilde* = 0x0000007E
  KEY_nobreakspace* = 0x000000A0
  KEY_exclamdown* = 0x000000A1
  KEY_cent* = 0x000000A2
  KEY_sterling* = 0x000000A3
  KEY_currency* = 0x000000A4
  KEY_yen* = 0x000000A5
  KEY_brokenbar* = 0x000000A6
  KEY_section* = 0x000000A7
  KEY_diaeresis* = 0x000000A8
  KEY_copyright* = 0x000000A9
  KEY_ordfeminine* = 0x000000AA
  KEY_guillemotleft* = 0x000000AB
  KEY_notsign* = 0x000000AC
  KEY_hyphen* = 0x000000AD
  KEY_registered* = 0x000000AE
  KEY_macron* = 0x000000AF
  KEY_degree* = 0x000000B0
  KEY_plusminus* = 0x000000B1
  KEY_twosuperior* = 0x000000B2
  KEY_threesuperior* = 0x000000B3
  KEY_acute* = 0x000000B4
  KEY_mu* = 0x000000B5
  KEY_paragraph* = 0x000000B6
  KEY_periodcentered* = 0x000000B7
  KEY_cedilla* = 0x000000B8
  KEY_onesuperior* = 0x000000B9
  KEY_masculine* = 0x000000BA
  KEY_guillemotright* = 0x000000BB
  KEY_onequarter* = 0x000000BC
  KEY_onehalf* = 0x000000BD
  KEY_threequarters* = 0x000000BE
  KEY_questiondown* = 0x000000BF
  KEY_CAPITAL_Agrave* = 0x000000C0
  KEY_CAPITAL_Aacute* = 0x000000C1
  KEY_CAPITAL_Acircumflex* = 0x000000C2
  KEY_CAPITAL_Atilde* = 0x000000C3
  KEY_CAPITAL_Adiaeresis* = 0x000000C4
  KEY_CAPITAL_Aring* = 0x000000C5
  KEY_CAPITAL_AE* = 0x000000C6
  KEY_CAPITAL_Ccedilla* = 0x000000C7
  KEY_CAPITAL_Egrave* = 0x000000C8
  KEY_CAPITAL_Eacute* = 0x000000C9
  KEY_CAPITAL_Ecircumflex* = 0x000000CA
  KEY_CAPITAL_Ediaeresis* = 0x000000CB
  KEY_CAPITAL_Igrave* = 0x000000CC
  KEY_CAPITAL_Iacute* = 0x000000CD
  KEY_CAPITAL_Icircumflex* = 0x000000CE
  KEY_CAPITAL_Idiaeresis* = 0x000000CF
  KEY_CAPITAL_ETH* = 0x000000D0
  KEY_CAPITAL_Ntilde* = 0x000000D1
  KEY_CAPITAL_Ograve* = 0x000000D2
  KEY_CAPITAL_Oacute* = 0x000000D3
  KEY_CAPITAL_Ocircumflex* = 0x000000D4
  KEY_CAPITAL_Otilde* = 0x000000D5
  KEY_CAPITAL_Odiaeresis* = 0x000000D6
  KEY_multiply* = 0x000000D7
  KEY_Ooblique* = 0x000000D8
  KEY_CAPITAL_Ugrave* = 0x000000D9
  KEY_CAPITAL_Uacute* = 0x000000DA
  KEY_CAPITAL_Ucircumflex* = 0x000000DB
  KEY_CAPITAL_Udiaeresis* = 0x000000DC
  KEY_CAPITAL_Yacute* = 0x000000DD
  KEY_CAPITAL_THORN* = 0x000000DE
  KEY_ssharp* = 0x000000DF
  KEY_agrave* = 0x000000E0
  KEY_aacute* = 0x000000E1
  KEY_acircumflex* = 0x000000E2
  KEY_atilde* = 0x000000E3
  KEY_adiaeresis* = 0x000000E4
  KEY_aring* = 0x000000E5
  KEY_ae* = 0x000000E6
  KEY_ccedilla* = 0x000000E7
  KEY_egrave* = 0x000000E8
  KEY_eacute* = 0x000000E9
  KEY_ecircumflex* = 0x000000EA
  KEY_ediaeresis* = 0x000000EB
  KEY_igrave* = 0x000000EC
  KEY_iacute* = 0x000000ED
  KEY_icircumflex* = 0x000000EE
  KEY_idiaeresis* = 0x000000EF
  KEY_eth* = 0x000000F0
  KEY_ntilde* = 0x000000F1
  KEY_ograve* = 0x000000F2
  KEY_oacute* = 0x000000F3
  KEY_ocircumflex* = 0x000000F4
  KEY_otilde* = 0x000000F5
  KEY_odiaeresis* = 0x000000F6
  KEY_division* = 0x000000F7
  KEY_oslash* = 0x000000F8
  KEY_ugrave* = 0x000000F9
  KEY_uacute* = 0x000000FA
  KEY_ucircumflex* = 0x000000FB
  KEY_udiaeresis* = 0x000000FC
  KEY_yacute* = 0x000000FD
  KEY_thorn* = 0x000000FE
  KEY_ydiaeresis* = 0x000000FF
  KEY_CAPITAL_Aogonek* = 0x000001A1
  KEY_breve* = 0x000001A2
  KEY_CAPITAL_Lstroke* = 0x000001A3
  KEY_CAPITAL_Lcaron* = 0x000001A5
  KEY_CAPITAL_Sacute* = 0x000001A6
  KEY_CAPITAL_Scaron* = 0x000001A9
  KEY_CAPITAL_Scedilla* = 0x000001AA
  KEY_CAPITAL_Tcaron* = 0x000001AB
  KEY_CAPITAL_Zacute* = 0x000001AC
  KEY_CAPITAL_Zcaron* = 0x000001AE
  KEY_CAPITAL_Zabovedot* = 0x000001AF
  KEY_aogonek* = 0x000001B1
  KEY_ogonek* = 0x000001B2
  KEY_lstroke* = 0x000001B3
  KEY_lcaron* = 0x000001B5
  KEY_sacute* = 0x000001B6
  KEY_caron* = 0x000001B7
  KEY_scaron* = 0x000001B9
  KEY_scedilla* = 0x000001BA
  KEY_tcaron* = 0x000001BB
  KEY_zacute* = 0x000001BC
  KEY_doubleacute* = 0x000001BD
  KEY_zcaron* = 0x000001BE
  KEY_zabovedot* = 0x000001BF
  KEY_CAPITAL_Racute* = 0x000001C0
  KEY_CAPITAL_Abreve* = 0x000001C3
  KEY_CAPITAL_Lacute* = 0x000001C5
  KEY_CAPITAL_Cacute* = 0x000001C6
  KEY_CAPITAL_Ccaron* = 0x000001C8
  KEY_CAPITAL_Eogonek* = 0x000001CA
  KEY_CAPITAL_Ecaron* = 0x000001CC
  KEY_CAPITAL_Dcaron* = 0x000001CF
  KEY_CAPITAL_Dstroke* = 0x000001D0
  KEY_CAPITAL_Nacute* = 0x000001D1
  KEY_CAPITAL_Ncaron* = 0x000001D2
  KEY_CAPITAL_Odoubleacute* = 0x000001D5
  KEY_CAPITAL_Rcaron* = 0x000001D8
  KEY_CAPITAL_Uring* = 0x000001D9
  KEY_CAPITAL_Udoubleacute* = 0x000001DB
  KEY_CAPITAL_Tcedilla* = 0x000001DE
  KEY_racute* = 0x000001E0
  KEY_abreve* = 0x000001E3
  KEY_lacute* = 0x000001E5
  KEY_cacute* = 0x000001E6
  KEY_ccaron* = 0x000001E8
  KEY_eogonek* = 0x000001EA
  KEY_ecaron* = 0x000001EC
  KEY_dcaron* = 0x000001EF
  KEY_dstroke* = 0x000001F0
  KEY_nacute* = 0x000001F1
  KEY_ncaron* = 0x000001F2
  KEY_odoubleacute* = 0x000001F5
  KEY_udoubleacute* = 0x000001FB
  KEY_rcaron* = 0x000001F8
  KEY_uring* = 0x000001F9
  KEY_tcedilla* = 0x000001FE
  KEY_abovedot* = 0x000001FF
  KEY_CAPITAL_Hstroke* = 0x000002A1
  KEY_CAPITAL_Hcircumflex* = 0x000002A6
  KEY_CAPITAL_Iabovedot* = 0x000002A9
  KEY_CAPITAL_Gbreve* = 0x000002AB
  KEY_CAPITAL_Jcircumflex* = 0x000002AC
  KEY_hstroke* = 0x000002B1
  KEY_hcircumflex* = 0x000002B6
  KEY_idotless* = 0x000002B9
  KEY_gbreve* = 0x000002BB
  KEY_jcircumflex* = 0x000002BC
  KEY_CAPITAL_Cabovedot* = 0x000002C5
  KEY_CAPITAL_Ccircumflex* = 0x000002C6
  KEY_CAPITAL_Gabovedot* = 0x000002D5
  KEY_CAPITAL_Gcircumflex* = 0x000002D8
  KEY_CAPITAL_Ubreve* = 0x000002DD
  KEY_CAPITAL_Scircumflex* = 0x000002DE
  KEY_cabovedot* = 0x000002E5
  KEY_ccircumflex* = 0x000002E6
  KEY_gabovedot* = 0x000002F5
  KEY_gcircumflex* = 0x000002F8
  KEY_ubreve* = 0x000002FD
  KEY_scircumflex* = 0x000002FE
  KEY_kra* = 0x000003A2
  KEY_kappa* = 0x000003A2
  KEY_CAPITAL_Rcedilla* = 0x000003A3
  KEY_CAPITAL_Itilde* = 0x000003A5
  KEY_CAPITAL_Lcedilla* = 0x000003A6
  KEY_CAPITAL_Emacron* = 0x000003AA
  KEY_CAPITAL_Gcedilla* = 0x000003AB
  KEY_CAPITAL_Tslash* = 0x000003AC
  KEY_rcedilla* = 0x000003B3
  KEY_itilde* = 0x000003B5
  KEY_lcedilla* = 0x000003B6
  KEY_emacron* = 0x000003BA
  KEY_gcedilla* = 0x000003BB
  KEY_tslash* = 0x000003BC
  KEY_CAPITAL_ENG* = 0x000003BD
  KEY_eng* = 0x000003BF
  KEY_CAPITAL_Amacron* = 0x000003C0
  KEY_CAPITAL_Iogonek* = 0x000003C7
  KEY_CAPITAL_Eabovedot* = 0x000003CC
  KEY_CAPITAL_Imacron* = 0x000003CF
  KEY_CAPITAL_Ncedilla* = 0x000003D1
  KEY_CAPITAL_Omacron* = 0x000003D2
  KEY_CAPITAL_Kcedilla* = 0x000003D3
  KEY_CAPITAL_Uogonek* = 0x000003D9
  KEY_CAPITAL_Utilde* = 0x000003DD
  KEY_CAPITAL_Umacron* = 0x000003DE
  KEY_amacron* = 0x000003E0
  KEY_iogonek* = 0x000003E7
  KEY_eabovedot* = 0x000003EC
  KEY_imacron* = 0x000003EF
  KEY_ncedilla* = 0x000003F1
  KEY_omacron* = 0x000003F2
  KEY_kcedilla* = 0x000003F3
  KEY_uogonek* = 0x000003F9
  KEY_utilde* = 0x000003FD
  KEY_umacron* = 0x000003FE
  KEY_CAPITAL_OE* = 0x000013BC
  KEY_oe* = 0x000013BD
  KEY_CAPITAL_Ydiaeresis* = 0x000013BE
  KEY_overline* = 0x0000047E
  KEY_kana_fullstop* = 0x000004A1
  KEY_kana_openingbracket* = 0x000004A2
  KEY_kana_closingbracket* = 0x000004A3
  KEY_kana_comma* = 0x000004A4
  KEY_kana_conjunctive* = 0x000004A5
  KEY_kana_middledot* = 0x000004A5
  KEY_kana_WO* = 0x000004A6
  KEY_kana_a* = 0x000004A7
  KEY_kana_i* = 0x000004A8
  KEY_kana_u* = 0x000004A9
  KEY_kana_e* = 0x000004AA
  KEY_kana_o* = 0x000004AB
  KEY_kana_ya* = 0x000004AC
  KEY_kana_yu* = 0x000004AD
  KEY_kana_yo* = 0x000004AE
  KEY_kana_tsu* = 0x000004AF
  KEY_kana_tu* = 0x000004AF
  KEY_prolongedsound* = 0x000004B0
  KEY_kana_CAPITAL_A* = 0x000004B1
  KEY_kana_CAPITAL_I* = 0x000004B2
  KEY_kana_CAPITAL_U* = 0x000004B3
  KEY_kana_CAPITAL_E* = 0x000004B4
  KEY_kana_CAPITAL_O* = 0x000004B5
  KEY_kana_KA* = 0x000004B6
  KEY_kana_KI* = 0x000004B7
  KEY_kana_KU* = 0x000004B8
  KEY_kana_KE* = 0x000004B9
  KEY_kana_KO* = 0x000004BA
  KEY_kana_SA* = 0x000004BB
  KEY_kana_SHI* = 0x000004BC
  KEY_kana_SU* = 0x000004BD
  KEY_kana_SE* = 0x000004BE
  KEY_kana_SO* = 0x000004BF
  KEY_kana_TA* = 0x000004C0
  KEY_kana_CHI* = 0x000004C1
  KEY_kana_TI* = 0x000004C1
  KEY_kana_CAPITAL_TSU* = 0x000004C2
  KEY_kana_CAPITAL_TU* = 0x000004C2
  KEY_kana_TE* = 0x000004C3
  KEY_kana_TO* = 0x000004C4
  KEY_kana_NA* = 0x000004C5
  KEY_kana_NI* = 0x000004C6
  KEY_kana_NU* = 0x000004C7
  KEY_kana_NE* = 0x000004C8
  KEY_kana_NO* = 0x000004C9
  KEY_kana_HA* = 0x000004CA
  KEY_kana_HI* = 0x000004CB
  KEY_kana_FU* = 0x000004CC
  KEY_kana_HU* = 0x000004CC
  KEY_kana_HE* = 0x000004CD
  KEY_kana_HO* = 0x000004CE
  KEY_kana_MA* = 0x000004CF
  KEY_kana_MI* = 0x000004D0
  KEY_kana_MU* = 0x000004D1
  KEY_kana_ME* = 0x000004D2
  KEY_kana_MO* = 0x000004D3
  KEY_kana_CAPITAL_YA* = 0x000004D4
  KEY_kana_CAPITAL_YU* = 0x000004D5
  KEY_kana_CAPITAL_YO* = 0x000004D6
  KEY_kana_RA* = 0x000004D7
  KEY_kana_RI* = 0x000004D8
  KEY_kana_RU* = 0x000004D9
  KEY_kana_RE* = 0x000004DA
  KEY_kana_RO* = 0x000004DB
  KEY_kana_WA* = 0x000004DC
  KEY_kana_N* = 0x000004DD
  KEY_voicedsound* = 0x000004DE
  KEY_semivoicedsound* = 0x000004DF
  KEY_kana_switch* = 0x0000FF7E
  KEY_Arabic_comma* = 0x000005AC
  KEY_Arabic_semicolon* = 0x000005BB
  KEY_Arabic_question_mark* = 0x000005BF
  KEY_Arabic_hamza* = 0x000005C1
  KEY_Arabic_maddaonalef* = 0x000005C2
  KEY_Arabic_hamzaonalef* = 0x000005C3
  KEY_Arabic_hamzaonwaw* = 0x000005C4
  KEY_Arabic_hamzaunderalef* = 0x000005C5
  KEY_Arabic_hamzaonyeh* = 0x000005C6
  KEY_Arabic_alef* = 0x000005C7
  KEY_Arabic_beh* = 0x000005C8
  KEY_Arabic_tehmarbuta* = 0x000005C9
  KEY_Arabic_teh* = 0x000005CA
  KEY_Arabic_theh* = 0x000005CB
  KEY_Arabic_jeem* = 0x000005CC
  KEY_Arabic_hah* = 0x000005CD
  KEY_Arabic_khah* = 0x000005CE
  KEY_Arabic_dal* = 0x000005CF
  KEY_Arabic_thal* = 0x000005D0
  KEY_Arabic_ra* = 0x000005D1
  KEY_Arabic_zain* = 0x000005D2
  KEY_Arabic_seen* = 0x000005D3
  KEY_Arabic_sheen* = 0x000005D4
  KEY_Arabic_sad* = 0x000005D5
  KEY_Arabic_dad* = 0x000005D6
  KEY_Arabic_tah* = 0x000005D7
  KEY_Arabic_zah* = 0x000005D8
  KEY_Arabic_ain* = 0x000005D9
  KEY_Arabic_ghain* = 0x000005DA
  KEY_Arabic_tatweel* = 0x000005E0
  KEY_Arabic_feh* = 0x000005E1
  KEY_Arabic_qaf* = 0x000005E2
  KEY_Arabic_kaf* = 0x000005E3
  KEY_Arabic_lam* = 0x000005E4
  KEY_Arabic_meem* = 0x000005E5
  KEY_Arabic_noon* = 0x000005E6
  KEY_Arabic_ha* = 0x000005E7
  KEY_Arabic_heh* = 0x000005E7
  KEY_Arabic_waw* = 0x000005E8
  KEY_Arabic_alefmaksura* = 0x000005E9
  KEY_Arabic_yeh* = 0x000005EA
  KEY_Arabic_fathatan* = 0x000005EB
  KEY_Arabic_dammatan* = 0x000005EC
  KEY_Arabic_kasratan* = 0x000005ED
  KEY_Arabic_fatha* = 0x000005EE
  KEY_Arabic_damma* = 0x000005EF
  KEY_Arabic_kasra* = 0x000005F0
  KEY_Arabic_shadda* = 0x000005F1
  KEY_Arabic_sukun* = 0x000005F2
  KEY_Arabic_switch* = 0x0000FF7E
  KEY_Serbian_dje* = 0x000006A1
  KEY_Macedonia_gje* = 0x000006A2
  KEY_Cyrillic_io* = 0x000006A3
  KEY_Ukrainian_ie* = 0x000006A4
  KEY_Ukranian_je* = 0x000006A4
  KEY_Macedonia_dse* = 0x000006A5
  KEY_Ukrainian_i* = 0x000006A6
  KEY_Ukranian_i* = 0x000006A6
  KEY_Ukrainian_yi* = 0x000006A7
  KEY_Ukranian_yi* = 0x000006A7
  KEY_Cyrillic_je* = 0x000006A8
  KEY_Serbian_je* = 0x000006A8
  KEY_Cyrillic_lje* = 0x000006A9
  KEY_Serbian_lje* = 0x000006A9
  KEY_Cyrillic_nje* = 0x000006AA
  KEY_Serbian_nje* = 0x000006AA
  KEY_Serbian_tshe* = 0x000006AB
  KEY_Macedonia_kje* = 0x000006AC
  KEY_Byelorussian_shortu* = 0x000006AE
  KEY_Cyrillic_dzhe* = 0x000006AF
  KEY_Serbian_dze* = 0x000006AF
  KEY_numerosign* = 0x000006B0
  KEY_Serbian_CAPITAL_DJE* = 0x000006B1
  KEY_Macedonia_CAPITAL_GJE* = 0x000006B2
  KEY_Cyrillic_CAPITAL_IO* = 0x000006B3
  KEY_Ukrainian_CAPITAL_IE* = 0x000006B4
  KEY_Ukranian_CAPITAL_JE* = 0x000006B4
  KEY_Macedonia_CAPITAL_DSE* = 0x000006B5
  KEY_Ukrainian_CAPITAL_I* = 0x000006B6
  KEY_Ukranian_CAPITAL_I* = 0x000006B6
  KEY_Ukrainian_CAPITAL_YI* = 0x000006B7
  KEY_Ukranian_CAPITAL_YI* = 0x000006B7
  KEY_Cyrillic_CAPITAL_JE* = 0x000006B8
  KEY_Serbian_CAPITAL_JE* = 0x000006B8
  KEY_Cyrillic_CAPITAL_LJE* = 0x000006B9
  KEY_Serbian_CAPITAL_LJE* = 0x000006B9
  KEY_Cyrillic_CAPITAL_NJE* = 0x000006BA
  KEY_Serbian_CAPITAL_NJE* = 0x000006BA
  KEY_Serbian_CAPITAL_TSHE* = 0x000006BB
  KEY_Macedonia_CAPITAL_KJE* = 0x000006BC
  KEY_Byelorussian_CAPITAL_SHORTU* = 0x000006BE
  KEY_Cyrillic_CAPITAL_DZHE* = 0x000006BF
  KEY_Serbian_CAPITAL_DZE* = 0x000006BF
  KEY_Cyrillic_yu* = 0x000006C0
  KEY_Cyrillic_a* = 0x000006C1
  KEY_Cyrillic_be* = 0x000006C2
  KEY_Cyrillic_tse* = 0x000006C3
  KEY_Cyrillic_de* = 0x000006C4
  KEY_Cyrillic_ie* = 0x000006C5
  KEY_Cyrillic_ef* = 0x000006C6
  KEY_Cyrillic_ghe* = 0x000006C7
  KEY_Cyrillic_ha* = 0x000006C8
  KEY_Cyrillic_i* = 0x000006C9
  KEY_Cyrillic_shorti* = 0x000006CA
  KEY_Cyrillic_ka* = 0x000006CB
  KEY_Cyrillic_el* = 0x000006CC
  KEY_Cyrillic_em* = 0x000006CD
  KEY_Cyrillic_en* = 0x000006CE
  KEY_Cyrillic_o* = 0x000006CF
  KEY_Cyrillic_pe* = 0x000006D0
  KEY_Cyrillic_ya* = 0x000006D1
  KEY_Cyrillic_er* = 0x000006D2
  KEY_Cyrillic_es* = 0x000006D3
  KEY_Cyrillic_te* = 0x000006D4
  KEY_Cyrillic_u* = 0x000006D5
  KEY_Cyrillic_zhe* = 0x000006D6
  KEY_Cyrillic_ve* = 0x000006D7
  KEY_Cyrillic_softsign* = 0x000006D8
  KEY_Cyrillic_yeru* = 0x000006D9
  KEY_Cyrillic_ze* = 0x000006DA
  KEY_Cyrillic_sha* = 0x000006DB
  KEY_Cyrillic_e* = 0x000006DC
  KEY_Cyrillic_shcha* = 0x000006DD
  KEY_Cyrillic_che* = 0x000006DE
  KEY_Cyrillic_hardsign* = 0x000006DF
  KEY_Cyrillic_CAPITAL_YU* = 0x000006E0
  KEY_Cyrillic_CAPITAL_A* = 0x000006E1
  KEY_Cyrillic_CAPITAL_BE* = 0x000006E2
  KEY_Cyrillic_CAPITAL_TSE* = 0x000006E3
  KEY_Cyrillic_CAPITAL_DE* = 0x000006E4
  KEY_Cyrillic_CAPITAL_IE* = 0x000006E5
  KEY_Cyrillic_CAPITAL_EF* = 0x000006E6
  KEY_Cyrillic_CAPITAL_GHE* = 0x000006E7
  KEY_Cyrillic_CAPITAL_HA* = 0x000006E8
  KEY_Cyrillic_CAPITAL_I* = 0x000006E9
  KEY_Cyrillic_CAPITAL_SHORTI* = 0x000006EA
  KEY_Cyrillic_CAPITAL_KA* = 0x000006EB
  KEY_Cyrillic_CAPITAL_EL* = 0x000006EC
  KEY_Cyrillic_CAPITAL_EM* = 0x000006ED
  KEY_Cyrillic_CAPITAL_EN* = 0x000006EE
  KEY_Cyrillic_CAPITAL_O* = 0x000006EF
  KEY_Cyrillic_CAPITAL_PE* = 0x000006F0
  KEY_Cyrillic_CAPITAL_YA* = 0x000006F1
  KEY_Cyrillic_CAPITAL_ER* = 0x000006F2
  KEY_Cyrillic_CAPITAL_ES* = 0x000006F3
  KEY_Cyrillic_CAPITAL_TE* = 0x000006F4
  KEY_Cyrillic_CAPITAL_U* = 0x000006F5
  KEY_Cyrillic_CAPITAL_ZHE* = 0x000006F6
  KEY_Cyrillic_CAPITAL_VE* = 0x000006F7
  KEY_Cyrillic_CAPITAL_SOFTSIGN* = 0x000006F8
  KEY_Cyrillic_CAPITAL_YERU* = 0x000006F9
  KEY_Cyrillic_CAPITAL_ZE* = 0x000006FA
  KEY_Cyrillic_CAPITAL_SHA* = 0x000006FB
  KEY_Cyrillic_CAPITAL_E* = 0x000006FC
  KEY_Cyrillic_CAPITAL_SHCHA* = 0x000006FD
  KEY_Cyrillic_CAPITAL_CHE* = 0x000006FE
  KEY_Cyrillic_CAPITAL_HARDSIGN* = 0x000006FF
  KEY_Greek_CAPITAL_ALPHAaccent* = 0x000007A1
  KEY_Greek_CAPITAL_EPSILONaccent* = 0x000007A2
  KEY_Greek_CAPITAL_ETAaccent* = 0x000007A3
  KEY_Greek_CAPITAL_IOTAaccent* = 0x000007A4
  KEY_Greek_CAPITAL_IOTAdiaeresis* = 0x000007A5
  KEY_Greek_CAPITAL_OMICRONaccent* = 0x000007A7
  KEY_Greek_CAPITAL_UPSILONaccent* = 0x000007A8
  KEY_Greek_CAPITAL_UPSILONdieresis* = 0x000007A9
  KEY_Greek_CAPITAL_OMEGAaccent* = 0x000007AB
  KEY_Greek_accentdieresis* = 0x000007AE
  KEY_Greek_horizbar* = 0x000007AF
  KEY_Greek_alphaaccent* = 0x000007B1
  KEY_Greek_epsilonaccent* = 0x000007B2
  KEY_Greek_etaaccent* = 0x000007B3
  KEY_Greek_iotaaccent* = 0x000007B4
  KEY_Greek_iotadieresis* = 0x000007B5
  KEY_Greek_iotaaccentdieresis* = 0x000007B6
  KEY_Greek_omicronaccent* = 0x000007B7
  KEY_Greek_upsilonaccent* = 0x000007B8
  KEY_Greek_upsilondieresis* = 0x000007B9
  KEY_Greek_upsilonaccentdieresis* = 0x000007BA
  KEY_Greek_omegaaccent* = 0x000007BB
  KEY_Greek_CAPITAL_ALPHA* = 0x000007C1
  KEY_Greek_CAPITAL_BETA* = 0x000007C2
  KEY_Greek_CAPITAL_GAMMA* = 0x000007C3
  KEY_Greek_CAPITAL_DELTA* = 0x000007C4
  KEY_Greek_CAPITAL_EPSILON* = 0x000007C5
  KEY_Greek_CAPITAL_ZETA* = 0x000007C6
  KEY_Greek_CAPITAL_ETA* = 0x000007C7
  KEY_Greek_CAPITAL_THETA* = 0x000007C8
  KEY_Greek_CAPITAL_IOTA* = 0x000007C9
  KEY_Greek_CAPITAL_KAPPA* = 0x000007CA
  KEY_Greek_CAPITAL_LAMDA* = 0x000007CB
  KEY_Greek_CAPITAL_LAMBDA* = 0x000007CB
  KEY_Greek_CAPITAL_MU* = 0x000007CC
  KEY_Greek_CAPITAL_NU* = 0x000007CD
  KEY_Greek_CAPITAL_XI* = 0x000007CE
  KEY_Greek_CAPITAL_OMICRON* = 0x000007CF
  KEY_Greek_CAPITAL_PI* = 0x000007D0
  KEY_Greek_CAPITAL_RHO* = 0x000007D1
  KEY_Greek_CAPITAL_SIGMA* = 0x000007D2
  KEY_Greek_CAPITAL_TAU* = 0x000007D4
  KEY_Greek_CAPITAL_UPSILON* = 0x000007D5
  KEY_Greek_CAPITAL_PHI* = 0x000007D6
  KEY_Greek_CAPITAL_CHI* = 0x000007D7
  KEY_Greek_CAPITAL_PSI* = 0x000007D8
  KEY_Greek_CAPITAL_OMEGA* = 0x000007D9
  KEY_Greek_alpha* = 0x000007E1
  KEY_Greek_beta* = 0x000007E2
  KEY_Greek_gamma* = 0x000007E3
  KEY_Greek_delta* = 0x000007E4
  KEY_Greek_epsilon* = 0x000007E5
  KEY_Greek_zeta* = 0x000007E6
  KEY_Greek_eta* = 0x000007E7
  KEY_Greek_theta* = 0x000007E8
  KEY_Greek_iota* = 0x000007E9
  KEY_Greek_kappa* = 0x000007EA
  KEY_Greek_lamda* = 0x000007EB
  KEY_Greek_lambda* = 0x000007EB
  KEY_Greek_mu* = 0x000007EC
  KEY_Greek_nu* = 0x000007ED
  KEY_Greek_xi* = 0x000007EE
  KEY_Greek_omicron* = 0x000007EF
  KEY_Greek_pi* = 0x000007F0
  KEY_Greek_rho* = 0x000007F1
  KEY_Greek_sigma* = 0x000007F2
  KEY_Greek_finalsmallsigma* = 0x000007F3
  KEY_Greek_tau* = 0x000007F4
  KEY_Greek_upsilon* = 0x000007F5
  KEY_Greek_phi* = 0x000007F6
  KEY_Greek_chi* = 0x000007F7
  KEY_Greek_psi* = 0x000007F8
  KEY_Greek_omega* = 0x000007F9
  KEY_Greek_switch* = 0x0000FF7E
  KEY_leftradical* = 0x000008A1
  KEY_topleftradical* = 0x000008A2
  KEY_horizconnector* = 0x000008A3
  KEY_topintegral* = 0x000008A4
  KEY_botintegral* = 0x000008A5
  KEY_vertconnector* = 0x000008A6
  KEY_topleftsqbracket* = 0x000008A7
  KEY_botleftsqbracket* = 0x000008A8
  KEY_toprightsqbracket* = 0x000008A9
  KEY_botrightsqbracket* = 0x000008AA
  KEY_topleftparens* = 0x000008AB
  KEY_botleftparens* = 0x000008AC
  KEY_toprightparens* = 0x000008AD
  KEY_botrightparens* = 0x000008AE
  KEY_leftmiddlecurlybrace* = 0x000008AF
  KEY_rightmiddlecurlybrace* = 0x000008B0
  KEY_topleftsummation* = 0x000008B1
  KEY_botleftsummation* = 0x000008B2
  KEY_topvertsummationconnector* = 0x000008B3
  KEY_botvertsummationconnector* = 0x000008B4
  KEY_toprightsummation* = 0x000008B5
  KEY_botrightsummation* = 0x000008B6
  KEY_rightmiddlesummation* = 0x000008B7
  KEY_lessthanequal* = 0x000008BC
  KEY_notequal* = 0x000008BD
  KEY_greaterthanequal* = 0x000008BE
  KEY_integral* = 0x000008BF
  KEY_therefore* = 0x000008C0
  KEY_variation* = 0x000008C1
  KEY_infinity* = 0x000008C2
  KEY_nabla* = 0x000008C5
  KEY_approximate* = 0x000008C8
  KEY_similarequal* = 0x000008C9
  KEY_ifonlyif* = 0x000008CD
  KEY_implies* = 0x000008CE
  KEY_identical* = 0x000008CF
  KEY_radical* = 0x000008D6
  KEY_includedin* = 0x000008DA
  KEY_includes* = 0x000008DB
  KEY_intersection* = 0x000008DC
  KEY_union* = 0x000008DD
  KEY_logicaland* = 0x000008DE
  KEY_logicalor* = 0x000008DF
  KEY_partialderivative* = 0x000008EF
  KEY_function* = 0x000008F6
  KEY_leftarrow* = 0x000008FB
  KEY_uparrow* = 0x000008FC
  KEY_rightarrow* = 0x000008FD
  KEY_downarrow* = 0x000008FE
  KEY_blank* = 0x000009DF
  KEY_soliddiamond* = 0x000009E0
  KEY_checkerboard* = 0x000009E1
  KEY_ht* = 0x000009E2
  KEY_ff* = 0x000009E3
  KEY_cr* = 0x000009E4
  KEY_lf* = 0x000009E5
  KEY_nl* = 0x000009E8
  KEY_vt* = 0x000009E9
  KEY_lowrightcorner* = 0x000009EA
  KEY_uprightcorner* = 0x000009EB
  KEY_upleftcorner* = 0x000009EC
  KEY_lowleftcorner* = 0x000009ED
  KEY_crossinglines* = 0x000009EE
  KEY_horizlinescan1* = 0x000009EF
  KEY_horizlinescan3* = 0x000009F0
  KEY_horizlinescan5* = 0x000009F1
  KEY_horizlinescan7* = 0x000009F2
  KEY_horizlinescan9* = 0x000009F3
  KEY_leftt* = 0x000009F4
  KEY_rightt* = 0x000009F5
  KEY_bott* = 0x000009F6
  KEY_topt* = 0x000009F7
  KEY_vertbar* = 0x000009F8
  KEY_emspace* = 0x00000AA1
  KEY_enspace* = 0x00000AA2
  KEY_em3space* = 0x00000AA3
  KEY_em4space* = 0x00000AA4
  KEY_digitspace* = 0x00000AA5
  KEY_punctspace* = 0x00000AA6
  KEY_thinspace* = 0x00000AA7
  KEY_hairspace* = 0x00000AA8
  KEY_emdash* = 0x00000AA9
  KEY_endash* = 0x00000AAA
  KEY_signifblank* = 0x00000AAC
  KEY_ellipsis* = 0x00000AAE
  KEY_doubbaselinedot* = 0x00000AAF
  KEY_onethird* = 0x00000AB0
  KEY_twothirds* = 0x00000AB1
  KEY_onefifth* = 0x00000AB2
  KEY_twofifths* = 0x00000AB3
  KEY_threefifths* = 0x00000AB4
  KEY_fourfifths* = 0x00000AB5
  KEY_onesixth* = 0x00000AB6
  KEY_fivesixths* = 0x00000AB7
  KEY_careof* = 0x00000AB8
  KEY_figdash* = 0x00000ABB
  KEY_leftanglebracket* = 0x00000ABC
  KEY_decimalpoint* = 0x00000ABD
  KEY_rightanglebracket* = 0x00000ABE
  KEY_marker* = 0x00000ABF
  KEY_oneeighth* = 0x00000AC3
  KEY_threeeighths* = 0x00000AC4
  KEY_fiveeighths* = 0x00000AC5
  KEY_seveneighths* = 0x00000AC6
  KEY_trademark* = 0x00000AC9
  KEY_signaturemark* = 0x00000ACA
  KEY_trademarkincircle* = 0x00000ACB
  KEY_leftopentriangle* = 0x00000ACC
  KEY_rightopentriangle* = 0x00000ACD
  KEY_emopencircle* = 0x00000ACE
  KEY_emopenrectangle* = 0x00000ACF
  KEY_leftsinglequotemark* = 0x00000AD0
  KEY_rightsinglequotemark* = 0x00000AD1
  KEY_leftdoublequotemark* = 0x00000AD2
  KEY_rightdoublequotemark* = 0x00000AD3
  KEY_prescription* = 0x00000AD4
  KEY_minutes* = 0x00000AD6
  KEY_seconds* = 0x00000AD7
  KEY_latincross* = 0x00000AD9
  KEY_hexagram* = 0x00000ADA
  KEY_filledrectbullet* = 0x00000ADB
  KEY_filledlefttribullet* = 0x00000ADC
  KEY_filledrighttribullet* = 0x00000ADD
  KEY_emfilledcircle* = 0x00000ADE
  KEY_emfilledrect* = 0x00000ADF
  KEY_enopencircbullet* = 0x00000AE0
  KEY_enopensquarebullet* = 0x00000AE1
  KEY_openrectbullet* = 0x00000AE2
  KEY_opentribulletup* = 0x00000AE3
  KEY_opentribulletdown* = 0x00000AE4
  KEY_openstar* = 0x00000AE5
  KEY_enfilledcircbullet* = 0x00000AE6
  KEY_enfilledsqbullet* = 0x00000AE7
  KEY_filledtribulletup* = 0x00000AE8
  KEY_filledtribulletdown* = 0x00000AE9
  KEY_leftpointer* = 0x00000AEA
  KEY_rightpointer* = 0x00000AEB
  KEY_club* = 0x00000AEC
  KEY_diamond* = 0x00000AED
  KEY_heart* = 0x00000AEE
  KEY_maltesecross* = 0x00000AF0
  KEY_dagger* = 0x00000AF1
  KEY_doubledagger* = 0x00000AF2
  KEY_checkmark* = 0x00000AF3
  KEY_ballotcross* = 0x00000AF4
  KEY_musicalsharp* = 0x00000AF5
  KEY_musicalflat* = 0x00000AF6
  KEY_malesymbol* = 0x00000AF7
  KEY_femalesymbol* = 0x00000AF8
  KEY_telephone* = 0x00000AF9
  KEY_telephonerecorder* = 0x00000AFA
  KEY_phonographcopyright* = 0x00000AFB
  KEY_caret* = 0x00000AFC
  KEY_singlelowquotemark* = 0x00000AFD
  KEY_doublelowquotemark* = 0x00000AFE
  KEY_cursor* = 0x00000AFF
  KEY_leftcaret* = 0x00000BA3
  KEY_rightcaret* = 0x00000BA6
  KEY_downcaret* = 0x00000BA8
  KEY_upcaret* = 0x00000BA9
  KEY_overbar* = 0x00000BC0
  KEY_downtack* = 0x00000BC2
  KEY_upshoe* = 0x00000BC3
  KEY_downstile* = 0x00000BC4
  KEY_underbar* = 0x00000BC6
  KEY_jot* = 0x00000BCA
  KEY_quad* = 0x00000BCC
  KEY_uptack* = 0x00000BCE
  KEY_circle* = 0x00000BCF
  KEY_upstile* = 0x00000BD3
  KEY_downshoe* = 0x00000BD6
  KEY_rightshoe* = 0x00000BD8
  KEY_leftshoe* = 0x00000BDA
  KEY_lefttack* = 0x00000BDC
  KEY_righttack* = 0x00000BFC
  KEY_hebrew_doublelowline* = 0x00000CDF
  KEY_hebrew_aleph* = 0x00000CE0
  KEY_hebrew_bet* = 0x00000CE1
  KEY_hebrew_beth* = 0x00000CE1
  KEY_hebrew_gimel* = 0x00000CE2
  KEY_hebrew_gimmel* = 0x00000CE2
  KEY_hebrew_dalet* = 0x00000CE3
  KEY_hebrew_daleth* = 0x00000CE3
  KEY_hebrew_he* = 0x00000CE4
  KEY_hebrew_waw* = 0x00000CE5
  KEY_hebrew_zain* = 0x00000CE6
  KEY_hebrew_zayin* = 0x00000CE6
  KEY_hebrew_chet* = 0x00000CE7
  KEY_hebrew_het* = 0x00000CE7
  KEY_hebrew_tet* = 0x00000CE8
  KEY_hebrew_teth* = 0x00000CE8
  KEY_hebrew_yod* = 0x00000CE9
  KEY_hebrew_finalkaph* = 0x00000CEA
  KEY_hebrew_kaph* = 0x00000CEB
  KEY_hebrew_lamed* = 0x00000CEC
  KEY_hebrew_finalmem* = 0x00000CED
  KEY_hebrew_mem* = 0x00000CEE
  KEY_hebrew_finalnun* = 0x00000CEF
  KEY_hebrew_nun* = 0x00000CF0
  KEY_hebrew_samech* = 0x00000CF1
  KEY_hebrew_samekh* = 0x00000CF1
  KEY_hebrew_ayin* = 0x00000CF2
  KEY_hebrew_finalpe* = 0x00000CF3
  KEY_hebrew_pe* = 0x00000CF4
  KEY_hebrew_finalzade* = 0x00000CF5
  KEY_hebrew_finalzadi* = 0x00000CF5
  KEY_hebrew_zade* = 0x00000CF6
  KEY_hebrew_zadi* = 0x00000CF6
  KEY_hebrew_qoph* = 0x00000CF7
  KEY_hebrew_kuf* = 0x00000CF7
  KEY_hebrew_resh* = 0x00000CF8
  KEY_hebrew_shin* = 0x00000CF9
  KEY_hebrew_taw* = 0x00000CFA
  KEY_hebrew_taf* = 0x00000CFA
  KEY_Hebrew_switch* = 0x0000FF7E
  KEY_Thai_kokai* = 0x00000DA1
  KEY_Thai_khokhai* = 0x00000DA2
  KEY_Thai_khokhuat* = 0x00000DA3
  KEY_Thai_khokhwai* = 0x00000DA4
  KEY_Thai_khokhon* = 0x00000DA5
  KEY_Thai_khorakhang* = 0x00000DA6
  KEY_Thai_ngongu* = 0x00000DA7
  KEY_Thai_chochan* = 0x00000DA8
  KEY_Thai_choching* = 0x00000DA9
  KEY_Thai_chochang* = 0x00000DAA
  KEY_Thai_soso* = 0x00000DAB
  KEY_Thai_chochoe* = 0x00000DAC
  KEY_Thai_yoying* = 0x00000DAD
  KEY_Thai_dochada* = 0x00000DAE
  KEY_Thai_topatak* = 0x00000DAF
  KEY_Thai_thothan* = 0x00000DB0
  KEY_Thai_thonangmontho* = 0x00000DB1
  KEY_Thai_thophuthao* = 0x00000DB2
  KEY_Thai_nonen* = 0x00000DB3
  KEY_Thai_dodek* = 0x00000DB4
  KEY_Thai_totao* = 0x00000DB5
  KEY_Thai_thothung* = 0x00000DB6
  KEY_Thai_thothahan* = 0x00000DB7
  KEY_Thai_thothong* = 0x00000DB8
  KEY_Thai_nonu* = 0x00000DB9
  KEY_Thai_bobaimai* = 0x00000DBA
  KEY_Thai_popla* = 0x00000DBB
  KEY_Thai_phophung* = 0x00000DBC
  KEY_Thai_fofa* = 0x00000DBD
  KEY_Thai_phophan* = 0x00000DBE
  KEY_Thai_fofan* = 0x00000DBF
  KEY_Thai_phosamphao* = 0x00000DC0
  KEY_Thai_moma* = 0x00000DC1
  KEY_Thai_yoyak* = 0x00000DC2
  KEY_Thai_rorua* = 0x00000DC3
  KEY_Thai_ru* = 0x00000DC4
  KEY_Thai_loling* = 0x00000DC5
  KEY_Thai_lu* = 0x00000DC6
  KEY_Thai_wowaen* = 0x00000DC7
  KEY_Thai_sosala* = 0x00000DC8
  KEY_Thai_sorusi* = 0x00000DC9
  KEY_Thai_sosua* = 0x00000DCA
  KEY_Thai_hohip* = 0x00000DCB
  KEY_Thai_lochula* = 0x00000DCC
  KEY_Thai_oang* = 0x00000DCD
  KEY_Thai_honokhuk* = 0x00000DCE
  KEY_Thai_paiyannoi* = 0x00000DCF
  KEY_Thai_saraa* = 0x00000DD0
  KEY_Thai_maihanakat* = 0x00000DD1
  KEY_Thai_saraaa* = 0x00000DD2
  KEY_Thai_saraam* = 0x00000DD3
  KEY_Thai_sarai* = 0x00000DD4
  KEY_Thai_saraii* = 0x00000DD5
  KEY_Thai_saraue* = 0x00000DD6
  KEY_Thai_sarauee* = 0x00000DD7
  KEY_Thai_sarau* = 0x00000DD8
  KEY_Thai_sarauu* = 0x00000DD9
  KEY_Thai_phinthu* = 0x00000DDA
  KEY_Thai_maihanakat_maitho* = 0x00000DDE
  KEY_Thai_baht* = 0x00000DDF
  KEY_Thai_sarae* = 0x00000DE0
  KEY_Thai_saraae* = 0x00000DE1
  KEY_Thai_sarao* = 0x00000DE2
  KEY_Thai_saraaimaimuan* = 0x00000DE3
  KEY_Thai_saraaimaimalai* = 0x00000DE4
  KEY_Thai_lakkhangyao* = 0x00000DE5
  KEY_Thai_maiyamok* = 0x00000DE6
  KEY_Thai_maitaikhu* = 0x00000DE7
  KEY_Thai_maiek* = 0x00000DE8
  KEY_Thai_maitho* = 0x00000DE9
  KEY_Thai_maitri* = 0x00000DEA
  KEY_Thai_maichattawa* = 0x00000DEB
  KEY_Thai_thanthakhat* = 0x00000DEC
  KEY_Thai_nikhahit* = 0x00000DED
  KEY_Thai_leksun* = 0x00000DF0
  KEY_Thai_leknung* = 0x00000DF1
  KEY_Thai_leksong* = 0x00000DF2
  KEY_Thai_leksam* = 0x00000DF3
  KEY_Thai_leksi* = 0x00000DF4
  KEY_Thai_lekha* = 0x00000DF5
  KEY_Thai_lekhok* = 0x00000DF6
  KEY_Thai_lekchet* = 0x00000DF7
  KEY_Thai_lekpaet* = 0x00000DF8
  KEY_Thai_lekkao* = 0x00000DF9
  KEY_Hangul* = 0x0000FF31
  KEY_Hangul_Start* = 0x0000FF32
  KEY_Hangul_End* = 0x0000FF33
  KEY_Hangul_Hanja* = 0x0000FF34
  KEY_Hangul_Jamo* = 0x0000FF35
  KEY_Hangul_Romaja* = 0x0000FF36
  KEY_Hangul_Codeinput* = 0x0000FF37
  KEY_Hangul_Jeonja* = 0x0000FF38
  KEY_Hangul_Banja* = 0x0000FF39
  KEY_Hangul_PreHanja* = 0x0000FF3A
  KEY_Hangul_PostHanja* = 0x0000FF3B
  KEY_Hangul_SingleCandidate* = 0x0000FF3C
  KEY_Hangul_MultipleCandidate* = 0x0000FF3D
  KEY_Hangul_PreviousCandidate* = 0x0000FF3E
  KEY_Hangul_Special* = 0x0000FF3F
  KEY_Hangul_switch* = 0x0000FF7E
  KEY_Hangul_Kiyeog* = 0x00000EA1
  KEY_Hangul_SsangKiyeog* = 0x00000EA2
  KEY_Hangul_KiyeogSios* = 0x00000EA3
  KEY_Hangul_Nieun* = 0x00000EA4
  KEY_Hangul_NieunJieuj* = 0x00000EA5
  KEY_Hangul_NieunHieuh* = 0x00000EA6
  KEY_Hangul_Dikeud* = 0x00000EA7
  KEY_Hangul_SsangDikeud* = 0x00000EA8
  KEY_Hangul_Rieul* = 0x00000EA9
  KEY_Hangul_RieulKiyeog* = 0x00000EAA
  KEY_Hangul_RieulMieum* = 0x00000EAB
  KEY_Hangul_RieulPieub* = 0x00000EAC
  KEY_Hangul_RieulSios* = 0x00000EAD
  KEY_Hangul_RieulTieut* = 0x00000EAE
  KEY_Hangul_RieulPhieuf* = 0x00000EAF
  KEY_Hangul_RieulHieuh* = 0x00000EB0
  KEY_Hangul_Mieum* = 0x00000EB1
  KEY_Hangul_Pieub* = 0x00000EB2
  KEY_Hangul_SsangPieub* = 0x00000EB3
  KEY_Hangul_PieubSios* = 0x00000EB4
  KEY_Hangul_Sios* = 0x00000EB5
  KEY_Hangul_SsangSios* = 0x00000EB6
  KEY_Hangul_Ieung* = 0x00000EB7
  KEY_Hangul_Jieuj* = 0x00000EB8
  KEY_Hangul_SsangJieuj* = 0x00000EB9
  KEY_Hangul_Cieuc* = 0x00000EBA
  KEY_Hangul_Khieuq* = 0x00000EBB
  KEY_Hangul_Tieut* = 0x00000EBC
  KEY_Hangul_Phieuf* = 0x00000EBD
  KEY_Hangul_Hieuh* = 0x00000EBE
  KEY_Hangul_A* = 0x00000EBF
  KEY_Hangul_AE* = 0x00000EC0
  KEY_Hangul_YA* = 0x00000EC1
  KEY_Hangul_YAE* = 0x00000EC2
  KEY_Hangul_EO* = 0x00000EC3
  KEY_Hangul_E* = 0x00000EC4
  KEY_Hangul_YEO* = 0x00000EC5
  KEY_Hangul_YE* = 0x00000EC6
  KEY_Hangul_O* = 0x00000EC7
  KEY_Hangul_WA* = 0x00000EC8
  KEY_Hangul_WAE* = 0x00000EC9
  KEY_Hangul_OE* = 0x00000ECA
  KEY_Hangul_YO* = 0x00000ECB
  KEY_Hangul_U* = 0x00000ECC
  KEY_Hangul_WEO* = 0x00000ECD
  KEY_Hangul_WE* = 0x00000ECE
  KEY_Hangul_WI* = 0x00000ECF
  KEY_Hangul_YU* = 0x00000ED0
  KEY_Hangul_EU* = 0x00000ED1
  KEY_Hangul_YI* = 0x00000ED2
  KEY_Hangul_I* = 0x00000ED3
  KEY_Hangul_J_Kiyeog* = 0x00000ED4
  KEY_Hangul_J_SsangKiyeog* = 0x00000ED5
  KEY_Hangul_J_KiyeogSios* = 0x00000ED6
  KEY_Hangul_J_Nieun* = 0x00000ED7
  KEY_Hangul_J_NieunJieuj* = 0x00000ED8
  KEY_Hangul_J_NieunHieuh* = 0x00000ED9
  KEY_Hangul_J_Dikeud* = 0x00000EDA
  KEY_Hangul_J_Rieul* = 0x00000EDB
  KEY_Hangul_J_RieulKiyeog* = 0x00000EDC
  KEY_Hangul_J_RieulMieum* = 0x00000EDD
  KEY_Hangul_J_RieulPieub* = 0x00000EDE
  KEY_Hangul_J_RieulSios* = 0x00000EDF
  KEY_Hangul_J_RieulTieut* = 0x00000EE0
  KEY_Hangul_J_RieulPhieuf* = 0x00000EE1
  KEY_Hangul_J_RieulHieuh* = 0x00000EE2
  KEY_Hangul_J_Mieum* = 0x00000EE3
  KEY_Hangul_J_Pieub* = 0x00000EE4
  KEY_Hangul_J_PieubSios* = 0x00000EE5
  KEY_Hangul_J_Sios* = 0x00000EE6
  KEY_Hangul_J_SsangSios* = 0x00000EE7
  KEY_Hangul_J_Ieung* = 0x00000EE8
  KEY_Hangul_J_Jieuj* = 0x00000EE9
  KEY_Hangul_J_Cieuc* = 0x00000EEA
  KEY_Hangul_J_Khieuq* = 0x00000EEB
  KEY_Hangul_J_Tieut* = 0x00000EEC
  KEY_Hangul_J_Phieuf* = 0x00000EED
  KEY_Hangul_J_Hieuh* = 0x00000EEE
  KEY_Hangul_RieulYeorinHieuh* = 0x00000EEF
  KEY_Hangul_SunkyeongeumMieum* = 0x00000EF0
  KEY_Hangul_SunkyeongeumPieub* = 0x00000EF1
  KEY_Hangul_PanSios* = 0x00000EF2
  KEY_Hangul_KkogjiDalrinIeung* = 0x00000EF3
  KEY_Hangul_SunkyeongeumPhieuf* = 0x00000EF4
  KEY_Hangul_YeorinHieuh* = 0x00000EF5
  KEY_Hangul_AraeA* = 0x00000EF6
  KEY_Hangul_AraeAE* = 0x00000EF7
  KEY_Hangul_J_PanSios* = 0x00000EF8
  KEY_Hangul_J_KkogjiDalrinIeung* = 0x00000EF9
  KEY_Hangul_J_YeorinHieuh* = 0x00000EFA
  KEY_Korean_Won* = 0x00000EFF
  KEY_EcuSign* = 0x000020A0
  KEY_ColonSign* = 0x000020A1
  KEY_CruzeiroSign* = 0x000020A2
  KEY_FFrancSign* = 0x000020A3
  KEY_LiraSign* = 0x000020A4
  KEY_MillSign* = 0x000020A5
  KEY_NairaSign* = 0x000020A6
  KEY_PesetaSign* = 0x000020A7
  KEY_RupeeSign* = 0x000020A8
  KEY_WonSign* = 0x000020A9
  KEY_NewSheqelSign* = 0x000020AA
  KEY_DongSign* = 0x000020AB
  KEY_EuroSign* = 0x000020AC

proc pango_context_get_for_screen*(screen: PScreen): PContext{.cdecl, 
    dynlib: lib, importc: "gdk_pango_context_get_for_screen".}
proc pango_context_set_colormap*(context: PContext, colormap: PColormap){.
    cdecl, dynlib: lib, importc: "gdk_pango_context_set_colormap".}
proc pango_layout_line_get_clip_region*(line: PLayoutLine, x_origin: gint, 
                                        y_origin: gint, index_ranges: Pgint, 
                                        n_ranges: gint): PRegion{.cdecl, 
    dynlib: lib, importc: "gdk_pango_layout_line_get_clip_region".}
proc pango_layout_get_clip_region*(layout: PLayout, x_origin: gint, 
                                   y_origin: gint, index_ranges: Pgint, 
                                   n_ranges: gint): PRegion{.cdecl, dynlib: lib, 
    importc: "gdk_pango_layout_get_clip_region".}
proc pango_attr_stipple_new*(stipple: PBitmap): PAttribute{.cdecl, 
    dynlib: lib, importc: "gdk_pango_attr_stipple_new".}
proc pango_attr_embossed_new*(embossed: gboolean): PAttribute{.cdecl, 
    dynlib: lib, importc: "gdk_pango_attr_embossed_new".}
proc render_threshold_alpha*(pixbuf: PPixbuf, bitmap: PBitmap, 
                                    src_x: int32, src_y: int32, dest_x: int32, 
                                    dest_y: int32, width: int32, height: int32, 
                                    alpha_threshold: int32){.cdecl, dynlib: lib, 
    importc: "gdk_pixbuf_render_threshold_alpha".}
proc render_to_drawable*(pixbuf: PPixbuf, drawable: PDrawable, gc: PGC, 
                                src_x: int32, src_y: int32, dest_x: int32, 
                                dest_y: int32, width: int32, height: int32, 
                                dither: TRgbDither, x_dither: int32, 
                                y_dither: int32){.cdecl, dynlib: lib, 
    importc: "gdk_pixbuf_render_to_drawable".}
proc render_to_drawable_alpha*(pixbuf: PPixbuf, drawable: PDrawable, 
                                      src_x: int32, src_y: int32, dest_x: int32, 
                                      dest_y: int32, width: int32, 
                                      height: int32, 
                                      alpha_mode: TPixbufAlphaMode, 
                                      alpha_threshold: int32, 
                                      dither: TRgbDither, x_dither: int32, 
                                      y_dither: int32){.cdecl, dynlib: lib, 
    importc: "gdk_pixbuf_render_to_drawable_alpha".}
proc render_pixmap_and_mask_for_colormap*(pixbuf: PPixbuf, 
    colormap: PColormap, n: var PPixmap, nasdfdsafw4e: var PBitmap, 
    alpha_threshold: int32){.cdecl, dynlib: lib, importc: "gdk_pixbuf_render_pixmap_and_mask_for_colormap".}
proc get_from_drawable*(dest: PPixbuf, src: PDrawable, cmap: PColormap, 
                               src_x: int32, src_y: int32, dest_x: int32, 
                               dest_y: int32, width: int32, height: int32): PPixbuf{.
    cdecl, dynlib: lib, importc: "gdk_pixbuf_get_from_drawable".}
proc get_from_image*(dest: PPixbuf, src: PImage, cmap: PColormap, 
                            src_x: int32, src_y: int32, dest_x: int32, 
                            dest_y: int32, width: int32, height: int32): PPixbuf{.
    cdecl, dynlib: lib, importc: "gdk_pixbuf_get_from_image".}
proc TYPE_PIXMAP*(): GType
proc PIXMAP*(anObject: Pointer): PPixmap
proc PIXMAP_CLASS*(klass: Pointer): PPixmapObjectClass
proc IS_PIXMAP*(anObject: Pointer): bool
proc IS_PIXMAP_CLASS*(klass: Pointer): bool
proc PIXMAP_GET_CLASS*(obj: Pointer): PPixmapObjectClass
proc PIXMAP_OBJECT*(anObject: Pointer): PPixmapObject
proc pixmap_get_type*(): GType{.cdecl, dynlib: lib, 
                                importc: "gdk_pixmap_get_type".}
proc pixmap_new*(window: PWindow, width: gint, height: gint, depth: gint): PPixmap{.
    cdecl, dynlib: lib, importc: "gdk_pixmap_new".}
proc bitmap_create_from_data*(window: PWindow, data: cstring, width: gint, 
                              height: gint): PBitmap{.cdecl, dynlib: lib, 
    importc: "gdk_bitmap_create_from_data".}
proc pixmap_create_from_data*(window: PWindow, data: cstring, width: gint, 
                              height: gint, depth: gint, fg: PColor, bg: PColor): PPixmap{.
    cdecl, dynlib: lib, importc: "gdk_pixmap_create_from_data".}
proc pixmap_create_from_xpm*(window: PWindow, k: var PBitmap, 
                             transparent_color: PColor, filename: cstring): PPixmap{.
    cdecl, dynlib: lib, importc: "gdk_pixmap_create_from_xpm".}
proc pixmap_colormap_create_from_xpm*(window: PWindow, colormap: PColormap, 
                                      k: var PBitmap, transparent_color: PColor, 
                                      filename: cstring): PPixmap{.cdecl, 
    dynlib: lib, importc: "gdk_pixmap_colormap_create_from_xpm".}
proc pixmap_create_from_xpm_d*(window: PWindow, k: var PBitmap, 
                               transparent_color: PColor, data: PPgchar): PPixmap{.
    cdecl, dynlib: lib, importc: "gdk_pixmap_create_from_xpm_d".}
proc pixmap_colormap_create_from_xpm_d*(window: PWindow, colormap: PColormap, 
                                        k: var PBitmap, 
                                        transparent_color: PColor, data: PPgchar): PPixmap{.
    cdecl, dynlib: lib, importc: "gdk_pixmap_colormap_create_from_xpm_d".}
proc pixmap_foreign_new_for_display*(display: PDisplay, anid: TNativeWindow): PPixmap{.
    cdecl, dynlib: lib, importc: "gdk_pixmap_foreign_new_for_display".}
proc pixmap_lookup_for_display*(display: PDisplay, anid: TNativeWindow): PPixmap{.
    cdecl, dynlib: lib, importc: "gdk_pixmap_lookup_for_display".}
proc atom_intern*(atom_name: cstring, only_if_exists: gboolean): TAtom{.cdecl, 
    dynlib: lib, importc: "gdk_atom_intern".}
proc atom_name*(atom: TAtom): cstring{.cdecl, dynlib: lib, 
                                       importc: "gdk_atom_name".}
proc property_get*(window: PWindow, `property`: TAtom, `type`: TAtom, 
                   offset: gulong, length: gulong, pdelete: gint, 
                   actual_property_type: PAtom, actual_format: Pgint, 
                   actual_length: Pgint, data: PPguchar): gboolean{.cdecl, 
    dynlib: lib, importc: "gdk_property_get".}
proc property_change*(window: PWindow, `property`: TAtom, `type`: TAtom, 
                      format: gint, mode: TPropMode, data: Pguchar, 
                      nelements: gint){.cdecl, dynlib: lib, 
                                        importc: "gdk_property_change".}
proc property_delete*(window: PWindow, `property`: TAtom){.cdecl, dynlib: lib, 
    importc: "gdk_property_delete".}
proc text_property_to_text_list_for_display*(display: PDisplay, encoding: TAtom, 
    format: gint, text: Pguchar, length: gint, t: var PPgchar): gint{.cdecl, 
    dynlib: lib, importc: "gdk_text_property_to_text_list_for_display".}
proc text_property_to_utf8_list_for_display*(display: PDisplay, encoding: TAtom, 
    format: gint, text: Pguchar, length: gint, t: var PPgchar): gint{.cdecl, 
    dynlib: lib, importc: "gdk_text_property_to_utf8_list_for_display".}
proc utf8_to_string_target*(str: cstring): cstring{.cdecl, dynlib: lib, 
    importc: "gdk_utf8_to_string_target".}
proc string_to_compound_text_for_display*(display: PDisplay, str: cstring, 
    encoding: PAtom, format: Pgint, ctext: PPguchar, length: Pgint): gint{.
    cdecl, dynlib: lib, importc: "gdk_string_to_compound_text_for_display".}
proc utf8_to_compound_text_for_display*(display: PDisplay, str: cstring, 
                                        encoding: PAtom, format: Pgint, 
                                        ctext: PPguchar, length: Pgint): gboolean{.
    cdecl, dynlib: lib, importc: "gdk_utf8_to_compound_text_for_display".}
proc free_text_list*(list: PPgchar){.cdecl, dynlib: lib, 
                                     importc: "gdk_free_text_list".}
proc free_compound_text*(ctext: Pguchar){.cdecl, dynlib: lib, 
    importc: "gdk_free_compound_text".}
proc region_new*(): PRegion{.cdecl, dynlib: lib, importc: "gdk_region_new".}
proc region_polygon*(points: PPoint, npoints: gint, fill_rule: TFillRule): PRegion{.
    cdecl, dynlib: lib, importc: "gdk_region_polygon".}
proc copy*(region: PRegion): PRegion{.cdecl, dynlib: lib, 
    importc: "gdk_region_copy".}
proc region_rectangle*(rectangle: PRectangle): PRegion{.cdecl, dynlib: lib, 
    importc: "gdk_region_rectangle".}
proc destroy*(region: PRegion){.cdecl, dynlib: lib, 
                                       importc: "gdk_region_destroy".}
proc get_clipbox*(region: PRegion, rectangle: PRectangle){.cdecl, 
    dynlib: lib, importc: "gdk_region_get_clipbox".}
proc get_rectangles*(region: PRegion, s: var PRectangle, 
                            n_rectangles: Pgint){.cdecl, dynlib: lib, 
    importc: "gdk_region_get_rectangles".}
proc empty*(region: PRegion): gboolean{.cdecl, dynlib: lib, 
    importc: "gdk_region_empty".}
proc equal*(region1: PRegion, region2: PRegion): gboolean{.cdecl, 
    dynlib: lib, importc: "gdk_region_equal".}
proc point_in*(region: PRegion, x: int32, y: int32): gboolean{.cdecl, 
    dynlib: lib, importc: "gdk_region_point_in".}
proc rect_in*(region: PRegion, rect: PRectangle): TOverlapType{.cdecl, 
    dynlib: lib, importc: "gdk_region_rect_in".}
proc offset*(region: PRegion, dx: gint, dy: gint){.cdecl, dynlib: lib, 
    importc: "gdk_region_offset".}
proc shrink*(region: PRegion, dx: gint, dy: gint){.cdecl, dynlib: lib, 
    importc: "gdk_region_shrink".}
proc union*(region: PRegion, rect: PRectangle){.cdecl, 
    dynlib: lib, importc: "gdk_region_union_with_rect".}
proc intersect*(source1: PRegion, source2: PRegion){.cdecl, dynlib: lib, 
    importc: "gdk_region_intersect".}
proc union*(source1: PRegion, source2: PRegion){.cdecl, dynlib: lib, 
    importc: "gdk_region_union".}
proc subtract*(source1: PRegion, source2: PRegion){.cdecl, dynlib: lib, 
    importc: "gdk_region_subtract".}
proc `xor`*(source1: PRegion, source2: PRegion){.cdecl, dynlib: lib, 
    importc: "gdk_region_xor".}
proc spans_intersect_foreach*(region: PRegion, spans: PSpan, 
                                     n_spans: int32, sorted: gboolean, 
                                     `function`: TSpanFunc, data: gpointer){.
    cdecl, dynlib: lib, importc: "gdk_region_spans_intersect_foreach".}
proc rgb_find_color*(colormap: PColormap, color: PColor){.cdecl, dynlib: lib, 
    importc: "gdk_rgb_find_color".}
proc rgb_image*(drawable: PDrawable, gc: PGC, x: gint, y: gint, 
                     width: gint, height: gint, dith: TRgbDither, 
                     rgb_buf: Pguchar, rowstride: gint){.cdecl, dynlib: lib, 
    importc: "gdk_draw_rgb_image".}
proc rgb_image_dithalign*(drawable: PDrawable, gc: PGC, x: gint, y: gint, 
                               width: gint, height: gint, dith: TRgbDither, 
                               rgb_buf: Pguchar, rowstride: gint, xdith: gint, 
                               ydith: gint){.cdecl, dynlib: lib, 
    importc: "gdk_draw_rgb_image_dithalign".}
proc rgb_32_image*(drawable: PDrawable, gc: PGC, x: gint, y: gint, 
                        width: gint, height: gint, dith: TRgbDither, 
                        buf: Pguchar, rowstride: gint){.cdecl, dynlib: lib, 
    importc: "gdk_draw_rgb_32_image".}
proc rgb_32_image_dithalign*(drawable: PDrawable, gc: PGC, x: gint, 
                                  y: gint, width: gint, height: gint, 
                                  dith: TRgbDither, buf: Pguchar, 
                                  rowstride: gint, xdith: gint, ydith: gint){.
    cdecl, dynlib: lib, importc: "gdk_draw_rgb_32_image_dithalign".}
proc gray_image*(drawable: PDrawable, gc: PGC, x: gint, y: gint, 
                      width: gint, height: gint, dith: TRgbDither, buf: Pguchar, 
                      rowstride: gint){.cdecl, dynlib: lib, 
                                        importc: "gdk_draw_gray_image".}
proc indexed_image*(drawable: PDrawable, gc: PGC, x: gint, y: gint, 
                         width: gint, height: gint, dith: TRgbDither, 
                         buf: Pguchar, rowstride: gint, cmap: PRgbCmap){.cdecl, 
    dynlib: lib, importc: "gdk_draw_indexed_image".}
proc rgb_cmap_new*(colors: Pguint32, n_colors: gint): PRgbCmap{.cdecl, 
    dynlib: lib, importc: "gdk_rgb_cmap_new".}
proc free*(cmap: PRgbCmap){.cdecl, dynlib: lib, 
                                     importc: "gdk_rgb_cmap_free".}
proc rgb_set_verbose*(verbose: gboolean){.cdecl, dynlib: lib, 
    importc: "gdk_rgb_set_verbose".}
proc rgb_set_install*(install: gboolean){.cdecl, dynlib: lib, 
    importc: "gdk_rgb_set_install".}
proc rgb_set_min_colors*(min_colors: gint){.cdecl, dynlib: lib, 
    importc: "gdk_rgb_set_min_colors".}
proc TYPE_DISPLAY*(): GType
proc DISPLAY_OBJECT*(anObject: pointer): PDisplay
proc DISPLAY_CLASS*(klass: pointer): PDisplayClass
proc IS_DISPLAY*(anObject: pointer): bool
proc IS_DISPLAY_CLASS*(klass: pointer): bool
proc DISPLAY_GET_CLASS*(obj: pointer): PDisplayClass
proc display_open*(display_name: cstring): PDisplay{.cdecl, dynlib: lib, 
    importc: "gdk_display_open".}
proc get_name*(display: PDisplay): cstring{.cdecl, dynlib: lib, 
    importc: "gdk_display_get_name".}
proc get_n_screens*(display: PDisplay): gint{.cdecl, dynlib: lib, 
    importc: "gdk_display_get_n_screens".}
proc get_screen*(display: PDisplay, screen_num: gint): PScreen{.cdecl, 
    dynlib: lib, importc: "gdk_display_get_screen".}
proc get_default_screen*(display: PDisplay): PScreen{.cdecl, 
    dynlib: lib, importc: "gdk_display_get_default_screen".}
proc pointer_ungrab*(display: PDisplay, time: guint32){.cdecl, 
    dynlib: lib, importc: "gdk_display_pointer_ungrab".}
proc keyboard_ungrab*(display: PDisplay, time: guint32){.cdecl, 
    dynlib: lib, importc: "gdk_display_keyboard_ungrab".}
proc pointer_is_grabbed*(display: PDisplay): gboolean{.cdecl, 
    dynlib: lib, importc: "gdk_display_pointer_is_grabbed".}
proc beep*(display: PDisplay){.cdecl, dynlib: lib, 
                                       importc: "gdk_display_beep".}
proc sync*(display: PDisplay){.cdecl, dynlib: lib, 
                                       importc: "gdk_display_sync".}
proc close*(display: PDisplay){.cdecl, dynlib: lib, 
                                        importc: "gdk_display_close".}
proc list_devices*(display: PDisplay): PGList{.cdecl, dynlib: lib, 
    importc: "gdk_display_list_devices".}
proc get_event*(display: PDisplay): PEvent{.cdecl, dynlib: lib, 
    importc: "gdk_display_get_event".}
proc peek_event*(display: PDisplay): PEvent{.cdecl, dynlib: lib, 
    importc: "gdk_display_peek_event".}
proc put_event*(display: PDisplay, event: PEvent){.cdecl, dynlib: lib, 
    importc: "gdk_display_put_event".}
proc add_client_message_filter*(display: PDisplay, message_type: TAtom, 
                                        func: TFilterFunc, data: gpointer){.
    cdecl, dynlib: lib, importc: "gdk_display_add_client_message_filter".}
proc set_double_click_time*(display: PDisplay, msec: guint){.cdecl, 
    dynlib: lib, importc: "gdk_display_set_double_click_time".}
proc set_sm_client_id*(display: PDisplay, sm_client_id: cstring){.cdecl, 
    dynlib: lib, importc: "gdk_display_set_sm_client_id".}
proc set_default_display*(display: PDisplay){.cdecl, dynlib: lib, 
    importc: "gdk_set_default_display".}
proc get_default_display*(): PDisplay{.cdecl, dynlib: lib, 
                                       importc: "gdk_get_default_display".}
proc TYPE_SCREEN*(): GType
proc SCREEN*(anObject: Pointer): PScreen
proc SCREEN_CLASS*(klass: Pointer): PScreenClass
proc IS_SCREEN*(anObject: Pointer): bool
proc IS_SCREEN_CLASS*(klass: Pointer): bool
proc SCREEN_GET_CLASS*(obj: Pointer): PScreenClass
proc get_default_colormap*(screen: PScreen): PColormap{.cdecl, 
    dynlib: lib, importc: "gdk_screen_get_default_colormap".}
proc set_default_colormap*(screen: PScreen, colormap: PColormap){.cdecl, 
    dynlib: lib, importc: "gdk_screen_set_default_colormap".}
proc get_system_colormap*(screen: PScreen): PColormap{.cdecl, 
    dynlib: lib, importc: "gdk_screen_get_system_colormap".}
proc get_system_visual*(screen: PScreen): PVisual{.cdecl, dynlib: lib, 
    importc: "gdk_screen_get_system_visual".}
proc get_rgb_colormap*(screen: PScreen): PColormap{.cdecl, dynlib: lib, 
    importc: "gdk_screen_get_rgb_colormap".}
proc get_rgb_visual*(screen: PScreen): PVisual{.cdecl, dynlib: lib, 
    importc: "gdk_screen_get_rgb_visual".}
proc get_root_window*(screen: PScreen): PWindow{.cdecl, dynlib: lib, 
    importc: "gdk_screen_get_root_window".}
proc get_display*(screen: PScreen): PDisplay{.cdecl, dynlib: lib, 
    importc: "gdk_screen_get_display".}
proc get_number*(screen: PScreen): gint{.cdecl, dynlib: lib, 
    importc: "gdk_screen_get_number".}
proc get_window_at_pointer*(screen: PScreen, win_x: Pgint, win_y: Pgint): PWindow{.
    cdecl, dynlib: lib, importc: "gdk_screen_get_window_at_pointer".}
proc get_width*(screen: PScreen): gint{.cdecl, dynlib: lib, 
    importc: "gdk_screen_get_width".}
proc get_height*(screen: PScreen): gint{.cdecl, dynlib: lib, 
    importc: "gdk_screen_get_height".}
proc get_width_mm*(screen: PScreen): gint{.cdecl, dynlib: lib, 
    importc: "gdk_screen_get_width_mm".}
proc get_height_mm*(screen: PScreen): gint{.cdecl, dynlib: lib, 
    importc: "gdk_screen_get_height_mm".}
proc close*(screen: PScreen){.cdecl, dynlib: lib, 
                                     importc: "gdk_screen_close".}
proc list_visuals*(screen: PScreen): PGList{.cdecl, dynlib: lib, 
    importc: "gdk_screen_list_visuals".}
proc get_toplevel_windows*(screen: PScreen): PGList{.cdecl, dynlib: lib, 
    importc: "gdk_screen_get_toplevel_windows".}
proc get_n_monitors*(screen: PScreen): gint{.cdecl, dynlib: lib, 
    importc: "gdk_screen_get_n_monitors".}
proc get_monitor_geometry*(screen: PScreen, monitor_num: gint, 
                                  dest: PRectangle){.cdecl, dynlib: lib, 
    importc: "gdk_screen_get_monitor_geometry".}
proc get_monitor_at_point*(screen: PScreen, x: gint, y: gint): gint{.
    cdecl, dynlib: lib, importc: "gdk_screen_get_monitor_at_point".}
proc get_monitor_at_window*(screen: PScreen, window: PWindow): gint{.
    cdecl, dynlib: lib, importc: "gdk_screen_get_monitor_at_window".}
proc broadcast_client_message*(screen: PScreen, event: PEvent){.cdecl, 
    dynlib: lib, importc: "gdk_screen_broadcast_client_message".}
proc get_default_screen*(): PScreen{.cdecl, dynlib: lib, 
                                     importc: "gdk_get_default_screen".}
proc get_setting*(screen: PScreen, name: cstring, value: PGValue): gboolean{.
    cdecl, dynlib: lib, importc: "gdk_screen_get_setting".}
proc SELECTION_PRIMARY*(): TAtom
proc SELECTION_SECONDARY*(): TAtom
proc SELECTION_CLIPBOARD*(): TAtom
proc TARGET_BITMAP*(): TAtom
proc TARGET_COLORMAP*(): TAtom
proc TARGET_DRAWABLE*(): TAtom
proc TARGET_PIXMAP*(): TAtom
proc TARGET_STRING*(): TAtom
proc SELECTION_TYPE_ATOM*(): TAtom
proc SELECTION_TYPE_BITMAP*(): TAtom
proc SELECTION_TYPE_COLORMAP*(): TAtom
proc SELECTION_TYPE_DRAWABLE*(): TAtom
proc SELECTION_TYPE_INTEGER*(): TAtom
proc SELECTION_TYPE_PIXMAP*(): TAtom
proc SELECTION_TYPE_WINDOW*(): TAtom
proc SELECTION_TYPE_STRING*(): TAtom
proc selection_owner_set_for_display*(display: PDisplay, owner: PWindow, 
                                      selection: TAtom, time: guint32, 
                                      send_event: gboolean): gboolean{.cdecl, 
    dynlib: lib, importc: "gdk_selection_owner_set_for_display".}
proc selection_owner_get_for_display*(display: PDisplay, selection: TAtom): PWindow{.
    cdecl, dynlib: lib, importc: "gdk_selection_owner_get_for_display".}
proc selection_convert*(requestor: PWindow, selection: TAtom, target: TAtom, 
                        time: guint32){.cdecl, dynlib: lib, 
                                        importc: "gdk_selection_convert".}
proc selection_property_get*(requestor: PWindow, data: PPguchar, 
                             prop_type: PAtom, prop_format: Pgint): gboolean{.
    cdecl, dynlib: lib, importc: "gdk_selection_property_get".}
proc selection_send_notify_for_display*(display: PDisplay, requestor: guint32, 
                                        selection: TAtom, target: TAtom, 
                                        `property`: TAtom, time: guint32){.
    cdecl, dynlib: lib, importc: "gdk_selection_send_notify_for_display".}
const 
  CURRENT_TIME* = 0
  PARENT_RELATIVE* = 1
  OK* = 0
  ERROR* = - (1)
  ERROR_PARAM* = - (2)
  ERROR_FILE* = - (3)
  ERROR_MEM* = - (4)
  SHIFT_MASK* = 1 shl 0
  LOCK_MASK* = 1 shl 1
  CONTROL_MASK* = 1 shl 2
  MOD1_MASK* = 1 shl 3
  MOD2_MASK* = 1 shl 4
  MOD3_MASK* = 1 shl 5
  MOD4_MASK* = 1 shl 6
  MOD5_MASK* = 1 shl 7
  BUTTON1_MASK* = 1 shl 8
  BUTTON2_MASK* = 1 shl 9
  BUTTON3_MASK* = 1 shl 10
  BUTTON4_MASK* = 1 shl 11
  BUTTON5_MASK* = 1 shl 12
  RELEASE_MASK* = 1 shl 30
  MODIFIER_MASK* = ord(RELEASE_MASK) or 0x00001FFF
  INPUT_READ* = 1 shl 0
  INPUT_WRITE* = 1 shl 1
  INPUT_EXCEPTION* = 1 shl 2
  GRAB_SUCCESS* = 0
  GRAB_ALREADY_GRABBED* = 1
  GRAB_INVALID_TIME* = 2
  GRAB_NOT_VIEWABLE* = 3
  GRAB_FROZEN* = 4

proc ATOM_TO_POINTER*(atom: TAtom): Pointer
proc POINTER_TO_ATOM*(p: Pointer): TAtom
proc `MAKE_ATOM`*(val: guint): TAtom
proc NONE*(): TAtom
proc TYPE_VISUAL*(): GType
proc VISUAL*(anObject: Pointer): PVisual
proc VISUAL_CLASS*(klass: Pointer): PVisualClass
proc IS_VISUAL*(anObject: Pointer): bool
proc IS_VISUAL_CLASS*(klass: Pointer): bool
proc VISUAL_GET_CLASS*(obj: Pointer): PVisualClass
proc visual_get_type*(): GType{.cdecl, dynlib: lib, 
                                importc: "gdk_visual_get_type".}
const 
  WA_TITLE* = 1 shl 1
  WA_X* = 1 shl 2
  WA_Y* = 1 shl 3
  WA_CURSOR* = 1 shl 4
  WA_COLORMAP* = 1 shl 5
  WA_VISUAL* = 1 shl 6
  WA_WMCLASS* = 1 shl 7
  WA_NOREDIR* = 1 shl 8
  HINT_POS* = 1 shl 0
  HINT_MIN_SIZE* = 1 shl 1
  HINT_MAX_SIZE* = 1 shl 2
  HINT_BASE_SIZE* = 1 shl 3
  HINT_ASPECT* = 1 shl 4
  HINT_RESIZE_INC* = 1 shl 5
  HINT_WIN_GRAVITY* = 1 shl 6
  HINT_USER_POS* = 1 shl 7
  HINT_USER_SIZE* = 1 shl 8
  DECOR_ALL* = 1 shl 0
  DECOR_BORDER* = 1 shl 1
  DECOR_RESIZEH* = 1 shl 2
  DECOR_TITLE* = 1 shl 3
  DECOR_MENU* = 1 shl 4
  DECOR_MINIMIZE* = 1 shl 5
  DECOR_MAXIMIZE* = 1 shl 6
  FUNC_ALL* = 1 shl 0
  FUNC_RESIZE* = 1 shl 1
  FUNC_MOVE* = 1 shl 2
  FUNC_MINIMIZE* = 1 shl 3
  FUNC_MAXIMIZE* = 1 shl 4
  FUNC_CLOSE* = 1 shl 5
  GRAVITY_NORTH_WEST* = 1
  GRAVITY_NORTH* = 2
  GRAVITY_NORTH_EAST* = 3
  GRAVITY_WEST* = 4
  GRAVITY_CENTER* = 5
  GRAVITY_EAST* = 6
  GRAVITY_SOUTH_WEST* = 7
  GRAVITY_SOUTH* = 8
  GRAVITY_SOUTH_EAST* = 9
  GRAVITY_STATIC* = 10

proc TYPE_WINDOW*(): GType
proc WINDOW*(anObject: Pointer): PWindow
proc WINDOW_CLASS*(klass: Pointer): PWindowObjectClass
proc IS_WINDOW*(anObject: Pointer): bool
proc IS_WINDOW_CLASS*(klass: Pointer): bool
proc WINDOW_GET_CLASS*(obj: Pointer): PWindowObjectClass
proc WINDOW_OBJECT*(anObject: Pointer): PWindowObject
const 
  bm_TWindowObject_guffaw_gravity* = 0x0001'i16
  bp_TWindowObject_guffaw_gravity* = 0'i16
  bm_TWindowObject_input_only* = 0x0002'i16
  bp_TWindowObject_input_only* = 1'i16
  bm_TWindowObject_modal_hint* = 0x0004'i16
  bp_TWindowObject_modal_hint* = 2'i16
  bm_TWindowObject_destroyed* = 0x0018'i16
  bp_TWindowObject_destroyed* = 3'i16

proc WindowObject_guffaw_gravity*(a: PWindowObject): guint
proc WindowObject_set_guffaw_gravity*(a: PWindowObject, 
                                      `guffaw_gravity`: guint)
proc WindowObject_input_only*(a: PWindowObject): guint
proc WindowObject_set_input_only*(a: PWindowObject, `input_only`: guint)
proc WindowObject_modal_hint*(a: PWindowObject): guint
proc WindowObject_set_modal_hint*(a: PWindowObject, `modal_hint`: guint)
proc WindowObject_destroyed*(a: PWindowObject): guint
proc WindowObject_set_destroyed*(a: PWindowObject, `destroyed`: guint)
proc window_object_get_type*(): GType{.cdecl, dynlib: lib, 
                                       importc: "gdk_window_object_get_type".}
proc new*(parent: PWindow, attributes: PWindowAttr, attributes_mask: gint): PWindow{.
    cdecl, dynlib: lib, importc: "gdk_window_new".}
proc destroy*(window: PWindow){.cdecl, dynlib: lib, 
                                       importc: "gdk_window_destroy".}
proc get_window_type*(window: PWindow): TWindowType{.cdecl, dynlib: lib, 
    importc: "gdk_window_get_window_type".}
proc window_at_pointer*(win_x: Pgint, win_y: Pgint): PWindow{.cdecl, 
    dynlib: lib, importc: "gdk_window_at_pointer".}
proc show*(window: PWindow){.cdecl, dynlib: lib, 
                                    importc: "gdk_window_show".}
proc hide*(window: PWindow){.cdecl, dynlib: lib, 
                                    importc: "gdk_window_hide".}
proc withdraw*(window: PWindow){.cdecl, dynlib: lib, 
                                        importc: "gdk_window_withdraw".}
proc show_unraised*(window: PWindow){.cdecl, dynlib: lib, 
    importc: "gdk_window_show_unraised".}
proc move*(window: PWindow, x: gint, y: gint){.cdecl, dynlib: lib, 
    importc: "gdk_window_move".}
proc resize*(window: PWindow, width: gint, height: gint){.cdecl, 
    dynlib: lib, importc: "gdk_window_resize".}
proc move_resize*(window: PWindow, x: gint, y: gint, width: gint, 
                         height: gint){.cdecl, dynlib: lib, 
                                        importc: "gdk_window_move_resize".}
proc reparent*(window: PWindow, new_parent: PWindow, x: gint, y: gint){.
    cdecl, dynlib: lib, importc: "gdk_window_reparent".}
proc clear*(window: PWindow){.cdecl, dynlib: lib, 
                                     importc: "gdk_window_clear".}
proc clear_area*(window: PWindow, x: gint, y: gint, width: gint, 
                        height: gint){.cdecl, dynlib: lib, 
                                       importc: "gdk_window_clear_area".}
proc clear_area_e*(window: PWindow, x: gint, y: gint, width: gint, 
                          height: gint){.cdecl, dynlib: lib, 
    importc: "gdk_window_clear_area_e".}
proc `raise`*(window: PWindow){.cdecl, dynlib: lib, 
                                importc: "gdk_window_raise".}
proc lower*(window: PWindow){.cdecl, dynlib: lib, 
                                     importc: "gdk_window_lower".}
proc focus*(window: PWindow, timestamp: guint32){.cdecl, dynlib: lib, 
    importc: "gdk_window_focus".}
proc set_user_data*(window: PWindow, user_data: gpointer){.cdecl, 
    dynlib: lib, importc: "gdk_window_set_user_data".}
proc set_override_redirect*(window: PWindow, override_redirect: gboolean){.
    cdecl, dynlib: lib, importc: "gdk_window_set_override_redirect".}
proc add_filter*(window: PWindow, `function`: TFilterFunc, data: gpointer){.
    cdecl, dynlib: lib, importc: "gdk_window_add_filter".}
proc remove_filter*(window: PWindow, `function`: TFilterFunc, 
                           data: gpointer){.cdecl, dynlib: lib, 
    importc: "gdk_window_remove_filter".}
proc scroll*(window: PWindow, dx: gint, dy: gint){.cdecl, dynlib: lib, 
    importc: "gdk_window_scroll".}
proc shape_combine_mask*(window: PWindow, mask: PBitmap, x: gint, y: gint){.
    cdecl, dynlib: lib, importc: "gdk_window_shape_combine_mask".}
proc shape_combine_region*(window: PWindow, shape_region: PRegion, 
                                  offset_x: gint, offset_y: gint){.cdecl, 
    dynlib: lib, importc: "gdk_window_shape_combine_region".}
proc set_child_shapes*(window: PWindow){.cdecl, dynlib: lib, 
    importc: "gdk_window_set_child_shapes".}
proc merge_child_shapes*(window: PWindow){.cdecl, dynlib: lib, 
    importc: "gdk_window_merge_child_shapes".}
proc is_visible*(window: PWindow): gboolean{.cdecl, dynlib: lib, 
    importc: "gdk_window_is_visible".}
proc is_viewable*(window: PWindow): gboolean{.cdecl, dynlib: lib, 
    importc: "gdk_window_is_viewable".}
proc get_state*(window: PWindow): TWindowState{.cdecl, dynlib: lib, 
    importc: "gdk_window_get_state".}
proc set_static_gravities*(window: PWindow, use_static: gboolean): gboolean{.
    cdecl, dynlib: lib, importc: "gdk_window_set_static_gravities".}
proc window_foreign_new_for_display*(display: PDisplay, anid: TNativeWindow): PWindow{.
    cdecl, dynlib: lib, importc: "gdk_window_foreign_new_for_display".}
proc window_lookup_for_display*(display: PDisplay, anid: TNativeWindow): PWindow{.
    cdecl, dynlib: lib, importc: "gdk_window_lookup_for_display".}
proc set_type_hint*(window: PWindow, hint: TWindowTypeHint){.cdecl, 
    dynlib: lib, importc: "gdk_window_set_type_hint".}
proc set_modal_hint*(window: PWindow, modal: gboolean){.cdecl, 
    dynlib: lib, importc: "gdk_window_set_modal_hint".}
proc set_geometry_hints*(window: PWindow, geometry: PGeometry, 
                                geom_mask: TWindowHints){.cdecl, dynlib: lib, 
    importc: "gdk_window_set_geometry_hints".}
proc set_sm_client_id*(sm_client_id: cstring){.cdecl, dynlib: lib, 
    importc: "gdk_set_sm_client_id".}
proc begin_paint_rect*(window: PWindow, rectangle: PRectangle){.cdecl, 
    dynlib: lib, importc: "gdk_window_begin_paint_rect".}
proc begin_paint_region*(window: PWindow, region: PRegion){.cdecl, 
    dynlib: lib, importc: "gdk_window_begin_paint_region".}
proc end_paint*(window: PWindow){.cdecl, dynlib: lib, 
    importc: "gdk_window_end_paint".}
proc set_title*(window: PWindow, title: cstring){.cdecl, dynlib: lib, 
    importc: "gdk_window_set_title".}
proc set_role*(window: PWindow, role: cstring){.cdecl, dynlib: lib, 
    importc: "gdk_window_set_role".}
proc set_transient_for*(window: PWindow, parent: PWindow){.cdecl, 
    dynlib: lib, importc: "gdk_window_set_transient_for".}
proc set_background*(window: PWindow, color: PColor){.cdecl, dynlib: lib, 
    importc: "gdk_window_set_background".}
proc set_back_pixmap*(window: PWindow, pixmap: PPixmap, 
                             parent_relative: gboolean){.cdecl, dynlib: lib, 
    importc: "gdk_window_set_back_pixmap".}
proc set_cursor*(window: PWindow, cursor: PCursor){.cdecl, dynlib: lib, 
    importc: "gdk_window_set_cursor".}
proc get_user_data*(window: PWindow, data: gpointer){.cdecl, dynlib: lib, 
    importc: "gdk_window_get_user_data".}
proc get_geometry*(window: PWindow, x: Pgint, y: Pgint, width: Pgint, 
                          height: Pgint, depth: Pgint){.cdecl, dynlib: lib, 
    importc: "gdk_window_get_geometry".}
proc get_position*(window: PWindow, x: Pgint, y: Pgint){.cdecl, 
    dynlib: lib, importc: "gdk_window_get_position".}
proc get_origin*(window: PWindow, x: Pgint, y: Pgint): gint{.cdecl, 
    dynlib: lib, importc: "gdk_window_get_origin".}
proc get_root_origin*(window: PWindow, x: Pgint, y: Pgint){.cdecl, 
    dynlib: lib, importc: "gdk_window_get_root_origin".}
proc get_frame_extents*(window: PWindow, rect: PRectangle){.cdecl, 
    dynlib: lib, importc: "gdk_window_get_frame_extents".}
proc get_pointer*(window: PWindow, x: Pgint, y: Pgint, 
                         mask: PModifierType): PWindow{.cdecl, dynlib: lib, 
    importc: "gdk_window_get_pointer".}
proc get_parent*(window: PWindow): PWindow{.cdecl, dynlib: lib, 
    importc: "gdk_window_get_parent".}
proc get_toplevel*(window: PWindow): PWindow{.cdecl, dynlib: lib, 
    importc: "gdk_window_get_toplevel".}
proc get_children*(window: PWindow): PGList{.cdecl, dynlib: lib, 
    importc: "gdk_window_get_children".}
proc peek_children*(window: PWindow): PGList{.cdecl, dynlib: lib, 
    importc: "gdk_window_peek_children".}
proc get_events*(window: PWindow): TEventMask{.cdecl, dynlib: lib, 
    importc: "gdk_window_get_events".}
proc set_events*(window: PWindow, event_mask: TEventMask){.cdecl, 
    dynlib: lib, importc: "gdk_window_set_events".}
proc set_icon_list*(window: PWindow, pixbufs: PGList){.cdecl, 
    dynlib: lib, importc: "gdk_window_set_icon_list".}
proc set_icon*(window: PWindow, icon_window: PWindow, pixmap: PPixmap, 
                      mask: PBitmap){.cdecl, dynlib: lib, 
                                      importc: "gdk_window_set_icon".}
proc set_icon_name*(window: PWindow, name: cstring){.cdecl, dynlib: lib, 
    importc: "gdk_window_set_icon_name".}
proc set_group*(window: PWindow, leader: PWindow){.cdecl, dynlib: lib, 
    importc: "gdk_window_set_group".}
proc set_decorations*(window: PWindow, decorations: TWMDecoration){.
    cdecl, dynlib: lib, importc: "gdk_window_set_decorations".}
proc get_decorations*(window: PWindow, decorations: PWMDecoration): gboolean{.
    cdecl, dynlib: lib, importc: "gdk_window_get_decorations".}
proc set_functions*(window: PWindow, functions: TWMFunction){.cdecl, 
    dynlib: lib, importc: "gdk_window_set_functions".}
proc iconify*(window: PWindow){.cdecl, dynlib: lib, 
                                       importc: "gdk_window_iconify".}
proc deiconify*(window: PWindow){.cdecl, dynlib: lib, 
    importc: "gdk_window_deiconify".}
proc stick*(window: PWindow){.cdecl, dynlib: lib, 
                                     importc: "gdk_window_stick".}
proc unstick*(window: PWindow){.cdecl, dynlib: lib, 
                                       importc: "gdk_window_unstick".}
proc maximize*(window: PWindow){.cdecl, dynlib: lib, 
                                        importc: "gdk_window_maximize".}
proc unmaximize*(window: PWindow){.cdecl, dynlib: lib, 
    importc: "gdk_window_unmaximize".}
proc register_dnd*(window: PWindow){.cdecl, dynlib: lib, 
    importc: "gdk_window_register_dnd".}
proc begin_resize_drag*(window: PWindow, edge: TWindowEdge, button: gint, 
                               root_x: gint, root_y: gint, timestamp: guint32){.
    cdecl, dynlib: lib, importc: "gdk_window_begin_resize_drag".}
proc begin_move_drag*(window: PWindow, button: gint, root_x: gint, 
                             root_y: gint, timestamp: guint32){.cdecl, 
    dynlib: lib, importc: "gdk_window_begin_move_drag".}
proc invalidate_rect*(window: PWindow, rect: PRectangle, 
                             invalidate_children: gboolean){.cdecl, dynlib: lib, 
    importc: "gdk_window_invalidate_rect".}
proc invalidate_region*(window: PWindow, region: PRegion, 
                               invalidate_children: gboolean){.cdecl, 
    dynlib: lib, importc: "gdk_window_invalidate_region".}
proc invalidate_maybe_recurse*(window: PWindow, region: PRegion, 
    child_func: window_invalidate_maybe_recurse_child_func, user_data: gpointer){.
    cdecl, dynlib: lib, importc: "gdk_window_invalidate_maybe_recurse".}
proc get_update_area*(window: PWindow): PRegion{.cdecl, dynlib: lib, 
    importc: "gdk_window_get_update_area".}
proc freeze_updates*(window: PWindow){.cdecl, dynlib: lib, 
    importc: "gdk_window_freeze_updates".}
proc thaw_updates*(window: PWindow){.cdecl, dynlib: lib, 
    importc: "gdk_window_thaw_updates".}
proc window_process_all_updates*(){.cdecl, dynlib: lib, 
                                    importc: "gdk_window_process_all_updates".}
proc process_updates*(window: PWindow, update_children: gboolean){.cdecl, 
    dynlib: lib, importc: "gdk_window_process_updates".}
proc window_set_debug_updates*(setting: gboolean){.cdecl, dynlib: lib, 
    importc: "gdk_window_set_debug_updates".}
proc window_constrain_size*(geometry: PGeometry, flags: guint, width: gint, 
                            height: gint, new_width: Pgint, new_height: Pgint){.
    cdecl, dynlib: lib, importc: "gdk_window_constrain_size".}
proc get_internal_paint_info*(window: PWindow, e: var PDrawable, 
                                     x_offset: Pgint, y_offset: Pgint){.cdecl, 
    dynlib: lib, importc: "gdk_window_get_internal_paint_info".}
proc set_pointer_hooks*(new_hooks: PPointerHooks): PPointerHooks{.cdecl, 
    dynlib: lib, importc: "gdk_set_pointer_hooks".}
proc get_default_root_window*(): PWindow{.cdecl, dynlib: lib, 
    importc: "gdk_get_default_root_window".}
proc parse_args*(argc: Pgint, v: var PPgchar){.cdecl, dynlib: lib, 
    importc: "gdk_parse_args".}
proc init*(argc: Pgint, v: var PPgchar){.cdecl, dynlib: lib, importc: "gdk_init".}
proc init_check*(argc: Pgint, v: var PPgchar): gboolean{.cdecl, dynlib: lib, 
    importc: "gdk_init_check".}
when not defined(DISABLE_DEPRECATED): 
  proc exit*(error_code: gint){.cdecl, dynlib: lib, importc: "gdk_exit".}
proc set_locale*(): cstring{.cdecl, dynlib: lib, importc: "gdk_set_locale".}
proc get_program_class*(): cstring{.cdecl, dynlib: lib, 
                                    importc: "gdk_get_program_class".}
proc set_program_class*(program_class: cstring){.cdecl, dynlib: lib, 
    importc: "gdk_set_program_class".}
proc error_trap_push*(){.cdecl, dynlib: lib, importc: "gdk_error_trap_push".}
proc error_trap_pop*(): gint{.cdecl, dynlib: lib, importc: "gdk_error_trap_pop".}
when not defined(DISABLE_DEPRECATED): 
  proc set_use_xshm*(use_xshm: gboolean){.cdecl, dynlib: lib, 
      importc: "gdk_set_use_xshm".}
  proc get_use_xshm*(): gboolean{.cdecl, dynlib: lib, 
                                  importc: "gdk_get_use_xshm".}
proc get_display*(): cstring{.cdecl, dynlib: lib, importc: "gdk_get_display".}
proc get_display_arg_name*(): cstring{.cdecl, dynlib: lib, 
                                       importc: "gdk_get_display_arg_name".}
when not defined(DISABLE_DEPRECATED): 
  proc input_add_full*(source: gint, condition: TInputCondition, 
                       `function`: TInputFunction, data: gpointer, 
                       destroy: TDestroyNotify): gint{.cdecl, dynlib: lib, 
      importc: "gdk_input_add_full".}
  proc input_add*(source: gint, condition: TInputCondition, 
                  `function`: TInputFunction, data: gpointer): gint{.cdecl, 
      dynlib: lib, importc: "gdk_input_add".}
  proc input_remove*(tag: gint){.cdecl, dynlib: lib, importc: "gdk_input_remove".}
proc pointer_grab*(window: PWindow, owner_events: gboolean, 
                   event_mask: TEventMask, confine_to: PWindow, cursor: PCursor, 
                   time: guint32): TGrabStatus{.cdecl, dynlib: lib, 
    importc: "gdk_pointer_grab".}
proc keyboard_grab*(window: PWindow, owner_events: gboolean, time: guint32): TGrabStatus{.
    cdecl, dynlib: lib, importc: "gdk_keyboard_grab".}
when not defined(MULTIHEAD_SAFE): 
  proc pointer_ungrab*(time: guint32){.cdecl, dynlib: lib, 
                                       importc: "gdk_pointer_ungrab".}
  proc keyboard_ungrab*(time: guint32){.cdecl, dynlib: lib, 
                                        importc: "gdk_keyboard_ungrab".}
  proc pointer_is_grabbed*(): gboolean{.cdecl, dynlib: lib, 
                                        importc: "gdk_pointer_is_grabbed".}
  proc screen_width*(): gint{.cdecl, dynlib: lib, importc: "gdk_screen_width".}
  proc screen_height*(): gint{.cdecl, dynlib: lib, importc: "gdk_screen_height".}
  proc screen_width_mm*(): gint{.cdecl, dynlib: lib, 
                                 importc: "gdk_screen_width_mm".}
  proc screen_height_mm*(): gint{.cdecl, dynlib: lib, 
                                  importc: "gdk_screen_height_mm".}
  proc beep*(){.cdecl, dynlib: lib, importc: "gdk_beep".}
proc flush*(){.cdecl, dynlib: lib, importc: "gdk_flush".}
when not defined(MULTIHEAD_SAFE): 
  proc set_double_click_time*(msec: guint){.cdecl, dynlib: lib, 
      importc: "gdk_set_double_click_time".}
proc intersect*(src1: PRectangle, src2: PRectangle, dest: PRectangle): gboolean{.
    cdecl, dynlib: lib, importc: "gdk_rectangle_intersect".}
proc union*(src1: PRectangle, src2: PRectangle, dest: PRectangle){.
    cdecl, dynlib: lib, importc: "gdk_rectangle_union".}
proc rectangle_get_type*(): GType{.cdecl, dynlib: lib, 
                                   importc: "gdk_rectangle_get_type".}
proc TYPE_RECTANGLE*(): GType
proc wcstombs*(src: PWChar): cstring{.cdecl, dynlib: lib, 
                                      importc: "gdk_wcstombs".}
proc mbstowcs*(dest: PWChar, src: cstring, dest_max: gint): gint{.cdecl, 
    dynlib: lib, importc: "gdk_mbstowcs".}
when not defined(MULTIHEAD_SAFE): 
  proc event_send_client_message*(event: PEvent, xid: guint32): gboolean{.cdecl, 
      dynlib: lib, importc: "gdk_event_send_client_message".}
  proc event_send_clientmessage_toall*(event: PEvent){.cdecl, dynlib: lib, 
      importc: "gdk_event_send_clientmessage_toall".}
proc event_send_client_message_for_display*(display: PDisplay, event: PEvent, 
    xid: guint32): gboolean{.cdecl, dynlib: lib, importc: "gdk_event_send_client_message_for_display".}
proc threads_enter*(){.cdecl, dynlib: lib, importc: "gdk_threads_enter".}
proc threads_leave*(){.cdecl, dynlib: lib, importc: "gdk_threads_leave".}
proc threads_init*(){.cdecl, dynlib: lib, importc: "gdk_threads_init".}
proc TYPE_RECTANGLE*(): GType = 
  result = rectangle_get_type()

proc TYPE_COLORMAP*(): GType = 
  result = colormap_get_type()

proc COLORMAP*(anObject: pointer): PColormap = 
  result = cast[PColormap](G_TYPE_CHECK_INSTANCE_CAST(anObject, TYPE_COLORMAP()))

proc COLORMAP_CLASS*(klass: pointer): PColormapClass = 
  result = cast[PColormapClass](G_TYPE_CHECK_CLASS_CAST(klass, TYPE_COLORMAP()))

proc IS_COLORMAP*(anObject: pointer): bool = 
  result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_COLORMAP())

proc IS_COLORMAP_CLASS*(klass: pointer): bool = 
  result = G_TYPE_CHECK_CLASS_TYPE(klass, TYPE_COLORMAP())

proc COLORMAP_GET_CLASS*(obj: pointer): PColormapClass = 
  result = cast[PColormapClass](G_TYPE_INSTANCE_GET_CLASS(obj, TYPE_COLORMAP()))

proc TYPE_COLOR*(): GType = 
  result = gdk2.color_get_type()

proc destroy*(cursor: PCursor) = 
  unref(cursor)

proc TYPE_CURSOR*(): GType = 
  result = cursor_get_type()

proc TYPE_DRAG_CONTEXT*(): GType = 
  result = drag_context_get_type()

proc DRAG_CONTEXT*(anObject: Pointer): PDragContext = 
  result = cast[PDragContext](G_TYPE_CHECK_INSTANCE_CAST(anObject, 
      TYPE_DRAG_CONTEXT()))

proc DRAG_CONTEXT_CLASS*(klass: Pointer): PDragContextClass = 
  result = cast[PDragContextClass](G_TYPE_CHECK_CLASS_CAST(klass, 
      TYPE_DRAG_CONTEXT()))

proc IS_DRAG_CONTEXT*(anObject: Pointer): bool = 
  result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_DRAG_CONTEXT())

proc IS_DRAG_CONTEXT_CLASS*(klass: Pointer): bool = 
  result = G_TYPE_CHECK_CLASS_TYPE(klass, TYPE_DRAG_CONTEXT())

proc DRAG_CONTEXT_GET_CLASS*(obj: Pointer): PDragContextClass = 
  result = cast[PDragContextClass](G_TYPE_INSTANCE_GET_CLASS(obj, 
      TYPE_DRAG_CONTEXT()))

proc region_EXTENTCHECK*(r1, r2: PRegionBox): bool = 
  result = ((r1.x2) > r2.x1) and ((r1.x1) < r2.x2) and ((r1.y2) > r2.y1) and
      ((r1.y1) < r2.y2)

proc EXTENTS*(r: PRegionBox, idRect: PRegion) = 
  if ((r.x1) < idRect.extents.x1): 
    idRect.extents.x1 = r.x1
  if (r.y1) < idRect.extents.y1: 
    idRect.extents.y1 = r.y1
  if (r.x2) > idRect.extents.x2: 
    idRect.extents.x2 = r.x2

proc MEMCHECK*(reg: PRegion, ARect, firstrect: var PRegionBox): bool = 
  assert(false)               # to implement
  
proc CHECK_PREVIOUS*(Reg: PRegion, R: PRegionBox, 
                            Rx1, Ry1, Rx2, Ry2: gint): bool = 
  assert(false)               # to implement
  
proc ADDRECT*(reg: PRegion, r: PRegionBox, rx1, ry1, rx2, ry2: gint) = 
  if (((rx1) < rx2) and ((ry1) < ry2) and
      CHECK_PREVIOUS(reg, r, rx1, ry1, rx2, ry2)): 
    r.x1 = rx1
    r.y1 = ry1
    r.x2 = rx2
    r.y2 = ry2

proc ADDRECTNOX*(reg: PRegion, r: PRegionBox, rx1, ry1, rx2, ry2: gint) = 
  if (((rx1) < rx2) and ((ry1) < ry2) and
      CHECK_PREVIOUS(reg, r, rx1, ry1, rx2, ry2)): 
    r.x1 = rx1
    r.y1 = ry1
    r.x2 = rx2
    r.y2 = ry2
    inc(reg.numRects)

proc EMPTY_REGION*(pReg: PRegion): bool = 
  result = pReg.numRects == 0'i32

proc REGION_NOT_EMPTY*(pReg: PRegion): bool = 
  result = pReg.numRects != 0'i32

proc region_INBOX*(r: TRegionBox, x, y: gint): bool = 
  result = ((((r.x2) > x) and ((r.x1) <= x)) and ((r.y2) > y)) and
      ((r.y1) <= y)

proc TYPE_DRAWABLE*(): GType = 
  result = drawable_get_type()

proc DRAWABLE*(anObject: Pointer): PDrawable = 
  result = cast[PDrawable](G_TYPE_CHECK_INSTANCE_CAST(anObject, TYPE_DRAWABLE()))

proc DRAWABLE_CLASS*(klass: Pointer): PDrawableClass = 
  result = cast[PDrawableClass](G_TYPE_CHECK_CLASS_CAST(klass, TYPE_DRAWABLE()))

proc IS_DRAWABLE*(anObject: Pointer): bool = 
  result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_DRAWABLE())

proc IS_DRAWABLE_CLASS*(klass: Pointer): bool = 
  result = G_TYPE_CHECK_CLASS_TYPE(klass, TYPE_DRAWABLE())

proc DRAWABLE_GET_CLASS*(obj: Pointer): PDrawableClass = 
  result = cast[PDrawableClass](G_TYPE_INSTANCE_GET_CLASS(obj, TYPE_DRAWABLE()))

proc pixmap*(drawable: PDrawable, gc: PGC, src: PDrawable, xsrc: gint, 
                  ysrc: gint, xdest: gint, ydest: gint, width: gint, 
                  height: gint) = 
  drawable(drawable, gc, src, xsrc, ysrc, xdest, ydest, width, height)

proc bitmap*(drawable: PDrawable, gc: PGC, src: PDrawable, xsrc: gint, 
                  ysrc: gint, xdest: gint, ydest: gint, width: gint, 
                  height: gint) = 
  drawable(drawable, gc, src, xsrc, ysrc, xdest, ydest, width, height)

proc TYPE_EVENT*(): GType = 
  result = event_get_type()

proc TYPE_FONT*(): GType = 
  result = gdk2.font_get_type()

proc TYPE_GC*(): GType = 
  result = gc_get_type()

proc GC*(anObject: Pointer): PGC = 
  result = cast[PGC](G_TYPE_CHECK_INSTANCE_CAST(anObject, TYPE_GC()))

proc GC_CLASS*(klass: Pointer): PGCClass = 
  result = cast[PGCClass](G_TYPE_CHECK_CLASS_CAST(klass, TYPE_GC()))

proc IS_GC*(anObject: Pointer): bool = 
  result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_GC())

proc IS_GC_CLASS*(klass: Pointer): bool = 
  result = G_TYPE_CHECK_CLASS_TYPE(klass, TYPE_GC())

proc GC_GET_CLASS*(obj: Pointer): PGCClass = 
  result = cast[PGCClass](G_TYPE_INSTANCE_GET_CLASS(obj, TYPE_GC()))

proc destroy*(gc: PGC) = 
  g_object_unref(G_OBJECT(gc))

proc TYPE_IMAGE*(): GType = 
  result = image_get_type()

proc IMAGE*(anObject: Pointer): PImage = 
  result = cast[PImage](G_TYPE_CHECK_INSTANCE_CAST(anObject, TYPE_IMAGE()))

proc IMAGE_CLASS*(klass: Pointer): PImageClass = 
  result = cast[PImageClass](G_TYPE_CHECK_CLASS_CAST(klass, TYPE_IMAGE()))

proc IS_IMAGE*(anObject: Pointer): bool = 
  result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_IMAGE())

proc IS_IMAGE_CLASS*(klass: Pointer): bool = 
  result = G_TYPE_CHECK_CLASS_TYPE(klass, TYPE_IMAGE())

proc IMAGE_GET_CLASS*(obj: Pointer): PImageClass = 
  result = cast[PImageClass](G_TYPE_INSTANCE_GET_CLASS(obj, TYPE_IMAGE()))

proc destroy*(image: PImage) = 
  g_object_unref(G_OBJECT(image))

proc TYPE_DEVICE*(): GType = 
  result = device_get_type()

proc DEVICE*(anObject: Pointer): PDevice = 
  result = cast[PDevice](G_TYPE_CHECK_INSTANCE_CAST(anObject, TYPE_DEVICE()))

proc DEVICE_CLASS*(klass: Pointer): PDeviceClass = 
  result = cast[PDeviceClass](G_TYPE_CHECK_CLASS_CAST(klass, TYPE_DEVICE()))

proc IS_DEVICE*(anObject: Pointer): bool = 
  result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_DEVICE())

proc IS_DEVICE_CLASS*(klass: Pointer): bool = 
  result = G_TYPE_CHECK_CLASS_TYPE(klass, TYPE_DEVICE())

proc DEVICE_GET_CLASS*(obj: Pointer): PDeviceClass = 
  result = cast[PDeviceClass](G_TYPE_INSTANCE_GET_CLASS(obj, TYPE_DEVICE()))

proc TYPE_KEYMAP*(): GType = 
  result = keymap_get_type()

proc KEYMAP*(anObject: Pointer): PKeymap = 
  result = cast[PKeymap](G_TYPE_CHECK_INSTANCE_CAST(anObject, TYPE_KEYMAP()))

proc KEYMAP_CLASS*(klass: Pointer): PKeymapClass = 
  result = cast[PKeymapClass](G_TYPE_CHECK_CLASS_CAST(klass, TYPE_KEYMAP()))

proc IS_KEYMAP*(anObject: Pointer): bool = 
  result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_KEYMAP())

proc IS_KEYMAP_CLASS*(klass: Pointer): bool = 
  result = G_TYPE_CHECK_CLASS_TYPE(klass, TYPE_KEYMAP())

proc KEYMAP_GET_CLASS*(obj: Pointer): PKeymapClass = 
  result = cast[PKeymapClass](G_TYPE_INSTANCE_GET_CLASS(obj, TYPE_KEYMAP()))

proc TYPE_PIXMAP*(): GType = 
  result = pixmap_get_type()

proc PIXMAP*(anObject: Pointer): PPixmap = 
  result = cast[PPixmap](G_TYPE_CHECK_INSTANCE_CAST(anObject, TYPE_PIXMAP()))

proc PIXMAP_CLASS*(klass: Pointer): PPixmapObjectClass = 
  result = cast[PPixmapObjectClass](G_TYPE_CHECK_CLASS_CAST(klass, TYPE_PIXMAP()))

proc IS_PIXMAP*(anObject: Pointer): bool = 
  result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_PIXMAP())

proc IS_PIXMAP_CLASS*(klass: Pointer): bool = 
  result = G_TYPE_CHECK_CLASS_TYPE(klass, TYPE_PIXMAP())

proc PIXMAP_GET_CLASS*(obj: Pointer): PPixmapObjectClass = 
  result = cast[PPixmapObjectClass](G_TYPE_INSTANCE_GET_CLASS(obj, TYPE_PIXMAP()))

proc PIXMAP_OBJECT*(anObject: Pointer): PPixmapObject = 
  result = cast[PPixmapObject](PIXMAP(anObject))

proc bitmap_ref*(drawable: PDrawable): PDrawable = 
  result = DRAWABLE(g_object_ref(G_OBJECT(drawable)))

proc bitmap_unref*(drawable: PDrawable) = 
  g_object_unref(G_OBJECT(drawable))

proc pixmap_ref*(drawable: PDrawable): PDrawable = 
  result = DRAWABLE(g_object_ref(G_OBJECT(drawable)))

proc pixmap_unref*(drawable: PDrawable) = 
  g_object_unref(G_OBJECT(drawable))

proc rgb_get_cmap*(): PColormap = 
  result = nil                #gdk_rgb_get_colormap()
  
proc TYPE_DISPLAY*(): GType = 
  nil
  #result = nil
  
proc DISPLAY_OBJECT*(anObject: pointer): PDisplay = 
  result = cast[PDisplay](G_TYPE_CHECK_INSTANCE_CAST(anObject, TYPE_DISPLAY()))

proc DISPLAY_CLASS*(klass: pointer): PDisplayClass = 
  result = cast[PDisplayClass](G_TYPE_CHECK_CLASS_CAST(klass, TYPE_DISPLAY()))

proc IS_DISPLAY*(anObject: pointer): bool = 
  result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_DISPLAY())

proc IS_DISPLAY_CLASS*(klass: pointer): bool = 
  result = G_TYPE_CHECK_CLASS_TYPE(klass, TYPE_DISPLAY())

proc DISPLAY_GET_CLASS*(obj: pointer): PDisplayClass = 
  result = cast[PDisplayClass](G_TYPE_INSTANCE_GET_CLASS(obj, TYPE_DISPLAY()))

proc TYPE_SCREEN*(): GType = 
  nil

proc SCREEN*(anObject: Pointer): PScreen = 
  result = cast[PScreen](G_TYPE_CHECK_INSTANCE_CAST(anObject, TYPE_SCREEN()))

proc SCREEN_CLASS*(klass: Pointer): PScreenClass = 
  result = cast[PScreenClass](G_TYPE_CHECK_CLASS_CAST(klass, TYPE_SCREEN()))

proc IS_SCREEN*(anObject: Pointer): bool = 
  result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_SCREEN())

proc IS_SCREEN_CLASS*(klass: Pointer): bool = 
  result = G_TYPE_CHECK_CLASS_TYPE(klass, TYPE_SCREEN())

proc SCREEN_GET_CLASS*(obj: Pointer): PScreenClass = 
  result = cast[PScreenClass](G_TYPE_INSTANCE_GET_CLASS(obj, TYPE_SCREEN()))

proc SELECTION_PRIMARY*(): TAtom = 
  result = `MAKE_ATOM`(1)

proc SELECTION_SECONDARY*(): TAtom = 
  result = `MAKE_ATOM`(2)

proc SELECTION_CLIPBOARD*(): TAtom = 
  result = `MAKE_ATOM`(69)

proc TARGET_BITMAP*(): TAtom = 
  result = `MAKE_ATOM`(5)

proc TARGET_COLORMAP*(): TAtom = 
  result = `MAKE_ATOM`(7)

proc TARGET_DRAWABLE*(): TAtom = 
  result = `MAKE_ATOM`(17)

proc TARGET_PIXMAP*(): TAtom = 
  result = `MAKE_ATOM`(20)

proc TARGET_STRING*(): TAtom = 
  result = `MAKE_ATOM`(31)

proc SELECTION_TYPE_ATOM*(): TAtom = 
  result = `MAKE_ATOM`(4)

proc SELECTION_TYPE_BITMAP*(): TAtom = 
  result = `MAKE_ATOM`(5)

proc SELECTION_TYPE_COLORMAP*(): TAtom = 
  result = `MAKE_ATOM`(7)

proc SELECTION_TYPE_DRAWABLE*(): TAtom = 
  result = `MAKE_ATOM`(17)

proc SELECTION_TYPE_INTEGER*(): TAtom = 
  result = `MAKE_ATOM`(19)

proc SELECTION_TYPE_PIXMAP*(): TAtom = 
  result = `MAKE_ATOM`(20)

proc SELECTION_TYPE_WINDOW*(): TAtom = 
  result = `MAKE_ATOM`(33)

proc SELECTION_TYPE_STRING*(): TAtom = 
  result = `MAKE_ATOM`(31)

proc ATOM_TO_POINTER*(atom: TAtom): pointer = 
  result = cast[Pointer](atom)

proc POINTER_TO_ATOM*(p: Pointer): TAtom = 
  result = cast[TAtom](p)

proc `MAKE_ATOM`*(val: guint): TAtom = 
  result = cast[TAtom](val)

proc NONE*(): TAtom = 
  result = `MAKE_ATOM`(0)

proc TYPE_VISUAL*(): GType = 
  result = visual_get_type()

proc VISUAL*(anObject: Pointer): PVisual = 
  result = cast[PVisual](G_TYPE_CHECK_INSTANCE_CAST(anObject, TYPE_VISUAL()))

proc VISUAL_CLASS*(klass: Pointer): PVisualClass = 
  result = cast[PVisualClass](G_TYPE_CHECK_CLASS_CAST(klass, TYPE_VISUAL()))

proc IS_VISUAL*(anObject: Pointer): bool = 
  result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_VISUAL())

proc IS_VISUAL_CLASS*(klass: Pointer): bool = 
  result = G_TYPE_CHECK_CLASS_TYPE(klass, TYPE_VISUAL())

proc VISUAL_GET_CLASS*(obj: Pointer): PVisualClass = 
  result = cast[PVisualClass](G_TYPE_INSTANCE_GET_CLASS(obj, TYPE_VISUAL()))

proc reference*(v: PVisual) = 
  discard g_object_ref(v)

proc unref*(v: PVisual) = 
  g_object_unref(v)

proc TYPE_WINDOW*(): GType = 
  result = window_object_get_type()

proc WINDOW*(anObject: Pointer): PWindow = 
  result = cast[PWindow](G_TYPE_CHECK_INSTANCE_CAST(anObject, TYPE_WINDOW()))

proc WINDOW_CLASS*(klass: Pointer): PWindowObjectClass = 
  result = cast[PWindowObjectClass](G_TYPE_CHECK_CLASS_CAST(klass, TYPE_WINDOW()))

proc IS_WINDOW*(anObject: Pointer): bool = 
  result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_WINDOW())

proc IS_WINDOW_CLASS*(klass: Pointer): bool = 
  result = G_TYPE_CHECK_CLASS_TYPE(klass, TYPE_WINDOW())

proc WINDOW_GET_CLASS*(obj: Pointer): PWindowObjectClass = 
  result = cast[PWindowObjectClass](G_TYPE_INSTANCE_GET_CLASS(obj, TYPE_WINDOW()))

proc WINDOW_OBJECT*(anObject: Pointer): PWindowObject = 
  result = cast[PWindowObject](WINDOW(anObject))

proc WindowObject_guffaw_gravity*(a: PWindowObject): guint = 
  result = (a.flag0 and bm_TWindowObject_guffaw_gravity) shr
      bp_TWindowObject_guffaw_gravity

proc WindowObject_set_guffaw_gravity*(a: PWindowObject, 
                                      `guffaw_gravity`: guint) = 
  a.flag0 = a.flag0 or
      (int16(`guffaw_gravity` shl bp_TWindowObject_guffaw_gravity) and
      bm_TWindowObject_guffaw_gravity)

proc WindowObject_input_only*(a: PWindowObject): guint = 
  result = (a.flag0 and bm_TWindowObject_input_only) shr
      bp_TWindowObject_input_only

proc WindowObject_set_input_only*(a: PWindowObject, `input_only`: guint) = 
  a.flag0 = a.flag0 or
      (int16(`input_only` shl bp_TWindowObject_input_only) and
      bm_TWindowObject_input_only)

proc WindowObject_modal_hint*(a: PWindowObject): guint = 
  result = (a.flag0 and bm_TWindowObject_modal_hint) shr
      bp_TWindowObject_modal_hint

proc WindowObject_set_modal_hint*(a: PWindowObject, `modal_hint`: guint) = 
  a.flag0 = a.flag0 or
      (int16(`modal_hint` shl bp_TWindowObject_modal_hint) and
      bm_TWindowObject_modal_hint)

proc WindowObject_destroyed*(a: PWindowObject): guint = 
  result = (a.flag0 and bm_TWindowObject_destroyed) shr
      bp_TWindowObject_destroyed

proc WindowObject_set_destroyed*(a: PWindowObject, `destroyed`: guint) = 
  a.flag0 = a.flag0 or
      (int16(`destroyed` shl bp_TWindowObject_destroyed) and
      bm_TWindowObject_destroyed)

proc ROOT_PARENT*(): PWindow = 
  result = get_default_root_window()

proc window_get_size*(drawable: PDrawable, width: Pgint, height: Pgint) = 
  get_size(drawable, width, height)

proc get_type*(window: PWindow): TWindowType = 
  result = get_window_type(window)

proc window_get_colormap*(drawable: PDrawable): PColormap = 
  result = get_colormap(drawable)

proc window_set_colormap*(drawable: PDrawable, colormap: PColormap) = 
  set_colormap(drawable, colormap)

proc window_get_visual*(drawable: PDrawable): PVisual = 
  result = get_visual(drawable)

proc window_ref*(drawable: PDrawable): PDrawable = 
  result = DRAWABLE(g_object_ref(G_OBJECT(drawable)))

proc window_unref*(drawable: PDrawable) = 
  g_object_unref(G_OBJECT(drawable))

proc window_copy_area*(drawable: PDrawable, gc: PGC, x, y: gint, 
                       source_drawable: PDrawable, source_x, source_y: gint, 
                       width, height: gint) = 
  pixmap(drawable, gc, source_drawable, source_x, source_y, x, y, width, 
         height)
