Update of /project/mcclim/cvsroot/mcclim In directory cl-net:/tmp/cvs-serv12406
Modified Files: panes.lisp Log Message: Guard against infinite recursion in fit-pane-to-output in the case that compose-space calls the display function to compute the size, and the display function calls us (and we call compose space..)
--- /project/mcclim/cvsroot/mcclim/panes.lisp 2008/11/30 22:22:29 1.193 +++ /project/mcclim/cvsroot/mcclim/panes.lisp 2008/12/19 08:58:14 1.194 @@ -27,7 +27,7 @@ ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307 USA.
-;;; $Id: panes.lisp,v 1.193 2008/11/30 22:22:29 ahefner Exp $ +;;; $Id: panes.lisp,v 1.194 2008/12/19 08:58:14 ahefner Exp $
(in-package :clim-internals)
@@ -2552,7 +2552,7 @@ (flet ((compute (val default) (if (eq val :compute) default val))) (if (or (eq (pane-user-width pane) :compute) - (eq (pane-user-height pane) :compute)) + (eq (pane-user-height pane) :compute)) (progn (with-output-recording-options (pane :record t :draw nil) ;; multiple-value-letf anyone? @@ -2973,7 +2973,12 @@ (:method (pane) (declare (ignore pane))))
(defmethod fit-pane-to-output ((stream clim-stream-pane)) - (when (sheet-mirror stream) + ;;; Guard against infinite recursion of size is set to :compute, as this + ;;; could get called from the display function. We'll call compose-space + ;;; here, which will invoke the display function again.. + (when (and (sheet-mirror stream) + (not (or (eq (pane-user-width stream) :compute) + (eq (pane-user-height stream) :compute)))) (let* ((output (stream-output-history stream)) (fit-width (bounding-rectangle-max-x output)) (fit-height (bounding-rectangle-max-y output)))