[comp.sys.mac.programmer] jGNEFilter, MultiFinder, and update events

fry@math.harvard.edu (David Fry) (03/24/91)

I'm trying to rig the jGNEFilter so I can have my own windows working 
in SuperCard along with SuperCard itself, just like HyperCard 2.0.  
One problem I've noticed is that the jGNEFilter is not receiving 
update events for my windows when SuperCard is not the foreground 
application.  The result is you can drag a Finder window (for 
instance) over top one of my windows and my window doesn't redraw 
itself.  Yes, the jGNEFilter is still being called, but not with any 
update events.

For the gurus:  does anyone know off hand if this is a standard 
MultiFinder thing, or is SuperCard playing with my windows 
unknowingly when it is switched out by MF?  I can force a redraw when 
SuperCard returns, but it's sort of sloppy.

Thanks in advance

David Fry                               fry@math.harvard.EDU
Department of Mathematics               fry@huma1.bitnet
Harvard University                      ...!harvard!huma1!fry
Cambridge, MA  02138            

mandel@vax.anes.tulane.edu (Jeff E Mandel MD MS) (03/25/91)

In article <6121@husc6.harvard.edu>, fry@math.harvard.edu (David Fry) writes:
>
>I'm trying to rig the jGNEFilter so I can have my own windows working 
>in SuperCard along with SuperCard itself, just like HyperCard 2.0.  
>One problem I've noticed is that the jGNEFilter is not receiving 
>update events for my windows when SuperCard is not the foreground 
>application.  The result is you can drag a Finder window (for 
>instance) over top one of my windows and my window doesn't redraw 
>itself.  Yes, the jGNEFilter is still being called, but not with any 
>update events.
>
>For the gurus:  does anyone know off hand if this is a standard 
>MultiFinder thing, or is SuperCard playing with my windows 
>unknowingly when it is switched out by MF?  I can force a redraw when 
>SuperCard returns, but it's sort of sloppy.
>
I'm not sure I'm a guru; generally, when I hit the ceiling it's on a ballistic
trajectory rather than by slow levitation, but here goes...

As I recall (I don't have all my manuals at home), Multifinder has two levels
of context switch; major and minor. Major is used for a full context switch,
i.e. you moused in an inactive application's window and it is being brought to
the foreground, where as minor is for update and activate events. Now this is
where my memory gets hazy, but it seems to me that minor switches do not result
in all the low memory globals being copied back in from where they are stored
when you get switched out. Since your GNEFilter runs only by virtue of being
present in the low memory global, the value simply isn't there when you get the
update event and SuperCard is in the background. Sigh, Extreme disheartenment
(OK, I've been watching Mork and Mindy on Nickleodeon. I only do it to make my
two year old happy ;-) ). Is there a workaround? Nothing that you can do from
within SuperCard (unless you know the format of the Multifinder store for low
memory globals and want to go and patch each application's jGNEFilter).
Basically, it takes an INIT which loads your GNEFilter into the system heap and 
either patches the GetNextEvent/WaitNextEvent traps or installs the jGNEFilter
pointer early, before Multifinder develops illusions about what the contents of
low memory should be. Bummer. I wouldn't even look at it unless I had two weeks
to burn. Of course I could be totally wrong about this, but, then, who hasn't?


Jeff E Mandel MD MS
Asst. Professor of Anesthesiology
Tulane University School of Medicine
New Orleans, LA
mandel@vax.anes.tulane.edu