The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
;; -*- scheme -*-

;;; Gtk enums

(define-enum GdkEventType
  (nothing GDK_NOTHING)
  (delete GDK_DELETE)
  (destroy GDK_DESTROY)
  (expose GDK_EXPOSE)
  (motion-notify GDK_MOTION_NOTIFY)
  (button-press GDK_BUTTON_PRESS)
  (2button-press GDK_2BUTTON_PRESS)
  (3button-press GDK_3BUTTON_PRESS)
  (button-release GDK_BUTTON_RELEASE)
  (key-press GDK_KEY_PRESS)
  (key-release GDK_KEY_RELEASE)
  (enter-notify GDK_ENTER_NOTIFY)
  (leave-notify GDK_LEAVE_NOTIFY)
  (focus-change GDK_FOCUS_CHANGE)
  (configure GDK_CONFIGURE)
  (map GDK_MAP)
  (unmap GDK_UNMAP)
  (property-notify GDK_PROPERTY_NOTIFY)
  (selection-clear GDK_SELECTION_CLEAR)
  (selection-request GDK_SELECTION_REQUEST)
  (selection-notify GDK_SELECTION_NOTIFY)
  (other-event GDK_OTHER_EVENT))

;(define-enum GdkFillRule ; FIXME
;  (even-odd-rule GDK_EVEN_ODD_RULE)
;  (winding-rule GDK_WINDING_RULE))


(define-enum GtkWindowType
  (toplevel GTK_WINDOW_TOPLEVEL)
  (dialog GTK_WINDOW_DIALOG)
  (popup GTK_WINDOW_POPUP))

(define-enum GtkStateType
  (normal GTK_STATE_NORMAL)
  (active GTK_STATE_ACTIVE)
  (prelight GTK_STATE_PRELIGHT)
  (selected GTK_STATE_SELECTED)
  (insensitive GTK_STATE_INSENSITIVE))

(define-enum GtkDirectionType
  (tab-forward GTK_DIR_TAB_FORWARD)
  (tab-backward GTK_DIR_TAB_BACKWARD)
  (up GTK_DIR_UP)
  (down GTK_DIR_DOWN)
  (left GTK_DIR_LEFT)
  (right GTK_DIR_RIGHT))

(define-enum GtkShadowType
  (none GTK_SHADOW_NONE)
  (in GTK_SHADOW_IN)
  (out GTK_SHADOW_OUT)
  (etched-in GTK_SHADOW_ETCHED_IN)
  (etched-out GTK_SHADOW_ETCHED_OUT))

(define-enum GtkArrowType
  (up GTK_ARROW_UP)
  (down GTK_ARROW_DOWN)
  (left GTK_ARROW_LEFT)
  (right GTK_ARROW_RIGHT))

(define-enum GtkPackType
  (start GTK_PACK_START)
  (end GTK_PACK_END))

(define-enum GtkPolicyType
  (always GTK_POLICY_ALWAYS)
  (automatic GTK_POLICY_AUTOMATIC))

(define-enum GtkUpdateType
  (continuous GTK_UPDATE_CONTINUOUS)
  (discontinuous GTK_UPDATE_DISCONTINUOUS)
  (delayed GTK_UPDATE_DELAYED))

(define-flags GtkAttachOptions
  (expand GTK_EXPAND)
  (shrink GTK_SHRINK)
  (fill GTK_FILL))

(define-flags GtkSignalRunType
  (first GTK_RUN_FIRST)
  (last GTK_RUN_LAST)
  (both GTK_RUN_BOTH)
  (mask GTK_RUN_MASK)
  (no-recurse GTK_RUN_NO_RECURSE))

(define-enum GtkWindowPosition
  (none GTK_WIN_POS_NONE)
  (center GTK_WIN_POS_CENTER)
  (mouse GTK_WIN_POS_MOUSE))

(define-enum GtkSubmenuDirection
  (left GTK_DIRECTION_LEFT)
  (right GTK_DIRECTION_RIGHT))

(define-enum GtkSubmenuPlacement
  (top-bottom GTK_TOP_BOTTOM)
  (left-right GTK_LEFT_RIGHT))

(define-enum GtkMenuFactoryType
  (menu GTK_MENU_FACTORY_MENU)
  (menu-bar GTK_MENU_FACTORY_MENU_BAR)
  (option-menu GTK_MENU_FACTORY_OPTION_MENU))

(define-enum GtkMetricType
  (pixels GTK_PIXELS)
  (inches GTK_INCHES)
  (centimeters GTK_CENTIMETERS))

(define-enum GtkScrollType
  (none GTK_SCROLL_NONE)
  (step-backward GTK_SCROLL_STEP_BACKWARD)
  (step-forward GTK_SCROLL_STEP_FORWARD)
  (page-backward GTK_SCROLL_PAGE_BACKWARD)
  (page-forward GTK_SCROLL_PAGE_FORWARD)
  (jump GTK_SCROLL_JUMP))

(define-enum GtkTroughType
  (none GTK_TROUGH_NONE)
  (start GTK_TROUGH_START)
  (end GTK_TROUGH_END)
  (jump GTK_TROUGH_JUMP))

(define-enum GtkPositionType
  (left GTK_POS_LEFT)
  (right GTK_POS_RIGHT)
  (top GTK_POS_TOP)
  (bottom GTK_POS_BOTTOM))

(define-enum GtkPreviewType
  (color GTK_PREVIEW_COLOR)
  (grayscale GTK_PREVIEW_GRAYSCALE))

;(define-flags GtkWidgetFlags ;; FIXME
;  (visible GTK_VISIBLE)
;  (mapped GTK_MAPPED)
;  ;(unmapped GTK_UNMAPPED)
;  (realized GTK_REALIZED)
;  (sensitive GTK_SENSITIVE)
;  (parent-sensitive GTK_PARENT_SENSITIVE)
;  (no-window GTK_NO_WINDOW)
;  (has-focus GTK_HAS_FOCUS)
;  (can-focus GTK_CAN_FOCUS)
;  (has-default GTK_HAS_DEFAULT)
;  (can-default GTK_CAN_DEFAULT)
;  ;(propagate-state GTK_PROPAGATE_STATE)
;  ;(anchored GTK_ANCHORED)
;  (basic GTK_BASIC)
;  ;(user-style GTK_USER_STYLE
;  (has-grab GTK_HAS_GRAB)
;  (toplevel GTK_TOPLEVEL))

(define-enum GtkSelectionMode
  (single GTK_SELECTION_SINGLE)
  (browse GTK_SELECTION_BROWSE)
  (multiple GTK_SELECTION_MULTIPLE)
  (extended GTK_SELECTION_EXTENDED))

(define-enum GtkOrientation
  (horizontal GTK_ORIENTATION_HORIZONTAL)
  (vertical GTK_ORIENTATION_VERTICAL))

(define-enum GtkToolbarStyle
  (icons GTK_TOOLBAR_ICONS)
  (text GTK_TOOLBAR_TEXT)
  (both GTK_TOOLBAR_BOTH))

(define-enum GtkToolbarChildType
  (space GTK_TOOLBAR_CHILD_SPACE)
  (button GTK_TOOLBAR_CHILD_BUTTON)
  (toggle-button GTK_TOOLBAR_CHILD_TOGGLEBUTTON)
  (radio-button GTK_TOOLBAR_CHILD_RADIOBUTTON)
  (widget GTK_TOOLBAR_CHILD_WIDGET))

(define-enum GtkButtonBoxStyle
  (default-style GTK_BUTTONBOX_DEFAULT_STYLE)
  (spread GTK_BUTTONBOX_SPREAD)
  (edge GTK_BUTTONBOX_EDGE)
  (start GTK_BUTTONBOX_START)
  (end GTK_BUTTONBOX_END))

(define-enum GtkTreeViewMode
  (line GTK_TREE_VIEW_LINE)
  (item GTK_TREE_VIEW_ITEM))

(define-enum GtkCurveType
  (linear GTK_CURVE_TYPE_LINEAR)
  (spline GTK_CURVE_TYPE_SPLINE)
  (free GTK_CURVE_TYPE_FREE))

(define-enum GtkFundamentalType
  (invalid GTK_TYPE_INVALID)
  (none GTK_TYPE_NONE)
  (char GTK_TYPE_CHAR)
  (bool GTK_TYPE_BOOL)
  (int GTK_TYPE_INT)
  (uint GTK_TYPE_UINT)
  (long GTK_TYPE_LONG)
  (ulong GTK_TYPE_ULONG)
  (float GTK_TYPE_FLOAT)
  (string GTK_TYPE_STRING)
  (enum GTK_TYPE_ENUM)
  (flags GTK_TYPE_FLAGS)
  (boxed GTK_TYPE_BOXED)
  (foreign GTK_TYPE_FOREIGN)
  (callback GTK_TYPE_CALLBACK)
  (args GTK_TYPE_ARGS)
  (pointer GTK_TYPE_POINTER)
  (signal GTK_TYPE_SIGNAL)
  (c-callback GTK_TYPE_C_CALLBACK)
  (object GTK_TYPE_OBJECT))

(define-enum GtkJustification
  (left GTK_JUSTIFY_LEFT)
  (right GTK_JUSTIFY_RIGHT)
  (center GTK_JUSTIFY_CENTER)
  (fill GTK_JUSTIFY_FILL))

(define-flags GtkSpinButtonUpdatePolicy
  (always GTK_UPDATE_ALWAYS)
  (if-valid GTK_UPDATE_IF_VALID)
  (snap-to-ticks GTK_UPDATE_SNAP_TO_TICKS))

(define-enum GtkCellType
  (empty GTK_CELL_EMPTY)
  (text GTK_CELL_TEXT)
  (pixmap GTK_CELL_PIXMAP)
  (pixtext GTK_CELL_PIXTEXT)
  (widget GTK_CELL_WIDGET))

;;; Gdk enums

(define-enum GdkWindowType
  (root GDK_WINDOW_ROOT)
  (toplevel GDK_WINDOW_TOPLEVEL)
  (child GDK_WINDOW_CHILD)
  (dialog GDK_WINDOW_DIALOG)
  (temp GDK_WINDOW_TEMP)
  (pixmap GDK_WINDOW_PIXMAP))

(define-enum GdkWindowClass
  (input-output GDK_INPUT_OUTPUT)
  (input-only GDK_INPUT_ONLY))

(define-enum GdkImageType
  (normal GDK_IMAGE_NORMAL)
  (shared GDK_IMAGE_SHARED)
  (fastest GDK_IMAGE_FASTEST))

(define-enum GdkVisualType
  (static-gray GDK_VISUAL_STATIC_GRAY)
  (grayscale GDK_VISUAL_GRAYSCALE)
  (static-color GDK_VISUAL_STATIC_COLOR)
  (pseudo-color GDK_VISUAL_PSEUDO_COLOR)
  (true-color GDK_VISUAL_TRUE_COLOR)
  (direct-color GDK_VISUAL_DIRECT_COLOR))

(define-flags GdkWindowAttributesType
  (title GDK_WA_TITLE)
  (x GDK_WA_X)
  (y GDK_WA_Y)
  (cursor GDK_WA_CURSOR)
  (colormap GDK_WA_COLORMAP)
  (visual GDK_WA_VISUAL))

(define-flags GdkWindowHints
  (pos GDK_HINT_POS)
  (min-size GDK_HINT_MIN_SIZE)
  (max-size GDK_HINT_MAX_SIZE))

(define-enum GdkFunction
  (copy GDK_COPY)
  (invert GDK_INVERT)
  (xor GDK_XOR))

(define-enum GdkFill
  (solid GDK_SOLID)
  (tiled GDK_TILED)
  (stippled GDK_STIPPLED)
  (opaque-stippled GDK_OPAQUE_STIPPLED))

(define-enum GdkLineStyle
  (solid GDK_LINE_SOLID)
  (on-off-dash GDK_LINE_ON_OFF_DASH)
  (double-dash GDK_LINE_DOUBLE_DASH))

(define-enum GdkCapStyle
  (not-last GDK_CAP_NOT_LAST)
  (butt GDK_CAP_BUTT)
  (round GDK_CAP_ROUND)
  (projecting GDK_CAP_PROJECTING))

(define-enum GdkJoinStyle
  (miter GDK_JOIN_MITER)
  (round GDK_JOIN_ROUND)
  (bevel GDK_JOIN_BEVEL))

(define-enum GdkCursorType
  (cursor GDK_LAST_CURSOR))

(define-flags GdkEventMask
  (exposure-mask GDK_EXPOSURE_MASK)
  (pointer-motion-mask GDK_POINTER_MOTION_MASK)
  (pointer-motion-hint-mask GDK_POINTER_MOTION_HINT_MASK)
  (button-motion-mask GDK_BUTTON_MOTION_MASK)
  (button1-motion-mask GDK_BUTTON1_MOTION_MASK)
  (button2-motion-mask GDK_BUTTON2_MOTION_MASK)
  (button3-motion-mask GDK_BUTTON3_MOTION_MASK)
  (button-press-mask GDK_BUTTON_PRESS_MASK)
  (button-release-mask GDK_BUTTON_RELEASE_MASK)
  (key-press-mask GDK_KEY_PRESS_MASK)
  (key-release-mask GDK_KEY_RELEASE_MASK)
  (enter-notify-mask GDK_ENTER_NOTIFY_MASK)
  (leave-notify-mask GDK_LEAVE_NOTIFY_MASK)
  (focus-change-mask GDK_FOCUS_CHANGE_MASK)
  (structure-mask GDK_STRUCTURE_MASK)
  (all-events-mask GDK_ALL_EVENTS_MASK))

(define-enum GdkNotifyType
  (ancestor GDK_NOTIFY_ANCESTOR)
  (virtual GDK_NOTIFY_VIRTUAL)
  (inferior GDK_NOTIFY_INFERIOR)
  (nonlinear GDK_NOTIFY_NONLINEAR)
  (nonlinear-virtual GDK_NOTIFY_NONLINEAR_VIRTUAL)
  (unknown GDK_NOTIFY_UNKNOWN))

(define-flags GdkModifierType
  (shift-mask GDK_SHIFT_MASK)
  (lock-mask GDK_LOCK_MASK)
  (control-mask GDK_CONTROL_MASK)
  (mod1-mask GDK_MOD1_MASK)
  (mod2-mask GDK_MOD2_MASK)
  (mod3-mask GDK_MOD3_MASK)
  (mod4-mask GDK_MOD4_MASK)
  (mod5-mask GDK_MOD5_MASK)
  (button1-mask GDK_BUTTON1_MASK)
  (button2-mask GDK_BUTTON2_MASK)
  (button3-mask GDK_BUTTON3_MASK)
  (button4-mask GDK_BUTTON4_MASK)
  (button5-mask GDK_BUTTON5_MASK))

(define-enum GdkSubwindowMode
  (clip-by-children GDK_CLIP_BY_CHILDREN)
  (include-inferiors GDK_INCLUDE_INFERIORS))

(define-flags GdkInputCondition
  (read GDK_INPUT_READ)
  (write GDK_INPUT_WRITE)
  (exception GDK_INPUT_EXCEPTION))

(define-enum GdkStatus
  (ok GDK_OK)
  (error GDK_ERROR)
  (error-param GDK_ERROR_PARAM)
  (error-file GDK_ERROR_FILE)
  (error-mem GDK_ERROR_MEM))

(define-enum GdkByteOrder
  (lsb-first GDK_LSB_FIRST)
  (msb-first GDK_MSB_FIRST))

(define-flags GdkGCValuesMask
  (foreground GDK_GC_FOREGROUND)
  (background GDK_GC_BACKGROUND)
  (font GDK_GC_FONT)
  (function GDK_GC_FUNCTION)
  (fill GDK_GC_FILL)
  (tile GDK_GC_TILE)
  (stipple GDK_GC_STIPPLE)
  (clip-mask GDK_GC_CLIP_MASK)
  (subwindow GDK_GC_SUBWINDOW)
  (ts-x-origin GDK_GC_TS_X_ORIGIN)
  (ts-y-origin GDK_GC_TS_Y_ORIGIN)
  (clip-x-origin GDK_GC_CLIP_X_ORIGIN)
  (clip-y-origin GDK_GC_CLIP_Y_ORIGIN)
  (exposures GDK_GC_EXPOSURES)
  (line-width GDK_GC_LINE_WIDTH)
  (line-style GDK_GC_LINE_STYLE)
  (cap-style GDK_GC_CAP_STYLE)
  (join-style GDK_GC_JOIN_STYLE))

(define-enum GdkSelection
  (primary GDK_SELECTION_PRIMARY)
  (secondary GDK_SELECTION_SECONDARY))

(define-enum GdkPropertyState
  (new-value GDK_PROPERTY_NEW_VALUE)
  (delete GDK_PROPERTY_DELETE))

(define-enum GdkPropMode
  (replace GDK_PROP_MODE_REPLACE)
  (prepend GDK_PROP_MODE_PREPEND)
  (append GDK_PROP_MODE_APPEND))

(define-enum GdkOverlapType
  (in GDK_OVERLAP_RECTANGLE_IN)
  (out GDK_OVERLAP_RECTANGLE_OUT)
  (part GDK_OVERLAP_RECTANGLE_PART))

(define-flags GdkWMDecoration
  (all GDK_DECOR_ALL)
  (border GDK_DECOR_BORDER)
  (resizeh GDK_DECOR_RESIZEH)
  (title GDK_DECOR_TITLE)
  (menu GDK_DECOR_MENU)
  (minimize GDK_DECOR_MINIMIZE)
  (maximize GDK_DECOR_MAXIMIZE))

(define-flags GdkWMFunction
  (all GDK_FUNC_ALL)
  (resize GDK_FUNC_RESIZE)
  (move GDK_FUNC_MOVE)
  (minimize GDK_FUNC_MINIMIZE)
  (maximize GDK_FUNC_MAXIMIZE)
  (close GDK_FUNC_CLOSE))

;;; Gtk boxed types

;(define-boxed GtkAcceleratorTable
;  gtk_accelerator_table_ref
;  gtk_accelerator_table_unref)

(define-boxed GtkStyle
  gtk_style_ref
  gtk_style_unref)

;(define-boxed GtkRcStyle ;; FIXME
;  gtk_rc_style_ref
;  gtk_rc_style_unref)

;;; Gdk boxed types

;;(define-boxed GdkPoint
;;  gdk_point_copy
;;  gdk_point_destroy)

(define-boxed GdkColormap
  gdk_colormap_ref
  gdk_colormap_unref)

(define-boxed GdkVisual
  gdk_visual_ref
  gdk_visual_unref)

(define-boxed GdkFont
  gdk_font_ref
  gdk_font_unref)

(define-boxed GdkWindow
  gdk_window_ref
  gdk_window_unref)

;(define-boxed GdkEvent
;  gdk_event_copy
;  gdk_event_free
;  "sizeof(GdkEvent)")

;;(define-boxed GdkColor
;;  gdk_color_copy
;;  gdk_color_free
;;  "sizeof(GdkColor)")


(define-func gtk_style_get_white_interp
  GdkColor
  ((GtkStyle style)))

;;; Functions

;; Gdk

(define-func gdk_font_load
  GdkFont
  ((string name)))

(define-func gdk_flush
  none
  ())

;; main

(define-func gtk_exit
  none
  ((int code (= "0"))))

(define-func gtk_main
  none
  ())

(define-func gtk_main_quit
  none
  ())

(define-func gtk_main_iteration
  bool
  ())

(define-func gtk_timeout_add_interp
  int
  ((int interval)
   (callback function)))

(define-func gtk_timeout_remove
  none
  ((int tag)))

(define-func gtk_idle_add_interp
  int
  ((callback function)))

(define-func gtk_idle_remove
  none
  ((int tag)))

(define-func gtk_input_add_interp
  int
  ((file-descriptor source)
   (GdkInputCondition condition)
   (callback callback)))

(define-func gtk_input_remove
  none
  ((int tag)))

(define-func gtk_rc_parse
  none
  ((string file)))

(define-func g_mem_chunk_info
  none
  ())

;; GtkObject

(define-func gtk_object_destroy
  none
  ((GtkObject object)))

;; Signals

(define-func gtk_signal_connect_interp
  int
  ((GtkObject object)
   (string name)
   (callback func)
   (bool after (= "0"))))

(define-func gtk_signal_disconnect
  none
  ((GtkObject object)
   (int id)))

;; GtkWidget

(define-object GtkWidget (GtkObject)
  (fields
   (GtkStyle style)))

(define-func gtk_grab_add
  none
  ((GtkWidget widget)))

(define-func gtk_grab_remove
  none
  ((GtkWidget widget)))

(define-func GTK_WIDGET_STATE
  GtkStateType
  ((GtkWidget widget)))

(define-func GTK_WIDGET_FLAGS
  GtkWidgetFlags
  ((GtkWidget widget)))

(define-func GTK_WIDGET_SET_FLAGS
  none
  ((GtkWidget widget)
   (GtkWidgetFlags flags)))

(define-func GTK_WIDGET_UNSET_FLAGS
  none
  ((GtkWidget widget)
   (GtkWidgetFlags flags)))

;; XXX - gtk_widget_new or gtk_widget_newv would be really useful
;; (maybe also gtk_widget_set(v), gtk_widget_get(v))

(define-func gtk_widget_destroy
  none
  ((GtkWidget widget)))

(define-func gtk_widget_unparent
  none
  ((GtkWidget widget)))

(define-func gtk_widget_show
  none
  ((GtkWidget widget)))

(define-func gtk_widget_hide
  none
  ((GtkWidget widget)))

(define-func gtk_widget_show_all
  none
  ((GtkWidget widget)))

(define-func gtk_widget_hide_all
  none
  ((GtkWidget widget)))

(define-func gtk_widget_map
  none
  ((GtkWidget widget)))

(define-func gtk_widget_unmap
  none
  ((GtkWidget widget)))

(define-func gtk_widget_realize
  none
  ((GtkWidget widget)))

(define-func gtk_widget_unrealize
  none
  ((GtkWidget widget)))

;;(define-func gtk_widget_install_accelerator
;;  none
;;  ((GtkWidget widget)
;;   (GtkAcceleratorTable table)
;;   (string signal_name)
;;   (char key)
;;   (uint modifiers)))

(define-func gtk_widget_remove_accelerator
  none
  ((GtkWidget widget)
   (GtkAcceleratorTable table)
   (string signal_name)))

(define-func gtk_widget_event
  bool
  ((GtkWidget widget)
   (GdkEvent event)))

(define-func gtk_widget_activate
  none
  ((GtkWidget widget)))

(define-func gtk_widget_reparent
  none
  ((GtkWidget widget)
   (GtkWidget new_parent)))

(define-func gtk_widget_popup
  none
  ((GtkWidget widget)
   (int x)
   (int y)))

(define-func gtk_widget_basic
  bool
  ((GtkWidget widget)))

(define-func gtk_widget_grab_focus
  none
  ((GtkWidget widget)))

(define-func gtk_widget_grab_default
  none
  ((GtkWidget widget)))

(define-func gtk_widget_set_name
  none
  ((GtkWidget widget)
   (string name)))

(define-func gtk_widget_get_name
  static_string
  ((GtkWidget widget)))

(define-func gtk_widget_set_state
  none
  ((GtkWidget widget)
   (GtkStateType state)))

(define-func gtk_widget_set_sensitive
  none
  ((GtkWidget widget)
   (bool sensitive)))

(define-func gtk_widget_set_parent
  none
  ((GtkWidget widget)
   (GtkWidget parent)))

(define-func gtk_widget_set_style
  none
  ((GtkWidget widget)
   (GtkStyle style)))

(define-func gtk_widget_set_uposition
  none
  ((GtkWidget widget)
   (int x)
   (int y)))

(define-func gtk_widget_set_usize
  none
  ((GtkWidget widget)
   (int height)
   (int width)))

(define-func gtk_widget_set_events
  none
  ((GtkWidget widget)
   (GdkEventMask events)))

(define-func gtk_widget_set_extension_events
  none
  ((GtkWidget widget)
   (GdkEventMask events)))

(define-func gtk_widget_get_toplevel
  GtkWidget
  ((GtkWidget widget)))

;;(define-func gtk_widget_get_ancestor
;;  GtkWidget
;;  ((GtkWidget widget)
;;   (GtkType type)))

(define-func gtk_widget_get_colormap
  GdkColormap
  ((GtkWidget widget)))

(define-func gtk_widget_get_visual
  GdkVisual
  ((GtkWidget widget)))

(define-func gtk_widget_get_style
  GtkStyle
  ((GtkWidget widget)))

(define-func gtk_widget_get_events
  GdkEventMask
  ((GtkWidget widget)))

(define-func gtk_widget_get_extension_events
  GdkEventMask
  ((GtkWidget widget)))

;; XXX - need multiple return values
;; (define-func gtk_widget_get_pointer)

(define-func gtk_widget_is_ancestor
  bool
  ((GtkWidget widget)
   (GtkWidget ancestor)))

(define-func gtk_widget_is_child
  bool
  ((GtkWidget widget)
   (GtkWidget child)))

(define-func gtk_widget_push_colormap
  none
  ((GdkColormap cmap)))

(define-func gtk_widget_push_visual
  none
  ((GdkVisual visual)))

(define-func gtk_widget_push_style
  none
  ((GtkStyle style)))

(define-func gtk_widget_pop_colormap
  none
  ())

(define-func gtk_widget_pop_visual
  none
  ())

(define-func gtk_widget_pop_style
  none
  ())

(define-func gtk_widget_set_default_colormap
  none
  ((GdkColormap cmap)))

(define-func gtk_widget_set_default_visual
  none
  ((GdkVisual visual)))

(define-func gtk_widget_set_default_style
  none
  ((GtkStyle style)))

(define-func gtk_widget_get_default_colormap
  GdkColormap
  ())

(define-func gtk_widget_get_default_visual
  GdkVisual
  ())

(define-func gtk_widget_get_default_style
  GtkStyle
  ())

;; XXX - need GdkBitmap for the shape mask
;; (define-func gtk_widget_shape_combine_mask)

;; XXX - dnd stuff needs closer examination.

;;; Container

(define-object GtkContainer (GtkWidget))

(define-func gtk_container_border_width
  none
  ((GtkContainer container)
   (int border_width)))

(define-func gtk_container_add
  none
  ((GtkContainer container)
   (GtkWidget widget)))

(define-func gtk_container_remove
  none
  ((GtkContainer container)
   (GtkWidget widget)))

(define-func gtk_container_disable_resize
  none
  ((GtkContainer container)))

(define-func gtk_container_enable_resize
  none
  ((GtkContainer container)))

(define-func gtk_container_block_resize
  none
  ((GtkContainer container)))

(define-func gtk_container_unblock_resize
  none
  ((GtkContainer container)))

(define-func gtk_container_need_resize
  bool
  ((GtkContainer container)))

(define-func gtk_container_foreach_interp 
  none
  ((GtkContainer container)
   (callback function)))

(define-func gtk_container_focus
  GtkDirectionType
  ((GtkContainer container)
   (GtkDirectionType direction)))

;; XXX - need GList support for this 
;; (define-func gtk_container_children)

(define-func gtk_container_register_toplevel 
  none 
  ((GtkContainer container)))

(define-func gtk_container_unregister_toplevel
  none 
  ((GtkContainer container)))

;;; Fixed

(define-object GtkFixed (GtkContainer))

(define-func gtk_fixed_new
  GtkWidget
  ())

(define-func gtk_fixed_put 
  none
  ((GtkFixed fixed)
   (GtkWidget widget)
   ;; next two should be int16s in theory - does it matter?
   (int x)
   (int y)))

(define-func gtk_fixed_move
  none
  ((GtkFixed fixed)
   (GtkWidget widget)
   ;; next two should be int16s in theory - does it matter?
   (int x)
   (int y)))

;; TreeItem

(define-object GtkTreeItem (GtkItem))

(define-func gtk_tree_item_new
  GtkWidget
  ())

(define-func gtk_tree_item_new_with_label
  GtkWidget
  ((string label)))

(define-func gtk_tree_item_set_subtree
  none
  ((GtkTreeItem tree_item)
   (GtkWidget subtree)))

(define-func gtk_tree_item_remove_subtree
  none
  ((GtkTreeItem tree_item)))

(define-func gtk_tree_item_select
  none
  ((GtkTreeItem tree_item)))

(define-func gtk_tree_item_deselect
  none
  ((GtkTreeItem tree_item)))

(define-func gtk_tree_item_expand
  none
  ((GtkTreeItem tree_item)))

(define-func gtk_tree_item_collapse
  none
  ((GtkTreeItem tree_item)))

;;; Tree

(define-object GtkTree (GtkContainer))

(define-func gtk_tree_new 
  GtkWidget
  ())

(define-func gtk_tree_append
  none
  ((GtkTree tree)
   (GtkWidget child)))

(define-func gtk_tree_prepend
  none
  ((GtkTree tree)
   (GtkWidget child)))

(define-func gtk_tree_insert
  none
  ((GtkTree tree)
   (GtkWidget child)
   (int position)))

(define-func gtk_tree_remove_item
  none
  ((GtkTree tree)
   (GtkWidget child)))

;; XXX - need GList support
;; (define-func gtk_tree_remove_items)

(define-func gtk_tree_clear_items
  none
  ((GtkTree tree)
   (int start)
   (int end)))

(define-func gtk_tree_select_item
  none
  ((GtkTree tree)
   (int item)))

(define-func gtk_tree_unselect_item
  none
  ((GtkTree tree)
   (int item)))

(define-func gtk_tree_select_child
  none
  ((GtkTree tree)
   (GtkWidget child)))

(define-func gtk_tree_unselect_child
  none
  ((GtkTree tree)
   (GtkWidget child)))

(define-func gtk_tree_child_position
  int
  ((GtkTree tree)
   (GtkWidget child)))

(define-func gtk_tree_set_selection_mode
  none
  ((GtkTree tree)
   (GtkSelectionMode mode)))

(define-func gtk_tree_set_view_mode
  none
  ((GtkTree tree)
   (GtkTreeViewMode mode)))

(define-func gtk_tree_set_view_lines
  none
  ((GtkTree tree)
   (bool flag)))

;;; GtkCList

(define-object GtkCList (GtkContainer))

(define-boxed GtkCListRow
  "(void)"
  "(void)")

(define-func gtk_clist_new 
  GtkWidget
  ((int columns)))

;; XXX - needs string array
;; (define-func gtk_clist_new_with_titles)
;; (define-func gtk_clist_construct)

(define-func gtk_clist_set_border
 none
 ((GtkCList clist)
  (GtkShadowType border)))

(define-func gtk_clist_set_selection_mode
 none
 ((GtkCList clist)
  (GtkSelectionMode mode)))

(define-func gtk_clist_set_policy
 none
 ((GtkCList clist)
  (GtkPolicyType vscrollbar_policy)
  (GtkPolicyType hscrollbar_policy)))

(define-func gtk_clist_freeze
 none
 ((GtkCList clist)))

(define-func gtk_clist_thaw
 none
 ((GtkCList clist)))

(define-func gtk_clist_column_titles_show
 none
 ((GtkCList clist)))

(define-func gtk_clist_column_titles_hide
 none
 ((GtkCList clist)))

(define-func gtk_clist_column_title_active
 none
 ((GtkCList clist)
  (int column)))

(define-func gtk_clist_column_title_passive
 none
 ((GtkCList clist)
  (int column)))

(define-func gtk_clist_column_titles_active
 none
 ((GtkCList clist)))

(define-func gtk_clist_column_titles_passive
 none
 ((GtkCList clist)))

(define-func gtk_clist_set_column_title
  none
  ((GtkCList clist)
   (int column)
   (string title)))

(define-func gtk_clist_set_column_widget
  none
  ((GtkCList clist)
   (int column)
   (GtkWidget widget)))

(define-func gtk_clist_set_column_justification
  none
  ((GtkCList clist)
   (int column)
   (GtkJustification justification)))

(define-func gtk_clist_set_column_width
  none
  ((GtkCList clist)
   (int column)
   (int width)))

(define-func gtk_clist_set_row_height
  none
  ((GtkCList clist)
   (int height)))

(define-func gtk_clist_moveto
  none
  ((GtkCList clist)
   (int row)
   (int column)
   (float row_align)
   (float column_align)))

(define-func gtk_clist_row_is_visible
  none
  ((GtkCList clist)
   (int row)))

(define-func gtk_clist_set_text
  none
  ((GtkCList clist)
   (int row)
   (int column)
   (string text)))

;; XXX - uses gchar ** to return string
;; (define-func gtk_clist_get_text)

;; XXX - the following all use GdkPixmaps and GdkBitmaps rather than
;; a GtkPixmap, this sucks.
;; (define-func gtk_clist_set_pixmap)
;; (define-func gtk_clist_get_pixmap)
;; (define-func gtk_clist_set_pixtext)
;; (define-func gtk_clist_get_pixtext)

(define-func gtk_clist_set_foreground
  none
  ((GtkCList clist)
   (int row)
   (GdkColor color)))

(define-func gtk_clist_set_background
  none
  ((GtkCList clist)
   (int row)
   (GdkColor color)))

(define-func gtk_clist_set_shift 
  none
  ((GtkCList clist)
   (int row)
   (int column)
   (int vertical)
   (int horizontal)))

;; XXX - need string arrays
;; (define-func gtk_clist_append)
;; (define-func gtk_clist_insert)

(define_func gtk_clist_remove 
  none
  ((GtkCList clist)
   (int row)))

(define-func gtk_clist_set_row_data 
  none
  ((GtkCList clist)
   (int row)
   (gpointer data)))

(define-func gtk_clist_get_row_data
  gpointer
  ((GtkCList clist)
   (int row)))

(define-func gtk_clist_find_row_from_data
  int
  ((GtkCList clist)
   (gpointer data)))

(define-func gtk_clist_select_row
  none
  ((GtkCList clist)
   (int row)
   (int column)))

(define-func gtk_clist_unselect_row
  none
  ((GtkCList clist)
   (int row)
   (int column)))

(define-func gtk_clist_clear
  none
  ((GtkCList clist)))

;;; Bin

(define-object GtkBin (GtkContainer))

;;; Event Box

(define-object GtkEventBox (GtkBin))

(define-func gtk_event_box_new 
  GtkWidget
  ())

;;; Window

(define-object GtkWindow (GtkBin))

(define-func gtk_window_new
  GtkWidget
  ((GtkWindowType type)))

(define-func gtk_window_set_title
  none
  ((GtkWindow window)
   (string title)))

(define-func gtk_window_set_wmclass
  none
  ((GtkWindow window)
   (string wmclass_class)
   (string wmclass_name)))

(define-func gtk_window_set_focus
  none
  ((GtkWindow window)
   (GtkWidget focus)))

(define-func gtk_window_set_default
  none
  ((GtkWindow window)
   (GtkWidget default)))

(define-func gtk_window_set_policy
  none
  ((GtkWindow window)
   (bool allow_shrink)
   (bool allow_grow)
   (bool auto_shrink)))

(define-func gtk_window_add_accelerator_table
  none
  ((GtkWindow window)
   (GtkAcceleratorTable table)))

(define-func gtk_window_remove_accelerator_table
  none
  ((GtkWindow window)
   (GtkAcceleratorTable table)))

(define-func gtk_window_position
  none
  ((GtkWindow window)
   (GtkWindowPosition position)))

(define-func gtk_window_activate_focus
  int
  ((GtkWindow window)))

(define-func gtk_window_activate_default
  int
  ((GtkWindow window)))


;;; HandleBox

(define-object GtkHandleBox (GtkBin))

(define-func gtk_handle_box_new
  GtkWidget
  ())

;;; Box

(define-object GtkBox (GtkContainer))

(define-func gtk_box_pack_start
  none
  ((GtkBox box)
   (GtkWidget child)
   (bool expand (= "TRUE"))
   (bool fill (= "TRUE"))
   (int padding (= "0"))))

(define-func gtk_box_pack_end
  none
  ((GtkBox box)
   (GtkWidget child)
   (bool expand (= "TRUE"))
   (bool fill (= "TRUE"))
   (int padding (= "0"))))

(define-func gtk_box_pack_start_defaults
  none
  ((GtkBox box)
   (GtkWidget child)))

(define-func gtk_box_pack_end_defaults
  none
  ((GtkBox box)
   (GtkWidget child)))

(define-func gtk_box_set_homogeneous
  none
  ((GtkBox box)
   (bool homogenous)))

(define-func gtk_box_set_spacing
  none
  ((GtkBox box)
   (int spacing)))

(define-func gtk_box_reorder_child
  none
  ((GtkBox box)
   (GtkWidget child)
   (uint pos)))

;; XXX - needs multiple return values
;; (define-func gtk_box_query_child_packing)

(define-func gtk_box_set_child_packing
  none
  ((GtkBox box)
   (GtkWidget child)
   (bool expand)
   (bool fill)
   (int padding)
   (GtkPackType pack_type)))

;;; ButtonBox

(define-object GtkButtonBox (GtkBox))

;; XXX - needs multiple return values
;; (define-func gtk_button_box_get_child_size_default)

;; XXX - needs multiple return values
;; (define-func gtk_button_box_get_child_ipadding_default)

(define-func gtk_button_box_set_child_size_default 
  none
  ((int min_width)
   (int min_height)))

(define-func gtk_button_box_set_child_ipadding_default 
  none
  ((int ipad_x)
   (int ipad_y)))

(define-func gtk_button_box_get_spacing 
  int 
  ((GtkButtonBox widget)))

(define-func gtk_button_box_get_layout 
  GtkButtonBoxStyle
  ((GtkButtonBox widget)))

;; XXX - needs multiple return values
;; (define-func gtk_button_box_get_child_size)

;; XXX - needs multiple return values
;; (define-func gtk_button_box_get_child_ipadding)

(define-func gtk_button_box_set_spacing 
  none
  ((GtkButtonBox widget) 
   (int spacing)))

(define-func gtk_button_box_set_layout 
  none 
  ((GtkButtonBox widget)
   (GtkButtonBoxStyle layout_style)))

(define-func gtk_button_box_set_child_size	 
  none
  ((GtkButtonBox widget)
   (int min_width) 
   (int min_height)))

(define-func gtk_button_box_set_child_ipadding 
  none
  ((GtkButtonBox widget) 
   (int ipad_x) 
   (int ipad_y)))

;;; HButtonBox

(define-object GtkHButtonBox (GtkButtonBox))

(define-func gtk_hbutton_box_new  
  GtkWidget
  ())

(define-func gtk_hbutton_box_get_spacing_default 
  int 
  ())

(define-func gtk_hbutton_box_get_layout_default 
  GtkButtonBoxStyle
  ())

(define-func gtk_hbutton_box_set_spacing_default 
  none
  ((int spacing)))

(define-func gtk_hbutton_box_set_layout_default 
  none
  ((GtkButtonBoxStyle layout)))

;;; HVuttonBox

(define-object GtkVButtonBox (GtkButtonBox))

(define-func gtk_vbutton_box_new  
  GtkWidget
  ())

(define-func gtk_vbutton_box_get_spacing_default 
  int 
  ())

(define-func gtk_vbutton_box_get_layout_default 
  GtkButtonBoxStyle
  ())

(define-func gtk_vbutton_box_set_spacing_default 
  none
  ((int spacing)))

(define-func gtk_vbutton_box_set_layout_default 
  none
  ((GtkButtonBoxStyle layout)))

;;;; Toolbar

(define-object GtkToolbar (GtkContainer))

(define-func gtk_toolbar_new
  GtkWidget
  ((GtkOrientation orientation)
   (GtkToolbarStyle style)))

;; XXX - blech, need interp versions of these
;; (define-func gtk_toolbar_append_item)
;; (define-func gtk_toolbar_prepend_item)
;; (define-func gtk_toolbar_insert_item)
 
(define-func gtk_toolbar_append_space
  none
  ((GtkToolbar toolbar)))

(define-func gtk_toolbar_prepend_space
  none
  ((GtkToolbar toolbar)))

(define-func gtk_toolbar_insert_space
  none
  ((GtkToolbar toolbar)
   (int position)))

;; XXX - need interp version to handle the callback properly, probably
;; some null-ok stuff to handle missing fields.
;; (define-func gtk_toolbar_append_element)
;; (define-func gtk_toolbar_prepend_element)
;; (define-func gtk_toolbar_insert_element)

(define-func gtk_toolbar_append_widget
  none
  ((GtkToolbar Toolbar)
   (GtkWidget Widget)
   (string tooltip_text)
   (string tooltip_private_text)))

(define-func gtk_toolbar_prepend_widget
  none
  ((GtkToolbar Toolbar)
   (GtkWidget Widget)
   (string tooltip_text)
   (string tooltip_private_text)))

(define-func gtk_toolbar_insert_widget
  none
  ((GtkToolbar toolbar)
   (GtkWidget widget)
   (string tooltip_text)
   (string tooltip_private_text)
   (int position)))

(define-func gtk_toolbar_set_orientation
  none
  ((GtkToolbar toolbar)
   (GtkOrientation orientation)))

(define-func gtk_toolbar_set_style
  none
  ((GtkToolbar toolbar)
   (GtkToolbarStyle style)))

(define-func gtk_toolbar_set_space_size
  none
  ((GtkToolbar toolbar)
   (int space_size)))

(define-func gtk_toolbar_set_tooltips
  none
  ((GtkToolbar toolbar)
   (bool enable)))

;;; Table

(define-object GtkTable (GtkContainer))

(define-func gtk_table_new
  GtkWidget
  ((int rows)
   (int columns)
   (bool homogenous)))

(define-func gtk_table_attach
  none
  ((GtkTable table)
   (GtkWidget child)
   (int left_attach)
   (int right_attach)
   (int top_attach)
   (int bottom_attach)
   (GtkAttachOptions xoptions (= "GTK_EXPAND|GTK_FILL"))
   (GtkAttachOptions yoptions (= "GTK_EXPAND|GTK_FILL"))
   (int xpadding (= "0"))
   (int ypadding (= "0"))))

(define-func gtk_table_attach_defaults
  none
  ((GtkTable table)
   (GtkWidget child)
   (int left_attach)
   (int right_attach)
   (int top_attach)
   (int bottom_attach)))

(define-func gtk_table_set_row_spacing
  none
  ((GtkTable table)
   (int row)
   (int spacing)))

(define-func gtk_table_set_col_spacing
  none
  ((GtkTable table)
   (int column)
   (int spacing)))

(define-func gtk_table_set_row_spacings
  none
  ((GtkTable table)
   (int spacing)))

(define-func gtk_table_set_col_spacings
  none
  ((GtkTable table)
   (int spacing)))

;;; Button

(define-object GtkButton (GtkContainer)
  (fields
   (bool in_button)
   (bool button_down)))

(define-func gtk_button_new
  GtkWidget
  ())

(define-func gtk_button_new_with_label
  GtkWidget
  ((string label)))

(define-func gtk_button_pressed
  none
  ((GtkButton button)))

(define-func gtk_button_released
  none
  ((GtkButton button)))

(define-func gtk_button_clicked
  none
  ((GtkButton button)))

(define-func gtk_button_enter
  none
  ((GtkButton button)))

(define-func gtk_button_leave
  none
  ((GtkButton button)))

;;; ToggleButton

(define-object GtkToggleButton (GtkButton)
  (fields
   (bool active)
   (bool draw_indicator)))

(define-func gtk_toggle_button_new
  GtkWidget
  ())

(define-func gtk_toggle_button_new_with_label
  GtkWidget
  ((string label)))

(define-func gtk_toggle_button_set_mode
  none
  ((GtkToggleButton toggle_button)
   (bool draw_indicator)))

(define-func gtk_toggle_button_set_state
  none
  ((GtkToggleButton toggle_button)
   (bool state)))

(define-func gtk_toggle_button_toggled
  none
  ((GtkToggleButton toggle_button)))

;;; CheckButton

(define-object GtkCheckButton (GtkToggleButton))

(define-func gtk_check_button_new
  GtkWidget
  ())

(define-func gtk_check_button_new_with_label
  GtkWidget
  ((string label)))

;;; RadioButton

(define-object GtkRadioButton (GtkCheckButton))

(define-func gtk_radio_button_new_interp
  GtkWidget
  ((GtkRadioButton group (null-ok))))

(define-func gtk_radio_button_new_with_label_interp
  GtkWidget
  ((GtkRadioButton group (null-ok))
   (string label)))

;;; Misc

(define-object GtkMisc (GtkWidget))

(define-func gtk_misc_set_alignment
  none
  ((GtkMisc misc)
   (float xalign)
   (float yalign)))

(define-func gtk_misc_set_padding
  none
  ((GtkMisc misc)
   (int xpad)
   (int ypad)))

;;; Arrow

(define-object GtkArrow (GtkMisc))

(define-func gtk_arrow_new 
  GtkWidget
  ((GtkArrowType arrow_type)
   (GtkShadowType shadow_type)))

(define-func gtk_arrow_set
  none
  ((GtkArrow arrow)
   (GtkArrowType arrow_type)
   (GtkShadowType shadow_type)))

;;; Label

(define-object GtkLabel (GtkMisc))

(define-func gtk_label_new
  GtkWidget
  ((string str)))

(define-func gtk_label_set
  none
  ((GtkLabel label)
   (string str)))

(define-func gtk_label_get_interp
  static_string
  ((GtkLabel label)))

;;;;

(define-object GtkTipsQuery (GtkLabel))

(define-func gtk_tips_query_new
  GtkWidget
  ())

(define-func gtk_tips_query_start_query
  none
  ((GtkTipsQuery tips_query)))

(define-func gtk_tips_query_stop_query
  none
  ((GtkTipsQuery tips_query)))

(define-func gtk_tips_query_set_caller
  none
  ((GtkTipsQuery tips_query)
   (GtkWidget caller)))

(define-func gtk_tips_query_set_labels
  none
  ((GtkTipsQuery tips_query)
   (string label_inactive)
   (string label_no_tip)))

;; VBox

(define-object GtkVBox (GtkBox))

(define-func gtk_vbox_new
  GtkWidget
  ((bool homogenous)
   (int spacing)))

;; HBox

(define-object GtkHBox (GtkBox))

(define-func gtk_hbox_new
  GtkWidget
  ((bool homogenous)
   (int spacing)))

;; Item

(define-object GtkItem (GtkBin))

(define-func gtk_item_select 
  none
  ((GtkItem item)))

(define-func gtk_item_deselect 
  none
  ((GtkItem item)))

(define-func gtk_item_toggle 
  none
  ((GtkItem item)))

;;;; GtkCombo

(define-object GtkCombo (GtkHBox)
  (fields 
   (GtkWidget entry)
   (GtkWidget button)
   (GtkWidget popup)
   (GtkWidget popwin)
   (GtkWidget list)))

(define-func gtk_combo_new
  GtkWidget 
  ())

(define-func gtk_combo_set_value_in_list
  none
  ((GtkCombo combo)
   (bool val)
   (bool ok_if_empty)))

(define-func gtk_combo_set_use_arrows
  none
  ((GtkCombo combo)
   (bool val)))

(define-func gtk_combo_set_use_arrows_always
  none
  ((GtkCombo combo)
   (bool val)))

(define-func gtk_combo_set_case_sensitive
  none
  ((GtkCombo combo)
   (bool val)))

(define-func gtk_combo_set_item_string
  none
  ((GtkCombo combo)
   (GtkItem item)
   (string item_value)))

;; XXX - need GList support for this to work
;; (define-func gtk_combo_set_popdown_strings)


;;;; StatusBar

(define-object GtkStatusbar (GtkHBox))

(define-func gtk_statusbar_new
  GtkWidget
  ())

(define-func gtk_statusbar_push
  uint
  ((GtkStatusbar statusbar)
   (uint context_id)
   (string text)))

(define-func gtk_statusbar_pop
  none
  ((GtkStatusbar statusbar)
   (uint context_id)))

(define-func gtk_statusbar_get_context_id
  uint
  ((GtkStatusbar statusbar)
   (string context_description)))

(define-func gtk_statusbar_remove
  none
  ((GtkStatusbar statusbar)
   (uint context_id)
   (uint message_id)))

;;;; GammaCurve

(define-object GtkGammaCurve (GtkVBox)
  (fields
   (GtkWidget table)
   (GtkWidget curve)
   (float gamma)
   (GtkWidget gamma_dialog)
   (GtkWidget gamma_text)))

(define-func gtk_gamma_curve_new
  GtkWidget
  ())

;; Separator

(define-object GtkSeparator (GtkWidget))

;; HSeparator

(define-object GtkHSeparator (GtkSeparator))

(define-func gtk_hseparator_new
  GtkWidget
  ())

;; VSeparator

(define-object GtkVSeparator (GtkSeparator))

(define-func gtk_vseparator_new
  GtkWidget
  ())

;; Frame

(define-object GtkFrame (GtkBin))

(define-func gtk_frame_new
  GtkWidget
  ((string label (null-ok))))

(define-func gtk_frame_set_label
  none
  ((GtkFrame frame)
   (string label)))

(define-func gtk_frame_set_label_align
  none
  ((GtkFrame frame)
   (float xalign)
   (float yalign)))

(define-func gtk_frame_set_shadow_type
  none
  ((GtkFrame frame)
   (GtkShadowType type)))

;; Aspect Frame

(define-object GtkAspectFrame (GtkFrame))

(define-func gtk_aspect_frame_new
  GtkWidget
  ((string label)
   (float xalign)
   (float yalign)
   (float ratio)
   (int obey_child)))

(define-func gtk_aspect_frame_set
  none
  ((GtkAspectFrame aspect_frame)
   (float xalign)
   (float yalign)
   (float ratio)
   (int obey_child)))

;; Progress Bar

;(define-object GtkProgressBar (GtkWidget)
;  (fields
;   (float percentage)))

(define-func gtk_progress_bar_new
  GtkWidget
  ())

(define-func gtk_progress_bar_update
  none
  ((GtkProgressBar progress_bar)
   (float percentage)))

;;(define-func gtk_progress_bar_percentage
;;  float
;;  ((GtkProgressBar progress_bar)))

;; Tooltips

(define-object GtkTooltips (GtkData))

(define-func gtk_tooltips_new
  GtkTooltips
  ())

(define-func gtk_tooltips_enable
  none
  ((GtkTooltips tooltips)))

(define-func gtk_tooltips_disable
  none
  ((GtkTooltips tooltips)))

(define-func gtk_tooltips_set_delay
  none
  ((GtkTooltips tooltips)
   (int delay)))

(define-func gtk_tooltips_set_tip
  none
  ((GtkTooltips tooltips)
   (GtkWidget widget)
   (string tip_text (null-ok))
   (string tip_private)))

(define-func gtk_tooltips_set_colors
  none
  ((GtkTooltips tooltips)
   (GdkColor background)
   (GdkColor foreground)))

;; MenuShell

(define-object GtkMenuShell (GtkContainer))

(define-func gtk_menu_shell_append
  none
  ((GtkMenuShell menu_shell)
   (GtkWidget child)))

(define-func gtk_menu_shell_prepend
  none
  ((GtkMenuShell menu_shell)
   (GtkWidget child)))

(define-func gtk_menu_shell_insert
  none
  ((GtkMenuShell menu_shell)
   (GtkWidget child)
   (int position)))

(define-func gtk_menu_shell_deactivate
  none
  ((GtkMenuShell menu_shell)))

;; MenuBar

(define-object GtkMenuBar (GtkMenuShell))

(define-func gtk_menu_bar_new
  GtkWidget
  ())

(define-func gtk_menu_bar_append
  none
  ((GtkMenuBar menu_bar)
   (GtkWidget child)))

(define-func gtk_menu_bar_prepend
  none
  ((GtkMenuBar menu_bar)
   (GtkWidget child)))

(define-func gtk_menu_bar_insert
  none
  ((GtkMenuBar menu_bar)
   (GtkWidget child)
   (int position)))

;; Menu

(define-object GtkMenu (GtkMenuShell))

(define-func gtk_menu_new
  GtkWidget
  ())

(define-func gtk_menu_append
  none
  ((GtkMenu menu)
   (GtkWidget child)))

(define-func gtk_menu_prepend
  none
  ((GtkMenu menu)
   (GtkWidget child)))

(define-func gtk_menu_insert
  none
  ((GtkMenu menu)
   (GtkWidget child)
   (int position)))

(define-func gtk_menu_popup_interp
  none
  ((GtkMenu menu)
   (GtkWidget parent_menu_shell)
   (GtkWidget parent_menu_item)
   (int button)
   (int activate_time)))

(define-func gtk_menu_popdown
  none
  ((GtkMenu menu)))

(define-func gtk_menu_get_active
  GtkWidget
  ((GtkMenu menu)))

(define-func gtk_menu_set_active
  none
  ((GtkMenu menu)
   (int index)))

(define-func gtk_menu_set_accelerator_table
  none
  ((GtkMenu menu)
   (GtkAcceleratorTable table)))

;; XXX - probably needs _interp version
;; gtk_menu_attach_to_widget

(define-func gtk_menu_get_attach_widget
  GtkWidget
  ((GtkMenu menu)))

(define-func gtk_menu_detach
  none
  ((GtkMenu menu)))

;; MenuItem

(define-object GtkMenuItem (GtkItem))

(define-func gtk_menu_item_new
  GtkWidget
  ())

(define-func gtk_menu_item_new_with_label
  GtkWidget
  ((string label)))

(define-func gtk_menu_item_set_submenu
  none
  ((GtkMenuItem menu_item)
   (GtkWidget submenu)))

(define-func gtk_menu_item_remove_submenu
  none
  ((GtkMenuItem menu_item)))

(define-func gtk_menu_item_set_placement
  none
  ((GtkMenuItem menu_item)
   (GtkSubmenuPlacement placement)))

(define-func gtk_menu_item_accelerator_size
  none
  ((GtkMenuItem menu_item)))

(define-func gtk_menu_item_accelerator_text
  none
  ((GtkMenuItem menu_item)
   ;; is this right or is it a return value?
   (string accelerator_text))) 

(define-func gtk_menu_item_configure
  none
  ((GtkMenuItem menu_item)
   (bool show_toggle_indicator)
   (bool show_submenu_indicator)))

(define-func gtk_menu_item_select
  none
  ((GtkMenuItem menu_item)))

(define-func gtk_menu_item_deselect
  none
  ((GtkMenuItem menu_item)))

(define-func gtk_menu_item_activate
  none
  ((GtkMenuItem menu_item)))

(define-func gtk_menu_item_right_justify
  none
  ((GtkMenuItem menu_item)))

;; CheckMenuItem

(define-object GtkCheckMenuItem (GtkMenuItem))

(define-func gtk_check_menu_item_new
  GtkWidget
  ())

(define-func gtk_check_menu_item_new_with_label
  GtkWidget
  ((string label)))

(define-func gtk_check_menu_item_set_state
  none
  ((GtkCheckMenuItem check_menu_item)
   (bool state)))

(define-func gtk_check_menu_item_set_show_toggle
  none
  ((GtkCheckMenuItem menu_item)
   (bool always)))

(define-func gtk_check_menu_item_toggled
  none
  ((GtkCheckMenuItem check_menu_item)))

;; RadioMenuItem

(define-object GtkRadioMenuItem (GtkCheckMenuItem))

(define-func gtk_radio_menu_item_new_interp
  GtkWidget
  ((GtkRadioMenuItem group (null-ok))))

(define-func gtk_radio_menu_item_new_with_label_interp
  GtkWidget
  ((GtkRadioMenuItem group (null-ok))
   (string label)))

;; OptionMenu

(define-object GtkOptionMenu (GtkButton))

(define-func gtk_option_menu_new
  GtkWidget
  ())

(define-func gtk_option_menu_get_menu
  GtkWidget
  ((GtkOptionMenu option_menu)))

(define-func gtk_option_menu_set_menu
  none
  ((GtkOptionMenu option_menu)
   (GtkWidget menu)))

(define-func gtk_option_menu_remove_menu
  none
  ((GtkOptionMenu option_menu)))

(define-func gtk_option_menu_set_history
  none
  ((GtkOptionMenu option_menu)
   (int index)))

;; Pixmaps

(define-object GtkPixmap (GtkMisc))

(define-func gtk_pixmap_new_interp
  GtkWidget
  ((string xpm_file)
   (GtkWidget intended_parent)))

;; Data

(define-object GtkData (GtkObject))

;; Adjustment

(define-object GtkAdjustment (GtkData)
  (fields
   (float value)))

(define-func gtk_adjustment_new
  GtkObject
  ((float value)
   (float lower)
   (float upper)
   (float step_increment)
   (float page_increment)
   (float page_size)))

(define-func gtk_adjustment_set_value
  none
  ((GtkAdjustment adjustment)
   (float value)))

;;; Viewport

(define-object GtkViewport (GtkBin))

(define-func gtk_viewport_new
  GtkWidget
  ((GtkAdjustment hadjustment)
   (GtkAdjustment vadjustment)))

(define-func gtk_viewport_get_hadjustment
  GtkAdjustment
  ((GtkViewport viewport)))

(define-func gtk_viewport_get_vadjustment
  GtkAdjustment
  ((GtkViewport viewport)))

(define-func gtk_viewport_set_hadjustment
  none
  ((GtkViewport viewport)
   (GtkAdjustment adjustment)))

(define-func gtk_viewport_set_vadjustment
  none
  ((GtkViewport viewport)
   (GtkAdjustment adjustment)))

(define-func gtk_viewport_set_shadow_type
  none
  ((GtkViewport viewport)
   (GtkShadowType type)))

;; ScrolledWidow

(define-object GtkScrolledWindow (GtkContainer))

(define-func gtk_scrolled_window_new
  GtkWidget
  ((GtkAdjustment hadjustment (null-ok) (= "NULL"))
   (GtkAdjustment vadjustment (null-ok) (= "NULL"))))

(define-func gtk_scrolled_window_get_hadjustment
  GtkAdjustment
  ((GtkScrolledWindow scrolled_window)))

(define-func gtk_scrolled_window_get_vadjustment
  GtkAdjustment
  ((GtkScrolledWindow scrolled_window)))

(define-func gtk_scrolled_window_set_policy
  none
  ((GtkScrolledWindow scrolled_window)
   (GtkPolicyType hscrollbar_policy)
   (GtkPolicyType vscrollbar_policy)))

;; ListItem

(define-object GtkListItem (GtkItem))

(define-func gtk_list_item_new
  GtkWidget
  ())

(define-func gtk_list_item_new_with_label
  GtkWidget
  ((string label)))

(define-func gtk_list_item_select
  none
  ((GtkListItem list_item)))

(define-func gtk_list_item_deselect
  none
  ((GtkListItem list_item)))

;; List

(define-object GtkList (GtkContainer))

(define-func gtk_list_new
  GtkWidget
  ())

(define-func gtk_list_append_item
  none
  ((GtkList list)
   (GtkListItem item)))

(define-func gtk_list_prepend_item
  none
  ((GtkList list)
   (GtkListItem item)))

;; XXX many missing

(define-func gtk_list_clear_items
  none
  ((GtkList list)
   (int start)
   (int end)))

(define-func gtk_list_select_item
  none
  ((GtkList list)
   (int item)))

(define-func gtk_list_unselect_item
  none
  ((GtkList list)
   (int item)))

(define-func gtk_list_select_child
  none
  ((GtkList list)
   (GtkWidget child)))

(define-func gtk_list_unselect_child
  none
  ((GtkList list)
   (GtkWidget child)))

(define-func gtk_list_child_position
  int
  ((GtkList list)
   (GtkWidget child)))

(define-func gtk_list_set_selection_mode
  none
  ((GtkList list)
   (GtkSelectionMode mode)))

;; Notebook

(define-object GtkNotebook (GtkContainer)
  (fields
   (GtkPositionType tab_pos)))

(define-func gtk_notebook_new
  GtkWidget
  ())

(define-func gtk_notebook_append_page
  none
  ((GtkNotebook notebook)
   (GtkWidget child)
   (GtkWidget tab_label)))

(define-func gtk_notebook_append_page_menu  
  none
  ((GtkNotebook notebook)
   (GtkWidget child)
   (GtkWidget tab_label)
   (GtkWidget menu_label)))

(define-func gtk_notebook_prepend_page
  none
  ((GtkNotebook notebook)
   (GtkWidget child)
   (GtkWidget tab_label)))

(define-func gtk_notebook_prepend_page_menu 
  none
  ((GtkNotebook notebook)
   (GtkWidget child)
   (GtkWidget tab_label)
   (GtkWidget menu_label)))

(define-func gtk_notebook_insert_page
  none
  ((GtkNotebook notebook)
   (GtkWidget child)
   (GtkWidget tab_label)
   (int position)))

(define-func gtk_notebook_insert_page_menu 
  none
  ((GtkNotebook notebook)
   (GtkWidget child)
   (GtkWidget tab_label)
   (GtkWidget menu_label)
   (int position)))

(define-func gtk_notebook_remove_page
  none
  ((GtkNotebook notebook)
   (int page_num)))

(define-func gtk_notebook_current_page
  int
  ((GtkNotebook notebook)))

(define-func gtk_notebook_set_page
  none
  ((GtkNotebook notebook)
   (int page_num)))

(define-func gtk_notebook_next_page
  none
  ((GtkNotebook notebook)))

(define-func gtk_notebook_prev_page
  none
  ((GtkNotebook notebook)))

(define-func gtk_notebook_set_tab_pos
  none
  ((GtkNotebook notebook)
   (GtkPositionType pos)))

(define-func gtk_notebook_set_show_tabs
  none
  ((GtkNotebook notebook)
   (bool show_tabs)))

(define-func gtk_notebook_set_show_border
  none
  ((GtkNotebook notebook)
   (bool show_border)))

(define-func gtk_notebook_set_scrollable 
  none
  ((GtkNotebook notebook)
   (int              scrollable)))

(define-func gtk_notebook_set_tab_border 
  none
  ((GtkNotebook notebook)
   (int border_width)))

(define-func gtk_notebook_popup_enable 
  none
  ((GtkNotebook notebook)))
   
(define-func gtk_notebook_popup_disable 
  none
  ((GtkNotebook notebook)))

;; Editable

(define-object GtkEditable (GtkWidget))


;; Entry

(define-object GtkEntry (GtkEditable))

(define-func gtk_entry_new
  GtkWidget
  ())

(define-func gtk_entry_new_with_max_length 
  none
;; should actually be int16 - does it matter?
  ((int max)))

(define-func gtk_entry_set_text
  none
  ((GtkEntry entry)
   (string text)))

(define-func gtk_entry_append_text
  none
  ((GtkEntry entry)
   (string text)))

(define-func gtk_entry_prepend_text
  none
  ((GtkEntry entry)
   (string text)))

(define-func gtk_entry_set_position
  none
  ((GtkEntry entry)
   (int position)))

(define-func gtk_entry_get_text
  static_string
  ((GtkEntry entry)))

(define-func gtk_entry_select_region
  none
  ((GtkEntry entry)
   (int start)
   (int end)))

(define-func gtk_entry_set_visibility
  none
  ((GtkEntry entry)
   (bool visible)))

(define-func gtk_entry_set_editable
  none
  ((GtkEntry entry)
   (bool editable)))

;; SpinButton

(define-object GtkSpinButton (GtkEntry))

(define-func gtk_spin_button_new   
  GtkWidget
  ((GtkAdjustment adjustment)
   (float climb_rate)
   (int digits)))

(define-func gtk_spin_button_set_adjustment 
  none
  ((GtkSpinButton spin_button)
   (GtkAdjustment adjustment)))

(define-func gtk_spin_button_get_adjustment 
  GtkAdjustment
  ((GtkSpinButton spin_button)))

(define-func gtk_spin_button_set_digits 
  none
  ((GtkSpinButton spin_button)
   (int digits)))

(define-func gtk_spin_button_get_value_as_float 
  float 
  ((GtkSpinButton spin_button)))

(define-func gtk_spin_button_get_value_as_int  
  int
  ((GtkSpinButton spin_button)))

(define-func gtk_spin_button_set_value 
  none
  ((GtkSpinButton spin_button) 
   (float value)))

(define-func gtk_spin_button_set_update_policy 
  none
  ((GtkSpinButton spin_button)
   (GtkSpinButtonUpdatePolicy policy)))

;; Text

(define-object GtkText (GtkEditable))

(define-func gtk_text_new
  GtkWidget
  ((GtkAdjustment hadj (null-ok))
   (GtkAdjustment vadj (null-ok))))

(define-func gtk_text_set_editable
  none
  ((GtkText text)
   (bool editable)))

(define-func gtk_text_set_adjustments
  none
  ((GtkText text)
   (GtkAdjustment hadj)
   (GtkAdjustment vadj)))

(define-func gtk_text_set_point
  none
  ((GtkText text)
   (uint index)))

(define-func gtk_text_get_point
  uint
  ((GtkText text)))

(define-func gtk_text_get_length
  uint
  ((GtkText text)))

(define-func gtk_text_freeze
  none
  ((GtkText text)))

(define-func gtk_text_thaw
  none
  ((GtkText text)))

(define-func gtk_text_insert
  none
  ((GtkText text)
   (GdkFont font (null-ok))
   (GdkColor fore (null-ok))
   (GdkColor back (null-ok))
   (string chars)
   (int length)))

(define-func gtk_text_backward_delete
  none
  ((GtkText text)
   (uint nchars)))

(define-func gtk_text_forward_delete
  none
  ((GtkText text)
   (uint nchars)))

;; Alignment

(define-object GtkAlignment (GtkBin))

(define-func gtk_alignment_new
  GtkWidget
  ((float xalign)
   (float yalign)
   (float xscale)
   (float yscale)))

(define-func gtk_alignment_set
  none
  ((GtkAlignment alignment)
   (float xalign)
   (float yalign)
   (float xscale)
   (float yscale)))

;; Color

;; XXX lots missing

(define-func gdk_color_parse_interp
  GdkColor
  ((string spec)))

;; DrawingArea 

(define-object GtkDrawingArea (GtkWidget))

(define-func gtk_drawing_area_new
  GtkWidget
  ())

(define-func gtk_drawing_area_size
  none
  ((GtkDrawingArea darea)
   (int width)
   (int height)))


;; Curve

(define-object GtkCurve (GtkDrawingArea))

(define-func gtk_curve_new
  GtkWidget
  ())

(define-func gtk_curve_reset
  none
  ((GtkCurve curve)))

(define-func gtk_curve_set_gamma
  none
  ((GtkCurve curve)
   (float gamma)))

(define-func gtk_curve_set_range
  none
  ((GtkCurve curve)
   (float min_x)
   (float max_x)
   (float min_y)
   (float max_y)))

;; XXX - needs to convert something to length and array of floats
;; (define-func gtk_curve_set_vector)

;; XXX - needs to conver something to length and array of floats
;; (define-func gtk_curve_get_vector)

(define-func gtk_curve_set_curve_type
  none
  ((GtkCurve curve)
   (GtkCurveType type)))


;; Preview

;; XXX lots missing


(define-object GtkPreview (GtkWidget))

(define-func gtk_preview_new 
  GtkWidget
  ((GtkPreviewType type)))

(define-func gtk_preview_size 
  none
  ((GtkPreview preview)
   (int width)
   (int height)))

;; XXX - needs GdkGC
;; (define-func gtk_preview_put)
;; (define-funct gtk_preview_put_row)

;; XXX - not sure what to do for the data
;; (define-func gtk_preview_draw_row)

(define-func gtk_preview_set_expand
  none
  ((GtkPreview preview)
   (bool expand)))

;; XXX - can't handle the double - would substituting float work?
;;(define-func gtk_preview_set_gamma
;;  none
;;  ((double gamma)))

(define-func gtk_preview_set_color_cube 
  none
  ((uint nred_shades)
   (uint ngreen_shades)
   (uint nblue_shades)
   (uint ngray_shades)))


(define-func gtk_preview_set_install_cmap
  none
  ((bool install_cmap)))

(define-func gtk_preview_set_reserved
  none
  ((int nreserved)))

(define-func gtk_preview_get_visual
  GdkVisual
  ())

(define-func gtk_preview_get_cmap
  GdkColormap
  ())

;; FileSelection

(define-object GtkFileSelection (GtkWindow)
  (fields
   (GtkWidget dir_list)
   (GtkWidget file_list)
   (GtkWidget selection_entry)
   (GtkWidget selection_text)
   (GtkWidget main_vbox)
   (GtkWidget ok_button)
   (GtkWidget cancel_button)
   (GtkWidget help_button)))

(define-func gtk_file_selection_new
  GtkWidget
  ((string title)))

(define-func gtk_file_selection_set_filename
  none
  ((GtkFileSelection filesel)
   (string filename)))

(define-func gtk_file_selection_get_filename
  static_string
  ((GtkFileSelection filesel)))

;; ColorSelectionDialog

(define-object GtkColorSelectionDialog (GtkWindow)
  (fields
   (GtkWidget colorsel)
   (GtkWidget main_vbox)
   (GtkWidget ok_button)
   (GtkWidget reset_button)
   (GtkWidget cancel_button)
   (GtkWidget help_button)))

(define-func gtk_color_selection_dialog_new
  GtkWidget
  ((string title)))

;; ColorSelection

(define-object GtkColorSelection (GtkVBox))

(define-func gtk_color_selection_new
  GtkWidget
  ())

(define-func gtk_color_selection_set_update_policy
  none
  ((GtkColorSelection colorsel)
   (GtkUpdateType policy)))

(define-func gtk_color_selection_set_opacity
  none
  ((GtkColorSelection colorsel)
   (bool use_opacity)))

;; XXX - uses gdouble * argument, an array of doubles, to represent colors
;; (define-func gtk_color_selection_set_color)

;; XXX - uses gdouble * argument, an array of doubles, to represent colors
;; (define-func gtk_color_selection_get_color)

;; Range

(define-object GtkRange (GtkWidget))

(define-func gtk_range_get_adjustment
  GtkAdjustment
  ((GtkRange range)))

(define-func gtk_range_set_update_policy
  none
  ((GtkRange range)
   (GtkUpdateType policy)))

(define-func gtk_range_set_adjustment
  none
  ((GtkRange range)
   (GtkAdjustment adjustment)))

;; Scale

(define-object GtkScale (GtkRange))

(define-func gtk_scale_set_digits
  none
  ((GtkScale scale)
   (uint digits)))

(define-func gtk_scale_set_draw_value
  none
  ((GtkScale scale)
   (bool draw_value)))

(define-func gtk_scale_set_value_pos
  none
  ((GtkScale scale)
   (GtkPositionType pos)))

(define-func gtk_scale_value_width
  int
  ((GtkScale scale)))

(define-func gtk_scale_draw_value
  none
  ((GtkScale scale)))

;; HScale

(define-object GtkHScale (GtkScale))

(define-func gtk_hscale_new
  GtkWidget
  ((GtkAdjustment adjustment)))

;; VScale

(define-object GtkVScale (GtkScale))

(define-func gtk_vscale_new
  GtkWidget
  ((GtkAdjustment adjustment)))

;; Scrollbar

(define-object GtkScrollbar (GtkRange))

;; HScrollbar

(define-object GtkHScrollbar (GtkScrollbar))

(define-func gtk_hscrollbar_new
  GtkWidget
  ((GtkAdjustment adjustment)))

;; VScrollbar

(define-object GtkVScrollbar (GtkScrollbar))

(define-func gtk_vscrollbar_new
  GtkWidget
  ((GtkAdjustment adjustment)))

;; Ruler

(define-object GtkRuler (GtkWidget))

(define-func gtk_ruler_set_metric
  none
  ((GtkRuler ruler)
   (GtkMetricType metric)))

(define-func gtk_ruler_set_range
  none
  ((GtkRuler ruler)
   (float lower)
   (float upper)
   (float position)
   (float max_size)))

;; HRuler

(define-object GtkHRuler (GtkRuler))

(define-func gtk_hruler_new
  GtkWidget
  ())

;; VRuler

(define-object GtkVRuler (GtkRuler))

(define-func gtk_vruler_new
  GtkWidget
  ())

;; Dialog

(define-object GtkDialog (GtkWindow)
  (fields
   (GtkWidget vbox)
   (GtkWidget action_area)))

(define-func gtk_dialog_new
  GtkWidget
  ())

;; InputDialog

(define-object GtkInputDialog (GtkDialog)
  (fields
   (GtkWidget close_button)
   (GtkWidget save_button)))

(define-func gtk_input_dialog_new
  GtkWidget
  ())

;; Paned

(define-object GtkPaned (GtkContainer))

(define-func gtk_paned_add1
  none
  ((GtkPaned paned)
   (GtkWidget child)))

(define-func gtk_paned_add2
  none
  ((GtkPaned paned)
   (GtkWidget child)))

(define-func gtk_paned_handle_size
  none
  ((GtkPaned paned)
   (int size)))

(define-func gtk_paned_gutter_size
  none
  ((GtkPaned paned)
   (int size)))

;; HPaned

(define-object GtkHPaned (GtkPaned))

(define-func gtk_hpaned_new
  GtkWidget
  ())

;; VPaned

(define-object GtkVPaned (GtkPaned))

(define-func gtk_vpaned_new
  GtkWidget
  ())

;;; hack

;;(define-func panel_register_toy
;;  none
;;  ((gpointer panel)
;;   (GtkWidget applet)
;;   (string id)
;;   (string params)
;;   (int x)
;;   (int y)
;;   (int flags)))

;;(define-func panel_quit
;;  none
;;  ((gpointer panel)))

;;(define-func panel_new_applet
;;  none
;;  ((gpointer panel)
;;   (string applet)
;;   (string params)))















;additions over gtk.defs from gtk+-0.99.2:

;(define-enum GtkCurveType
;  (linear GTK_CURVE_TYPE_LINEAR)
;  (spline GTK_CURVE_TYPE_SPLINE)
;  (free GTK_CURVE_TYPE_FREE))

;(define-enum GtkSelectionMode
;  (single GTK_SELECTION_SINGLE)
;  (browse GTK_SELECTION_BROWSE)
;  (multiple GTK_SELECTION_MULTIPLE)
;  (extended GTK_SELECTION_EXTENDED))

;(define-enum GdkFunction
;  (copy GDK_COPY)
;  (invert GDK_INVERT)
;  (xor GDK_XOR)) 

;(define-enum GdkFill
;  (solid GDK_SOLID)
;  (tiled GDK_TILED)
;  (stippled GDK_STIPPLED)
;  (opaque-stippled GDK_OPAQUE_STIPPLED))

;(define-enum GdkLineStyle
;  (solid GDK_LINE_SOLID)
;  (on-off-dash GDK_LINE_ON_OFF_DASH)
;  (double-dash GDK_LINE_DOUBLE_DASH))

;(define-enum GdkInputMode
;  (disabled GDK_MODE_DISABLED)
;  (screen GDK_MODE_SCREEN)
;  (window GDK_MODE_WINDOW))

;(define-enum GdkInputSource
;  (mouse GDK_SOURCE_MOUSE)
;  (pen GDK_SOURCE_PEN)
;  (eraser GDK_SOURCE_ERASER)
;  (cursor GDK_SOURCE_CURSOR))


;(define-enum GdkAxisUse
;  (ignore GDK_AXIS_IGNORE)
;  (x GDK_AXIS_X)
;  (y GDK_AXIS_Y)
;  (pressure GDK_AXIS_PRESSURE)
;  (xtilt GDK_AXIS_XTILT)
;  (ytilt GDK_AXIS_YTILT)
;  (last GDK_AXIS_LAST))

;(define-enum GtkJustification
;  (left GTK_JUSTIFY_LEFT)
;  (right GTK_JUSTIFY_RIGHT)
;  (center GTK_JUSTIFY_CENTER)
;  (fill GTK_JUSTIFY_FILL))

;(define-enum GdkDndType
;  (not-dnd GDK_DNDTYPE_NOTDND)
;  (unknown GDK_DNDTYPE_UNKNOWN)
;  (raw-data GDK_DNDTYPE_RAWDATA)
;  (file GDK_DNDTYPE_FILE)
;  (files GDK_DNDTYPE_FILES)
;  (text GDK_DNDTYPE_TEXT)
;  (dir GDK_DNDTYPE_DIR)
;  (link GDK_DNDTYPE_LINK)
;  (exe GDK_DNDTYPE_EXE)
;  (url GDK_DNDTYPE_URL)
;  (mime GDK_DNDTYPE_MIME)
;  (end GDK_DNDTYPE_END))

;(define-enum GtkUpdateType
;  (continuous GTK_UPDATE_CONTINUOUS)
;  (discontinuous GTK_UPDATE_DISCONTINUOUS)
;  (delayed GTK_UPDATE_DELAYED))

;(define-object GtkHandleBox (GtkEventBox))


;(define-object GtkAdjustment (GtkData))
;(define-object GtkAspectFrame (GtkFrame))
;(define-object GtkAlignment (GtkBin))
;(define-object GtkArrow (GtkMisc))
;(define-object GtkBin (GtkContainer))
;(define-object GtkBox (GtkContainer))
;(define-object GtkButton (GtkContainer))
;(define-object GtkCheckButton (GtkToggleButton))
;(define-object GtkColorSelection (GtkVBox))
;(define-object GtkColorSelectionDialog (GtkWindow))
;(define-object GtkContainer (GtkWidget))
;(define-object GtkCurve (GtkDrawingArea))
;(define-object GtkData (GtkObject))
;(define-object GtkDialog (GtkWindow))
;(define-object GtkDrawingArea (GtkWidget))
;(define-object GtkEntry (GtkWidget))
;(define-object GtkFileSelection (GtkWindow))
;(define-object GtkFrame (GtkBin))
;(define-object GtkGammaCurve (GtkVBox))
;(define-object GtkHBox (GtkBox))
;(define-object GtkHPaned (GtkPaned))
;(define-object GtkHRuler (GtkRuler))
;(define-object GtkHScale (GtkScale))
;(define-object GtkHScrollbar (GtkScrollbar))
;(define-object GtkHSeparator (GtkSeparator))
(define-object GtkImage (GtkMisc))
;(define-object GtkInputDialog (GtkWindow))
;(define-object GtkItem (GtkBin))
;(define-object GtkLabel (GtkMisc))
;(define-object GtkList (GtkContainer))
;(define-object GtkListItem (GtkItem))
;(define-object GtkMenu (GtkMenuShell))
;(define-object GtkMenuBar (GtkMenuShell))
;(define-object GtkMenuItem (GtkItem))
;(define-object GtkMenuShell (GtkContainer))
;(define-object GtkMisc (GtkWidget))
;(define-object GtkNotebook (GtkContainer))
;(define-object GtkObject ())
;(define-object GtkOptionMenu (GtkButton))
;(define-object GtkPaned (GtkContainer))
;(define-object GtkPixmap (GtkMisc))
;(define-object GtkPreview (GtkWidget))
(define-object GtkProgressBar (GtkWidget))
;(define-object GtkRadioButton (GtkCheckButton))
;(define-object GtkRadioMenuItem (GtkCheckMenuItem))
;(define-object GtkRange (GtkWidget))
;(define-object GtkRuler (GtkWidget))
;(define-object GtkScale (GtkRange))
;(define-object GtkScrollbar (GtkRange))
;(define-object GtkScrolledWindow (GtkContainer))
;(define-object GtkSeparator (GtkWidget))
;(define-object GtkTable (GtkContainer))
;(define-object GtkText (GtkWidget))
;(define-object GtkToggleButton (GtkButton))
;(define-object GtkTree (GtkContainer))
;(define-object GtkTreeItem (GtkItem))
;(define-object GtkVBox (GtkBox))
;(define-object GtkViewport (GtkBin))
;(define-object GtkVPaned (GtkPaned))
;(define-object GtkVRuler (GtkRuler))
;(define-object GtkVScale (GtkScale))
;(define-object GtkVScrollbar (GtkScrollbar))
;(define-object GtkVSeparator (GtkSeparator))
;(define-object GtkWidget (GtkObject))
;(define-object GtkWindow (GtkBin))
;
;(define-object GtkCheckMenuItem (GtkMenuItem))
;(define-object GtkButtonBox (GtkBox))
;(define-object GtkEventBox (GtkBin))
;(define-object GtkFixed (GtkContainer))
;(define-object GtkHButtonBox (GtkButtonBox))
;(define-object GtkVButtonBox (GtkButtonBox))

;(define-boxed GdkFont
;  gdk_font_ref
;  gdk_font_unref)

(define-enum GtkVisibility
  (none GTK_VISIBILITY_NONE)
  (partial GTK_VISIBILITY_PARTIAL)
  (full GTK_VISIBILITY_FULL))

(define-enum GdkInputSource
  (mouse GDK_SOURCE_MOUSE)
  (pen GDK_SOURCE_PEN)
  (eraser GDK_SOURCE_ERASER)
  (cursor GDK_SOURCE_CURSOR))

(define-enum GdkInputMode
  (disabled GDK_MODE_DISABLED)
  (screen GDK_MODE_SCREEN)
  (window GDK_MODE_WINDOW))

(define-enum GdkAxisUse
  (ignore GDK_AXIS_IGNORE)
  (x GDK_AXIS_X)
  (y GDK_AXIS_Y)
  (pressure GDK_AXIS_PRESSURE)
  (x-tilt GDK_AXIS_XTILT)
  (y-tilt GDK_AXIS_YTILT)
  (last GDK_AXIS_LAST))

;(define-object GtkToolbar (GtkContainer))

;(define-boxed GtkNotebookPage
;	"(void)"
;	"(void)")

(define-boxed GtkBoxChild
	"(void)"
	"(void)")

;; Waiting for GtkPacker to be released
;(define-object GtkPacker (GtkContainer))
;
;(define-enum GtkAnchor
;	(center GTK_ANCHOR_CENTER)
;	(north GTK_ANCHOR_N)
;	(ne GTK_ANCHOR_NE)
;	(east GTK_ANCHOR_E)
;	(se GTK_ANCHOR_SE)
;	(south GTK_ANCHOR_S)
;	(sw GTK_ANCHOR_SW)
;	(west GTK_ANCHOR_W)
;	(nw GTK_ANCHOR_NW))
;
;(define-enum GtkSide
;	(top GTK_SIDE_TOP)
;	(bottom GTK_SIDE_BOTTOM)
;	(left GTK_SIDE_LEFT)
;	(right GTK_SIDE_RIGHT))
;
;(define-flags GtkPackerOptions
;	(pack-expand GTK_PACK_EXPAND)
;	(fill-x GTK_FILL_X)
;	(fill-y GTK_FILL_Y))
;
;(define-boxed GtkPackerChild
;	"(void)"
;	"(void)")

(define-boxed GdkColorContext
	"(void)"
	"(void)")

(define-struct GdkColor
	(members
		(pixel	gulong)
		(red	gushort)
		(green	gushort)
		(blue	gushort)
	)
)

(define-struct GdkEvent
)

; Speculation
;(define-struct GdkEvent
;	(temporary) ;; never retained past creation context
;	(members
;		(window	GdkWindow)
;		(send_event	gint8)
;		(type	GdkEventType)
;	)
;	(union-element type
;		(GDK_EXPOSE
;			(members
;				(area	GdkRectangle)
;				(count	gint)
;			)
;		)
;		(GDK_VISIBILITY
;			(members
;				(state	GdkVisibilityState)
;			)
;		)
;		(GDK_EVENT_MOTION
;			(members
;				(send_event		gint8)
;				(time			guint32)
;				(x				gdouble)
;				(y				gdouble)
;				(pressure		gdouble)
;				(xtilt			gdouble)
;				(ytilt			gdouble)
;				(state			guint)
;				(is_hint		gint16)
;				(source			GdkInputSource)
;				(deviceid		guint32)
;				(x_root			gdouble)
;				(y_root			gdouble)
;			)
;		)
;	)
;)

(define-struct GtkAllocation
	(members
		(x		gint16)
		(y		gint16)
		(width	gint16)
		(height	gint16)
	)
)

(define-struct GtkRequisition
	(members
		(width	gint16)
		(height	gint16)
	)
)

(define-struct GtkNotebookPage
	(temporary) ;; never retained past creation context
	(members
		(child			GtkWidget)
		(tab_label		GtkWidget)
		(menu_label		GtkWidget)
		(default_menu	guint)
		(default_tab	guint)
		(requisition	GtkRequisition)
		(allocation		GtkAllocation)
	)
)

(define-boxed GdkCursor
	"(void)"
	"(void)")