- (register-object-type (gobject-class-g-type-name object) (class-name object))
- (at-init (initialize-gobject-class-g-type object)))
+ (when (gobject-class-direct-g-type-name object)
+ (register-object-type (gobject-class-direct-g-type-name object) (class-name object))
+ (at-init (object) (initialize-gobject-class-g-type object))))
+
+(defmethod finalize-inheritance :after ((class gobject-class))
+ (setf (gobject-class-g-type-name class)
+ (or (gobject-class-direct-g-type-name class)
+ (let ((gobject-superclass (iter (for superclass in (class-direct-superclasses class))
+ (finding superclass such-that (typep superclass 'gobject-class)))))
+ (assert gobject-superclass)
+ (gobject-class-g-type-name gobject-superclass)))))