+(defun maybe-call-type-init (type)
+ (when (and (stringp type) (null (gtype type)))
+ (let ((type-init-name (probable-type-init-name type)))
+ (when (foreign-symbol-pointer type-init-name)
+ (foreign-funcall-pointer (foreign-symbol-pointer type-init-name) () :int)))))
+
+(defun get-g-type-definition (type &optional lisp-name-package)
+ (maybe-call-type-init type)
+ (cond
+ ((g-type-is-a type (gtype +g-type-enum+)) (get-g-enum-definition type lisp-name-package))
+ ((g-type-is-a type (gtype +g-type-flags+)) (get-g-flags-definition type lisp-name-package))
+ ((g-type-is-a type (gtype +g-type-interface+)) (get-g-interface-definition type lisp-name-package))
+ ((g-type-is-a type (gtype +g-type-object+)) (get-g-class-definition type lisp-name-package))
+ (t (error "Do not know how to automatically generate type definition for ~A type ~A"
+ (gtype-name (g-type-fundamental type))
+ (or (ignore-errors (gtype-name (gtype type))) type)))))
+