(define-g-enum "GdkGrabStatus" grab-status () :success :already-grabbed :invalid-time :not-viewable :frozen)
+(defcenum crossing-mode :normal :grab :ungrab :gtk-grab :gtk-ungrab :state-changed)
+(export 'crossing-mode)
+
+(defcenum notify-type (:ancestor 0) :virtual :inferior :nonlinear :nonlinear-virtual :unknown)
+(export 'notify-type)
+
(define-g-object-class "GdkDisplay" display () ())
(define-g-object-class "GdkDisplayManager" display-manager ()
(width :int :initform 0)
(height :int :initform 0))
+(export (boxed-related-symbols 'rectangle))
+
(define-g-boxed-cstruct font "GdkFont"
(type font-type :initform :font)
(ascent :int :initform 0)
(descent :int :initform 0))
+(export (boxed-related-symbols 'font))
+
(define-g-boxed-cstruct color "GdkColor"
(pixel :uint32 :initform 0)
(red :uint16 :initform 0)
(green :uint16 :initform 0)
(blue :uint16 :initform 0))
+(export (boxed-related-symbols 'color))
+
(define-g-boxed-cstruct geometry "GdkGeometry"
(min-width :int :initform 0)
(min-height :int :initform 0)
(max-aspect :double :initform 0.0d0)
(gravity gravity :initform :north-west))
+(export (boxed-related-symbols 'geometry))
+
(defctype gdk-atom :pointer)
(define-foreign-type gdk-atom-as-string-type ()
;;;FIXME: Check correct type
(defctype native-window :uint32)
-(defcunion event-client-data-union
- (b :char :count 20)
- (s :short :count 10)
- (l :long :count 5))
+(define-foreign-type fixed-array ()
+ ((element-type :reader fixed-array-element-type :initarg :element-type :initform (error "Element type must be specified"))
+ (array-size :reader fixed-array-array-size :initarg :array-size :initform (error "Array size must be specified")))
+ (:actual-type :pointer)
+ (:documentation
+ "CFFI foreign type for an array of a fixed length. Slot @code{element-type}@see-slot{fixed-array-element-type} specifies the type of elements and slot @code{array-size}@see-slot{fixed-array-array-size} specifies the size of array (in elements)."))
+
+(define-parse-method fixed-array (element-type array-size)
+ (make-instance 'fixed-array :element-type element-type :array-size array-size))
+
+(defmethod translate-from-foreign (ptr (type fixed-array))
+ (when (not (null-pointer-p ptr))
+ (let ((result (make-array (fixed-array-array-size type)))
+ (el-type (fixed-array-element-type type)))
+ (loop
+ for i from 0 below (fixed-array-array-size type)
+ do (setf (aref result i) (mem-aref ptr el-type i)))
+ result)))
(define-g-boxed-variant-cstruct event "GdkEvent"
(type event-type)
(hardware-keycode :uint16)
(group :uint8)
(is-modifier :uint))
- ((:button-prees
+ ((:button-press
:2button-press
:3button-press
:button-release) event-button
(y :double)
(axes (fixed-array :double 2))
(state modifier-type)
- (is-hint :int)
+ (is-hint :int16)
(device (g-object device))
(x-root :double)
(y-root :double))
(x :double)
(y :double)
(x-root :double)
- (y-root :double))
+ (y-root :double)
+ (mode crossing-mode)
+ (detail notify-type)
+ (focus :boolean)
+ (state :uint))
((:focus-change) event-focus
(in :int16))
((:configure) event-configure
:drag-motion
:drag-status
:drop-start
- :drop-finished) event-drag
+ :drop-finished) event-dnd
(drag-context :pointer)
(time :uint32)
(x-root :short)
(implicit :boolean)
(grab-window (g-object gdk-window)))))
+(export (boxed-related-symbols 'event))
+
(define-g-object-class "GdkDragContext" drag-context () ())
(define-g-flags "GdkWindowHints" window-hints ()