(in-package :gobject) (define-boxed-variant-cstruct evt "evt" (type :int :initform 0) (time :uint :initform 0) (:variant type (0 evt-zero (x :double :initform 0.0d0) (y :double :initform 0.0d0)) ((1 2 3) evt-multi (t2 :int :initform 0) (:variant t2 (1 evt-single (item :uchar :initform 0)))))) (defcallback test-evt (g-boxed-foreign evt) ((time :int) (e1 (g-boxed-foreign evt))) (print time) (print e1) (when e1 (incf (evt-time e1) time)) (make-evt-multi :time time :t2 123)) (defun do-test-evt (e1 time) (let ((e2 (foreign-funcall-pointer (callback test-evt) () :int time (g-boxed-foreign evt) e1 (g-boxed-foreign evt)))) (values e1 e2)))