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);