Aha, found it. In HandleConfigureRequest(), which is called if a client wants to move its window, you have
/* If old_bw is zero, the application has asked not to have any border,
so we indeed do not draw any border. Maybe it would be better to set
frame_bw and frame_bw3D to 0 in this case, but I don't know where
this is handled. --Stef */
if ((cre->value_mask & CWX)/* && Tmp_win->old_bw*/) { /* override
even if border change */
x = cre->x - bw;
x -= ((gravx < 0) ? 0 : Tmp_win->frame_bw3D);
}
if ((cre->value_mask & CWY) /*&& Tmp_win->old_bw*/) {
y = cre->y - ((gravy < 0) ? 0 : Tmp_win->title_height) - bw;
y -= ((gravy < 0) ? 0 : Tmp_win->frame_bw3D);
}
I commented out the /* && Tmp_win->old_bw*/ which you added compared to
the trunk version.
What's happening here is that there is a borderless window with
Tmp_win->old_bw == 0. Above, x and y have been set from the window's
current values. Here, they are to be set to the requested new values.
But the extra condition prevents that.
I'm not 100% sure what you try to do. bw has been set to the requested
new border width, or the existing one. So I think it's fine.
I'm less sure about Tmp_win->frame_bw3D though. Normally only one of the
widths can be non-zero. I'm not sure if we keep that invariant if we
update bw.
-Olaf.
--
___ Olaf 'Rhialto' Seibert -- The Doctor: No, 'eureka' is Greek for
\X/ rhialto/at/xs4all.nl -- 'this bath is too hot.'
pgpS72MexkSC9.pgp
Description: PGP signature
