In clasp, there are several calls like (redisplay-frame-pane clasp-frame 'notebook), where 'notebook is the name of a pane. This always gets an error about no method for pane-needs-redisplay with arg (notebook).
If I change the call to be (redisplay-frame-pane clasp-frame (find-pane-named clasp-frame 'notebook)), everything works.
Assuming that redisplay-frame-pane should convert the pane name to a pane object within the function, here is a possible replacement. I don't really know enough about mcclim to know if this is sensible or not, but it works for clasp.
Ray
Index: frames.lisp =================================================================== RCS file: /project/mcclim/cvsroot/mcclim/frames.lisp,v retrieving revision 1.120 diff -u -r1.120 frames.lisp --- frames.lisp 1 Jul 2006 21:00:31 -0000 1.120 +++ frames.lisp 16 Dec 2006 14:52:38 -0000 @@ -368,22 +368,25 @@
(defmethod redisplay-frame-pane :around ((frame application-frame) pane &key force-p) - (multiple-value-bind (redisplayp clearp) - (pane-needs-redisplay pane) - (when force-p - (setq redisplayp (or redisplayp t) - clearp t)) - (when redisplayp - (let ((hilited (frame-hilited-presentation frame))) - (when hilited - (highlight-presentation-1 (car hilited) (cdr hilited) :unhighlight) - (setf (frame-hilited-presentation frame) nil))) - (with-possible-double-buffering (frame pane) - (when clearp - (window-clear pane)) - (call-next-method)) - (unless (or (eq redisplayp :command-loop) (eq redisplayp :no-clear)) - (setf (pane-needs-redisplay pane) nil))))) + (let ((pane-object (if (typep pane 'pane) + pane + (find-pane-named frame pane)))) + (multiple-value-bind (redisplayp clearp) + (pane-needs-redisplay pane-object) + (when force-p + (setq redisplayp (or redisplayp t) + clearp t)) + (when redisplayp + (let ((hilited (frame-hilited-presentation frame))) + (when hilited + (highlight-presentation-1 (car hilited) (cdr hilited) :unhighlight) + (setf (frame-hilited-presentation frame) nil))) + (with-possible-double-buffering (frame pane-object) + (when clearp + (window-clear pane-object)) + (call-next-method)) + (unless (or (eq redisplayp :command-loop) (eq redisplayp :no-clear)) + (setf (pane-needs-redisplay pane-object) nil))))))
(defmethod run-frame-top-level ((frame application-frame) &key &allow-other-keys)
Raymond Toy toy.raymond@gmail.com writes:
Assuming that redisplay-frame-pane should convert the pane name to a pane object within the function, here is a possible replacement. I don't really know enough about mcclim to know if this is sensible or not, but it works for clasp.
From the 2.0 spec on `redisplay-frame-pane':
"Causes the pane pane within the frame frame to be redisplayed immediately. pane is either a pane or the name of a named pane."
So this fix looks kosher. Do you have McCLIM commit rights? If not, I'll test and commit this as soon as I can.
Troels Henriksen wrote:
Raymond Toy toy.raymond@gmail.com writes:
Assuming that redisplay-frame-pane should convert the pane name to a pane object within the function, here is a possible replacement. I don't really know enough about mcclim to know if this is sensible or not, but it works for clasp.
From the 2.0 spec on `redisplay-frame-pane':
"Causes the pane pane within the frame frame to be redisplayed immediately. pane is either a pane or the name of a named pane."
So this fix looks kosher. Do you have McCLIM commit rights? If not, I'll test and commit this as soon as I can.
I don't have commit rights and would rather keep it that way. :-)
Thanks for testing and committing. No rush, though. (And thanks for your help on #lisp as well!)
Ray