[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Too many menus ?
- To: info-mcl@ministry.cambridge.apple.com
 
- Subject: Too many menus ?
 
- From: lind@ils.nwu.edu (Jeff Lind)
 
- Date: Wed, 09 Mar 1994 14:57:25 -0600
 
- Followup-to: comp.lang.lisp.mcl
 
- Newsgroups: comp.lang.lisp.mcl
 
- Organization: Institute for the Learning Sciences
 
In one of my programs I have noticed that when I have a large number of pop
up menus on the screen, some of the last ones created never appear, or,
when pulled-down, turn out to contain the menu items of another menu
entirely. I had thought that this was a low-memory problem, but increasing
heap size and total allocation haven't stopped the problem. Here's some
code that produces this behavior on a couple of machines here:
(in-package :cl-user)
(defparameter *num-menus* 7)
(defparameter *submenus-per-level* 6)
(defparameter *max-depth* 2)
(defvar *w*)
(defun build-submenus (root-num depth)
    (if (>= depth *max-depth*)
       (list (make-instance 'menu-item
                     :menu-item-title (format nil "root #~s, depth ~s"
root-num depth)
                     :menu-item-action #'(lambda () 
																		(message-dialog (format nil "root #~s,  depth ~s"
root-num depth)))))
         (let ((menus))
            (dotimes (j *submenus-per-level* menus)
                (format t "making submenus for root ~s,  menu ~s, depth
~s~%" root-num j depth)
                (push (make-instance 'menu 
                                 :menu-title (format nil "menu #~s" j)
                                 :menu-items (build-submenus root-num (1+
depth)))
                            menus)
                ))))
(setf *w* (make-instance 'window 
                       :view-size #@(150 250)
                       :window-title "menu test"))
(gc)
(room)
(dotimes (i *num-menus*)
    (add-subviews (find-window "menu test")
    (make-instance 'pop-up-menu 
          :menu-title (format nil "menu #~s" i)
          :menu-items (build-submenus i 0)
          :view-position (make-point 20 (* 25 i))
          :item-display i
          )))
(room)
Run this code and then take a look at the menus produced. On my machine,
the first four are OK, the fifth is mostly OK, except for some of the items
in menu #0, and the sixth is almost completely screwed up.
Inspecting the resulting objects makes them all seem to be valid. All the
menus are there and have non-zero mac handles.
Any ideas anyone?
--Jeff