+(export 'widget-queue-resize)
+
+(defcfun (widget-queue-resize-no-redraw "gtk_widget_queue_resize_no_redraw") :void
+ (widget (g-object widget)))
+
+(export 'widget-queue-resize-no-redraw)
+
+; TODO: gtk_widget_get_child_requisition
+
+; TODO: gtk_widget_size_allocate
+
+(defcfun (widget-add-accelerator "gtk_widget_add_accelerator") :void
+ (widget g-object)
+ (accel-signal :string)
+ (accel-group g-object)
+ (accel-key :uint)
+ (accel-mods gdk-modifier-type)
+ (accel-flags accel-flags))
+
+(export 'widget-add-accelerator)
+
+(defcfun (widget-remove-accelerator "gtk_widget_remove_accelerator") :void
+ (widget g-object)
+ (accel-group g-object)
+ (accel-key :uint)
+ (accel-mods gdk-modifier-type))
+
+(export 'widget-remove-accelerator)
+
+(defcfun (widget-set-accel-path "gtk_widget_set_accel_path") :void
+ (widget g-object)
+ (accel-path :string)
+ (accel-group g-object))
+
+(export 'widget-set-accel-path)
+
+; TODO: gtk_widget_list_accel_closures
+
+(defcfun gtk-widget-can-activate-accel :boolean
+ (widget g-object)
+ (signal-id :uint))
+
+(defun widget-can-activate-accel (widget signal)
+ (when (stringp signal) (setf signal (g-signal-lookup signal (g-type-from-object widget))))
+ (gtk-widget-can-activate-accel widget signal))
+
+(export 'widget-can-activate-accel)
+
+; TODO: gtk_widget_event
+
+(defcfun (widget-activate "gtk_widget_activate") :boolean
+ (widget g-object))
+
+(export 'widget-activate)
+
+(defcfun (widget-reparent "gtk_widget_reparent") :void
+ (widget g-object)
+ (new-parent g-object))
+
+(export 'widget-reparent)
+
+(defcfun gtk-widget-intersect :boolean
+ (widget g-object)
+ (area (g-boxed-ptr rectangle))
+ (intersection (g-boxed-ptr rectangle :in-out)))
+
+(defun widget-intersect (widget rectangle)
+ (let ((result (make-rectangle :x 0 :y 0 :width 0 :height 0)))
+ (when (gtk-widget-intersect widget rectangle result)
+ result)))
+
+(export 'widget-intersect)
+
+(defcfun (widget-focus-p "gtk_widget_is_focus") :boolean
+ (widget g-object))
+
+(export 'widget-focus-p)
+
+(defcfun (widget-grab-focus "gtk_widget_grab_focus") :void
+ (widget g-object))
+
+(export 'widget-grab-focus)
+
+(defcfun (widget-grab-default "gtk_widget_grab_default") :void
+ (widget g-object))
+
+(export 'widget-grab-default)
+
+; TODO: gtk_widget_set_state
+
+; TODO: gtk_widget_set_parent_window
+
+; TODO: gtk_widget_get_parent_window
+
+; TODO: gtk_widget_set_extension_events
+
+; TODO: gtk_widget_get_extension_events
+
+
+; fix ownership issues:
+; TODO: gtk_widget_get_toplevel
+
+; TODO: gtk_widget_get_ancestor
+
+; TODO: gtk_widget_get_colormap
+
+; TODO: gtk_widget_get_visual
+
+(defcfun gtk-widget-get-pointer :void
+ (widget g-object)
+ (x (:pointer :int))
+ (y (:pointer :int)))
+
+(defun widget-pointer (widget)
+ (with-foreign-objects ((x :int) (y :int))
+ (gtk-widget-get-pointer widget x y)
+ (values (mem-ref x :int) (mem-ref y :int))))
+
+(export 'widget-pointer)
+
+(defcfun (widget-contained-p "gtk_widget_is_ancestor") :boolean
+ (widget g-object)
+ (container g-object))
+
+(export 'widget-contained-p)
+
+(defcfun gtk-widget-translate-coordinates :boolean
+ (src-widget g-object)
+ (dst-widget g-object)
+ (src-x :int)
+ (src-y :int)
+ (dst-x (:pointer :int))
+ (dst-y (:pointer :int)))
+
+(defun widget-translate-coordinates (src-widget dst-widget src-x src-y)
+ (with-foreign-objects ((dst-x :int) (dst-y :int))
+ (gtk-widget-translate-coordinates src-widget dst-widget src-x src-y dst-x dst-y)
+ (values (mem-ref dst-x :int)
+ (mem-ref dst-y :int))))
+
+(export 'widget-translate-coordinates)
+
+(defcfun (widget-ensure-style "gtk_widget_ensure_style") :void
+ (widget g-object))
+
+(export 'widget-ensure-style)
+
+(defcfun (widget-reset-rc-styles "gtk_widget_reset_rc_styles") :void
+ (widget g-object))
+
+(export 'widget-reset-rc-styles)
+
+; TODO: gtk_widget_push_colormap
+
+; TODO: gtk_widget_pop_colormap
+
+; TODO: gtk_widget_set_default_colormap
+
+; TODO: gtk_widget_get_default_colormap
+
+; TODO: gtk_widget_get_default_style (ownership)
+
+; TODO: gtk_widget_get_default_visual
+
+(defcfun (widget-default-direction "gtk_widget_get_default_direction") text-direction)
+
+(defcfun gtk-widget-set-default-direction :void
+ (direction text-direction))
+
+(defun (setf widget-default-direction) (new-value)
+ (gtk-widget-set-default-direction new-value))
+
+(export 'widget-default-direction)
+
+; TODO: gtk_widget_shape_combine_mask
+
+; TODO: gtk_widget_input_shape_combine_mask
+
+(defcfun gtk-widget-path :void
+ (widget g-object)
+ (path-length (:pointer :uint))
+ (path (:pointer (:pointer :char)))
+ (path-reversed (:pointer (:pointer :char))))
+
+(defcfun gtk-widget-class-path :void
+ (widget g-object)
+ (path-length (:pointer :uint))
+ (path (:pointer (:pointer :char)))
+ (path-reversed (:pointer (:pointer :char))))
+
+(defun widget-path (widget &key (path-type :name))
+ (assert (typep path-type '(member :name :class)))
+ (with-foreign-object (path :pointer)
+ (ecase path-type
+ (:name (gtk-widget-path widget (null-pointer) path (null-pointer)))
+ (:class (gtk-widget-class-path widget (null-pointer) path (null-pointer))))
+ (mem-ref path '(g-string :free-from-foreign t))))
+
+(export 'widget-path)
+
+; TODO: gtk_widget_modify_style
+
+; TODO: gtk_widget_get_modifier_style
+
+; TODO: gtk_widget_modify_fg
+
+; TODO: gtk_widget_modify_bg
+
+; TODO: gtk_widget_modify_text
+
+; TODO: gtk_widget_modify_base
+
+; TODO: gtk_widget_modify_font
+
+; TODO: gtk_widget_modify_cursor
+
+(defcfun (widget-create-pango-context "gtk_widget_create_pango_context") g-object
+ (widget g-object))
+
+(export 'widget-create-pango-context)
+
+(defcfun (widget-get-pango-context "gtk_widget_get_pango_context") g-object
+ (widget g-object))
+
+(export 'widget-get-pango-context)
+
+(defcfun (widget-create-pango-layout "gtk_widget_create_pango_layout") (g-object gdk::pango-layout)