Path: utzoo!utgpu!news-server.csri.toronto.edu!bonnie.concordia.ca!ccu.umanitoba.ca!herald.usask.ca!alberta!brazeau.ucs.ualberta.ca!unixg.ubc.ca!ubc-cs!van-bc!zaphod.mps.ohio-state.edu!mips!pacbell.com!tandem!tandem.com!goodill_eric From: goodill_eric@tandem.com (Eric Goodill) Newsgroups: comp.sys.mac.programmer Subject: Summary and new question: lists in modal dialogs Message-ID: <1991Jun28.183556.5127@tandem.com> Date: 28 Jun 91 18:35:56 GMT Sender: news@tandem.com Organization: Tandem Computers Lines: 47 Nntp-Posting-Host: suntan.tandem.com Hi, My original question was how do user items get redrawn when the dialog manager redraws the rest of a modal dialog. There are two general answers. 1: Install a drawing procedure for the user item. The handle that you pass with setDItem for a user item is in fact a pointer to a drawing routine. IM-1 touches on this briefly, but tech note 34 goes into some detail. The dialog manager calls your routine when it redraws the other parts of the dialog. 2: Use a modal dialog filter proc and handle the update events. If you've got a user item that responds to mouse clicks (such as a list), then you almost for sure have a filter proc. This proc gets all events that the dialog window gets before the dialog manager applies its standard filter proc. Since the dialog is a window, it gets activate and update events. You can respond to the update event by drawing your user item. BTW, user items seem to be a good way to draw the default button ring around the OK button. So much for the summary. I've gotten the code working, but in so doing a few new questions popped up. My user item is a list using Apple's list manager. I noted the following peculiar behavior. If I didn't do a call to getDItem on the list user item, then when I called lUpdate in my filter proc (during an update event and passing dialogPtr^.visRgn), nothing got drawn. I did not have to make a call to setDItem. The getDItem is done even before the showWindow after reading the dialog in. It used to be used when I had a list item drawing routine instead of responding to update events. When I switched from a drawing proc to update events, I had left the drawing proc code in but just commented out the body of the proc. All was well. Then, convinced the new scheme worked, I removed the getDItem, setDItem pair and the drawing proc. Then updates stopped working. The list was just blank always. I put the getDItem, setDItem pair back in and the drawing proc. Then I removed the setDItem. Updates worked again. I then removed the drawing proc (cuz it's not getting called) and it still worked. I removed the getDItem, and updates stopped working. So I'm puzzled. Use Macsbug, I know I was getting the correct activate and update events. The update regions for the dialog window were not empty. There were a simple box enclosing the whole window. I'm using THINK Pascal 3.0. IIci. 6.0.5. Any ideas? Eric Goodill, goodill_eric@tandem.com, Cupertino, California "Sucks Syntax" -- John Haskey