-(defmethod shared-initialize ((widget widget) names &rest initargs &key parent)
- (remf initargs :parent)
- (prog1
- (apply #'call-next-method widget names initargs)
- (when parent
- (when (slot-boundp widget 'parent)
- (container-remove (widget-parent widget) widget))
- (let ((parent-widget (first (mklist parent)))
- (args (rest (mklist parent))))
- (apply #'container-add parent-widget widget args)))))
-
-(defmethod shared-initialize :after ((widget widget) names &rest initargs
- &key show-all all-visible)
- (declare (ignore initargs names))
- (when (or all-visible show-all)
- (widget-show-all widget)))
-
-
-(defmethod slot-unbound ((class gobject-class) (object widget) slot)
+#-debug-ref-counting
+(defmethod print-object ((widget widget) stream)
+ (if (and
+ (proxy-valid-p widget)
+ (slot-boundp widget 'name) (not (zerop (length (widget-name widget)))))
+ (print-unreadable-object (widget stream :type t :identity nil)
+ (format stream "~S at 0x~X"
+ (widget-name widget) (sap-int (foreign-location widget))))
+ (call-next-method)))
+
+(defmethod shared-initialize ((widget widget) names &key (visible nil visible-p))
+ (when (and visible-p (not visible)) ; widget explicit set as not visible
+ (setf (user-data widget 'hidden-p) t)
+ (signal-connect widget 'show
+ #'(lambda ()
+ (unset-user-data widget 'hidden-p))
+ :remove t))
+ (call-next-method))
+
+(defmethod shared-initialize :after ((widget widget) names &key parent visible)
+ (declare (ignore names))
+ (when visible
+ (widget-show widget))
+ (when parent
+ (when (slot-boundp widget 'parent)
+ (container-remove (widget-parent widget) widget))
+ (destructuring-bind (parent &rest args) (mklist parent)
+ (apply #'container-add parent widget args))))
+
+(defmethod slot-unbound ((class gobject-class) (object widget)
+ (slot (eql 'child-properties)))