+
+(defbinding container-propagate-expose () nil
+ (container container)
+ (child widget)
+ (event gdk:expose-event))
+
+
+(defbinding %container-get-focus-chain () boolean
+ (container container)
+ (focusable-widgets (glist widget) :out))
+
+(defun container-focus-chain (container)
+ (multiple-value-bind (chain-set-p focusable-widgets)
+ (%container-get-focus-chain container)
+ (and chain-set-p focusable-widgets)))
+
+(defbinding %container-set-focus-chain () nil
+ (container container)
+ (focusable-widgets (glist widget)))
+
+(defbinding %container-unset-focus-chain () nil
+ (container container))
+
+(defun (setf container-focus-chain) (focusable-widgets container)
+ (if (null focusable-widgets)
+ (%container-unset-focus-chain container)
+ (%container-set-focus-chain container focusable-widgets)))
+
+(defgeneric container-show-recursive (container))
+
+(defmethod container-show-recursive ((container container))
+ "Recursively shows any child widgets except widgets explicit hidden during construction."
+ (labels ((recursive-show (widget)
+ (when (typep widget 'container)
+ (if (not (user-data-p widget 'show-recursive-p))
+ (container-foreach widget #'recursive-show)
+ (unset-user-data widget 'show-recursive-p)))
+ (unless (widget-hidden-p widget)
+ (widget-show widget))))
+ (container-foreach container #'recursive-show)))