(defmethod resize-sheet :after ((pane example-pane) width height)
(window-clear pane)
(redisplay-frame-pane (pane-frame pane) pane))
Apparently no developer has tried this as there are two time bombs
waiting to blow up the call stack.
WINDOW-CLEAR, besides writing +background-ink+ over the pane, goes on to
set width and height of the sheet to zero and then call
CHANGE-SPACE-REQUIREMENTS, which calls RESIZE-SHEET --> BOOM!
REDISPLAY-FRAME-PANE is implemented using RESTART-CASE, which in my 35
years with CL I have never had the occasion to use. Its restartable-form
manages to call itself via CALL-NEXT-METHOD (I think) which then blows
the stack, which then unwinds back through various restart clauses (some
which also call WINDOW-CLEAR), finally resulting in getting back to a
listener prompt where one can bail out.
For my use, I have re-written those two methods in a way that works for
the several places where I use resize-sheet :after with good results.
The attachment is one of the test cases I used to diagnose the stack
blowup. It displays a green filled circle in the center of the pane.
Drag a side or corner of the frame around with your pointer device to
cause the resize events to occur.
With those two changes my 15 year old CLIM2 plotting applications works
quite well although there is still a few places where pointer motion or
dragging yield strange results.
One other thing, if frame startup manages to silently load the NULL
port, it may take a very long time to figure out why the lisp listener
is dead. 🙁
Wishing you all a great new year!
Paul