A window size/move fix
Duane Clark
dclark at akamail.com
Mon Feb 10 18:35:29 CST 2003
This patch fixes bugs 1265 and 1266. It is a separate bug from that
addressed by the "Window resizing" patch from a few days ago.
A fair amount of detail about the problem can be found on the bug:
http://bugs.winehq.com/show_bug.cgi?id=1265
It basically comes down to this. The app calls MoveWindow immediately
followed by a SetWindowPos that only resizes the window. This causes two
X ConfigureNotify events to occur. The first ConfigureNotify notices
that the current window size is not the same as the size in the event
structure, and resizes the window back to the where it was! The second
ConfigureNotify notices that new current size is not the size in the
event structure, and resizes the window again to the correct size. But
in the process of doing this, corruption of the contents can occur. Not
to mention all the extra code executed.
The fix is simply, if we are about to resize or move the window, first
check for and handle any pending ConfigureNotify events.
Changelog:
Before changing window size/pos, handle pending ConfigureNotify events.
-------------- next part --------------
Index: dlls/x11drv/winpos.c
===================================================================
RCS file: /home/wine/wine/dlls/x11drv/winpos.c,v
retrieving revision 1.63
diff -u -r1.63 winpos.c
--- dlls/x11drv/winpos.c 8 Jan 2003 21:09:26 -0000 1.63
+++ dlls/x11drv/winpos.c 10 Feb 2003 22:33:20 -0000
@@ -887,6 +887,9 @@
UINT wvrFlags = 0;
BOOL bChangePos;
+ /* This is needed to flush pending X ConfigureNotify events on this window */
+ MsgWaitForMultipleObjectsEx( 0, NULL, 0, 0, 0 );
+
TRACE( "hwnd %p, swp (%i,%i)-(%i,%i) flags %08x\n",
winpos->hwnd, winpos->x, winpos->y,
winpos->x + winpos->cx, winpos->y + winpos->cy, winpos->flags);
More information about the wine-patches
mailing list