[comp.sys.atari.st] AES bug

XBR4D76H@DDATHD21.BITNET (08/05/87)

I discovered a strange bug in the AES window manager which can be triggered
by following procedure:
 1. start a GEM application which opens a window
 2. activate an accessory which opens another window
    (i.e. Control Panel, Calculator, etc.)
 3. exit GEM application without closing the accessory window

Now repeat (1) and (2) and watch what happens to the windows if you move
one of them.
The effects vary from mispositioned window border elements to missing
redraws of the work areas.
Once triggered the bug seems to stay resident until reboot.

The ST is like a sort of "magic hat":
You'll never know what bug is going to jump out next.

  Konrad A. Hahn
  BITNET: XBR4D76H@DDATHD21

rowley@AMES-NAS.ARPA (Karl Rowley) (08/05/87)

In article <8708050514.AA11588@ucbvax.Berkeley.EDU> XBR4D76H@DDATHD21 (Konrad
Hahn) writes:
>I discovered a strange bug in the AES window manager which can be triggered
>by following procedure:
...
>The effects vary from mispositioned window border elements to missing
>redraws of the work areas.

I have only noticed this problem when GEM applications are started from 
the Mark Williams msh.  It doesn't seem to happen when the applications are
started with the GEM desktop.  The desktop must be doing something to 
"clean up" between the running of applications.  

Does anyone know how to avoid these "ghost windows"?  


	Karl Rowley
	rowley@ames-nas.arpa

burris@ihuxz.ATT.COM (Burris) (08/06/87)

In article <8708051539.AA09963@ames-nas.arpa>, rowley@AMES-NAS.ARPA.UUCP writes:
> I have only noticed this problem when GEM applications are started from 
> the Mark Williams msh.  It doesn't seem to happen when the applications are
> started with the GEM desktop.  The desktop must be doing something to 
> "clean up" between the running of applications.  
> 
> Does anyone know how to avoid these "ghost windows"?  
> 
> 

Do you know if the applications you are running are using the wind_update()
routine before doing any drawing inside a window?

I had a problem similar to this while working on a MIDI application. The
problem was caused when a window was either sized or moved. When either of
these occur message is sent to the application to redraw the window. Before
the redraw operation the wind_update( BEG_UPDATE ) call should be performed
to freeze the screens update rectangle list.

I don't have the code in front of me but I think the sequence is something
like:

1. Window is sized or moved.
2. Application recieves size or move message.
3. Application issues a size or move command.
4. AES determines if any of the window contents for any visible windows need
   to be redrawn.
5. The application recieves a window redraw message.
6. The application calls wind_update( BEG_UPDATE ) to freeze the screens
   rectangle list.
7. The application steps through the rectangle list redrawing each rectangle
   until there are no more on the list.
8. The application calls wind_update( END_UPDATE ) to allow updates to the
   list.

If the above sequence is used, the only quirks I have seen using Mark Williams'
shell is that the AES thinks the desktop behind the windows is the color of the
desktop before executing msh. This means that as windows are sized, moved, or
closed the background could be a different color (and probably is).

For instance, in medium resolution mode I have the colors black, white, red,
and green. The desktop is green. When I execute msh I have a black background
with white letters. When I execute a multiple window application and close one
of the windows the background that was behind the window is green and the rest 
of the screen is black.

This could probably be fixed easily but I haven't spent a lot of time on it
since my application is more important.

Dave Burris
ihnp4!ihuxz!burris

rowley@ORVILLE.ARPA (Karl Rowley) (08/06/87)

In article <2233@ihuxz.ATT.COM>  burris@ihuxz.ATT.COM (Burris) writes:
>
>Do you know if the applications you are running are using the wind_update()
>routine before doing any drawing inside a window?

Yes, I have seen this problem when the application and desk accessories running
(which I had written) were all using wind_update correctly.  The problem I was
referring to is not that windows get trashed when they are updated.  The 
problem is with windows that the screen manager thinks still exist, but should
not exist.

If you have the Mark Williams C package, you can recreate the problem as
follows:
1) Run the msh shell.
2) From msh start GEM kermit (or another GEM program that lets you use desk
	accessories).
3) Open the Control Panel from inside of kermit.
4) Exit kermit without closing the Control Panel.
5) Run kermit again from msh.
6) Open the Control Panel again.  Move it all around the screen.  Notice how
	the screen manager still thinks there is a second window titled
	"Control Panel"?  The second window is never redrawn, but fills up
	with garbage as the other window is moved around over it.  If steps
	4, 5, and 6 are repeated again a number of times, there will eventually
	be no window handles left and the Control Panel will not open when
	selected.
7) Go back to the desktop.  Repeat steps 3-6 running kermit from the desktop.
	Everything looks fine.

My conclusion: the GEM desktop is doing something to close/clean up desk
accessories/windows between running applications.  The msh shell must not.

Does anyone know how the desktop does this?

	Karl Rowley
	rowley@ames-nas.arpa

hakanson@orstcs.cs.ORST.EDU (08/09/87)

<yum!>

Regarding AES bugs, using GEM applications under the MWC shell, etc.,
I just happened across the following information in the release notes
of MWC 2.0.  It mentions that some applications depend on the desktop
to clean up after them instead of doing it themselves.  They go on to
say that these programs may crash upon exiting back to the shell.
Also, they mention that 1st Word, Atari BASIC, and Atari Logo are such
programs.

Marion Hakanson         CSnet:  hakanson%oregon-state@relay.cs.net
                        UUCP :  {hp-pcd,tektronix}!orstcs!hakanson