CLIM mail archive
The learning curve is a bit steeper now...
Date: Wed, 23 Oct 1991 16:06 EDT
Hi folks. I need some insight. The simplest way to ask my
question is: how does one implement overlapping panes?
I want to be able to have scrolling lists of items (ala Mac)
in the middle of a pane of my application frame.
At the moment I am using open-window-stream and almost
get what I want but I'm having trouble customizing
frame-find-innermost-applicable-presentation to pick up
the items in the newly created window stream. If I could
define the window-stream as a pane then I imagine the built-in
stuff would take over and work properly.
What platform are you using? Why do you need to customize
FRAME-FIND-INNERMOST-APPLICABLE-PRESENTATION? What parent are you
specifying to OPEN-WINDOW-STREAM?
Second question: I've got a primitive top-level function
that handles multiple application frames and switches between
them fairly well (it requires a small amount of machine-dependent
hackery). In order to do this I have to define my own top-level
function for the application frames and invoke it without
going through run-frame-top-level (I need to be able to
signal when I activate a new application frame and the signal
throws out of the handler set up by run-frame-top-level).
The question is what exactly is run-frame-top-level doing
(code would be nice) so that I can make it do what I want?
RUN-FRAME-TOP-LEVEL is intended to be specialized by frames that require
new behavior. You should not modify the :AROUND method.
(defmethod run-frame-top-level :around ((frame application-frame))
(with-simple-restart (frame-exit "Exit ~A" (frame-pretty-name frame))
(with-slots (top-level-window) frame
(let ((*frame-layout-changing-p* *frame-layout-changing-p*)
;; Reset the state of the input editor and the presentation
;; type system, etc., in case there is an entry into another
;; application from inside the input editor, such as a Debugger
;; written using CLIM.
;;--- This should be done in a more modular way
;;--- If you change this, change MENU-CHOOSE-FROM-DRAWER
(with-simple-restart (nil "~A top level" (frame-pretty-name frame))
(let ((*application-frame* frame)
;; We must return the values from CALL-NEXT-METHOD,
;; or else ACCEPTING-VALUES will return NIL
(return-from run-frame-top-level (call-next-method))))))))
(setf (window-visibility top-level-window) nil))))))
(defmethod run-frame-top-level ((frame application-frame))
(let* ((descriptor (find-frame-descriptor frame))
(top-level (frame-descriptor-top-level descriptor)))
(apply (first top-level) frame (rest top-level))))
Main Index |