rws@EXPO.LCS.MIT.EDU (Bob Scheifler) (01/12/90)
Unfortunately we have to release a product soon that relies on a
conformant window manager, so I will probably have to try fixing
it myself.
The ICCCM does not require a window manager to put windows where you
ask them to be put. If you have a product that demands this from a
window manager, you deserve whatever problems you encounter. [This
doesn't mean twm isn't buggy, of course.]jdi@Franz.COM (John Irwin) (01/12/90)
Here is a bug report I sent to xbugs. I thought I'd post it here also so
noone else has to figure out why the heck windows aren't where they're
supposed to be.
I was told that this is a known bug and will be fixed eventually.
Unfortunately we have to release a product soon that relies on a
conformant window manager, so I will probably have to try fixing
it myself. If anyone else is working on this, I'd appreciate a note.
Thanks.
-- John Irwin
--
X Window System Bug Report
xbugs@expo.lcs.mit.edu
VERSION:
R4
CLIENT MACHINE and OPERATING SYSTEM:
Sun 4/260 OS4.0.3, but it's not important
DISPLAY TYPE:
Sun BW2, but it's not important
WINDOW MANAGER:
twm
AREA:
twm
SYNOPSIS:
Twm's handling of ConfigureWindow requests is both incorrect and
not ICCCM compliant.
DESCRIPTION:
I create a window at 1000,1000 that has a win_gravity hint of Center.
The window has a width and height of 100 and a border width of 0.
I then map the window. Twm correctly places the top left corner of
MY window (hereafter called mywindow) at 1000,1000, which it does by
locating the frame window to account for the frame's title and border.
(I use three pixel twm borders, but that shouldn't matter)
All is fine at this point.
Now I issue a ConfigureWindow request asking for the window to be moved
to 1005, 1010. (I also ask for a border-width of 0 as section 4.1.5
of the ICCCM specifies)
Section 4.1.5 of the ICCCM says this about configuring the window:
"Client configure requests areinterpreted by the window manager
in the same manner as the initial window geometry mapped from
Withdrawn state, as described in Section 4.1.2.3.)"
Since my win_gravity hint is still Center, I would expect mywindow to be
moved to 1005, 1010. (Accordingly the frame would be at 1002, 1007,
assuming the window has no title) This is not what happens.
Instead, twm moves mywindow to 1008, 1013. IE: twm moves the *FRAME* to
1005, 1010. Now, you could argue that this is still ICCCM compliant, since
the client isn't guaranteed to get what he wants. But it does violate the
above quoted paragraph.
Also, twm sends a synthetic ConfigureNotify event to the client describing
the new state of mywindow, as it should. But it lies about where mywindow
is. The event says that mywindow is now at 1005, 1010. Surely section
4.1.5 specifies that the ConfigureNotify the client receives applies to
the client window and not the frame window?
REPEAT BY:
Described above.
SAMPLE FIX:
I've looked at the code a while, but it's pretty messy. Specifically
AddWindow and HandleConfigureRequest do not share any code, and indeed do
not look much alike, as they should since they both do (what's supposed
to be the same) placement.jdi@sparky.Franz.COM (John Irwin) (01/16/90)
In article <9001112222.AA06723@expire.lcs.mit.edu> rws@EXPO.LCS.MIT.EDU (Bob Scheifler) writes: > > Unfortunately we have to release a product soon that relies on a > conformant window manager, so I will probably have to try fixing > it myself. > >The ICCCM does not require a window manager to put windows where you >ask them to be put. If you have a product that demands this from a >window manager, you deserve whatever problems you encounter. [This >doesn't mean twm isn't buggy, of course.] The problem isn't that twm puts windows in the wrong place; the fact that it does so is, by itself, not cause for labelling twm non-compliant. (Although my reading of section 4.1.5 suggests that the current behaviour is "not very compliant.") The problem is that twm tells the client that it put the window in the *right* place. An excerpt from my bug report: ... Instead, twm moves mywindow to 1008, 1013. IE: twm moves the *FRAME* to 1005, 1010. Now, you could argue that this is still ICCCM compliant, since the client isn't guaranteed to get what he wants. But it does violate the above quoted paragraph. Also, twm sends a synthetic ConfigureNotify event to the client describing the new state of mywindow, as it should. But it lies about where mywindow is. The event says that mywindow is now at 1005, 1010. Surely section 4.1.5 specifies that the ConfigureNotify the client receives applies to the client window and not the frame window? ... IE: it would be ok (but not optimal) if twm put the window in the wrong place and then told me that was where it put it. Instead twm says it put the window one place while actually putting it somewhere else, which messes up my client's cached window state. -- John Irwin Franz Inc.