Fix redraw problems when making a child of a child visible
Troy Rollo
wine at troy.rollo.name
Tue Jun 24 20:38:52 CDT 2003
We have some situations in which we have a child window that in turn has multiple children will have only one visible at a time. Each of those children has its own children. When hiding one of the second level children, then showing another, the newly displayed window and it's children are not redrawn.
I have not investigated whether a simpler case may also trigger the bug.
Index: dlls/x11drv/winpos.c
===================================================================
RCS file: /home/wine/wine/dlls/x11drv/winpos.c,v
retrieving revision 1.64
diff -u -r1.64 winpos.c
--- dlls/x11drv/winpos.c 18 Feb 2003 23:24:58 -0000 1.64
+++ dlls/x11drv/winpos.c 25 Jun 2003 01:18:37 -0000
@@ -353,7 +353,8 @@
win->rectClient.bottom - win->rectClient.top );
/* if the client rect didn't move we don't need to repaint it all */
- if (old_client_rect->left == win->rectClient.left &&
+ if (old_client_rect &&
+ old_client_rect->left == win->rectClient.left &&
old_client_rect->top == win->rectClient.top)
{
RECT rc;
@@ -886,6 +887,7 @@
RECT oldWindowRect, oldClientRect;
UINT wvrFlags = 0;
BOOL bChangePos;
+ BOOL bStartedVisible;
TRACE( "hwnd %p, swp (%i,%i)-(%i,%i) flags %08x\n",
winpos->hwnd, winpos->x, winpos->y,
@@ -904,6 +906,8 @@
if (!(wndPtr = WIN_FindWndPtr( winpos->hwnd ))) return FALSE;
+ bStartedVisible = (wndPtr->flags & WS_VISIBLE) != 0;
+
TRACE("\tcurrent (%ld,%ld)-(%ld,%ld), style %08x\n",
wndPtr->rectWindow.left, wndPtr->rectWindow.top,
wndPtr->rectWindow.right, wndPtr->rectWindow.bottom, (unsigned)wndPtr->dwStyle );
@@ -1015,7 +1019,7 @@
expose_covered_parent_area( wndPtr, &oldWindowRect );
if (wndPtr->dwStyle & WS_VISIBLE)
- expose_covered_window_area( wndPtr, &oldClientRect, winpos->flags & SWP_FRAMECHANGED );
+ expose_covered_window_area( wndPtr, bStartedVisible ? &oldClientRect : 0, winpos->flags & SWP_FRAMECHANGED );
WIN_ReleaseWndPtr(wndPtr);
More information about the wine-patches
mailing list