[8216] in Athena Bugs
rt 7.3M: mwm AND twm
daemon@ATHENA.MIT.EDU (Jonathan I. Kamens)
Mon Sep 16 12:21:52 1991
Date: Mon, 16 Sep 91 12:21:56 -0400
From: "Jonathan I. Kamens" <jik@pit-manager.MIT.EDU>
To: bugs@ATHENA.MIT.EDU
System name: pit-manager
Type and version: RTPC-ROMPC 7.3M
Display type: apa16
megapel
What were you trying to do?
Pop up a transient window with a specified geometry (i.e.
rubber-band not required) in a program, and then destroy the
window very shortly afterwards.
What's wrong:
The window manager gets notified that there is a window to
map, but before it can map it, the window is destroyed.
Rather than not doing anything at all, it puts up a
rubber-band cursor the size that the window would have been,
and when the user clicks, the rubber-band goes away, the
window is not there, and everything is back to normal.
Note that this bug has an element of heisenbug-ness in it --
it is not always duplicatable. It seems that the window
manager is taking long enough to swap in that the window still
exists when it starts the placement process, but it has been
destroyed by the time it gets to the point where it checks if
the position has been specified; rather than giving up when
that query fails, it keeps going even though it's using bogus
information.
Or, at least, that's the impression I have. I haven't looked
at any code.
What should have happened:
The window manager should notice that the window has been
destroyed before popping up the rubber band cursor, and forget
about it.
Please describe any relevant documentation references:
I've used the following program to get the bug to occur,
sporadically. It helps, I think, if the window manager is
swapped out when you run it.
jik
#include <X11/Intrinsic.h>
#include <X11/Xaw/Label.h>
main(intargc, argv)
int intargc;
char *argv[];
{
Widget top, label;
Cardinal argc = intargc;
top = XtInitialize("test", "Test", 0, 0, &argc, argv);
label = XtVaCreateManagedWidget("label", labelWidgetClass, top, 0);
XtRealizeWidget(top);
XFlush(XtDisplay(top));
XtDestroyWidget(top);
XtMainLoop();
}