Rein Klazes rklazes@xs4all.nl writes:
I was too early, another problem popped up caused by this patch. Un-maximized MDI child windows don't paint their non client area anymore (I tried two MDI applications, both had it).
How about this one?
Index: dlls/x11drv/winpos.c =================================================================== RCS file: /opt/cvs-commit/wine/dlls/x11drv/winpos.c,v retrieving revision 1.98 diff -u -p -r1.98 winpos.c --- dlls/x11drv/winpos.c 24 Aug 2004 18:49:34 -0000 1.98 +++ dlls/x11drv/winpos.c 1 Sep 2004 16:49:03 -0000 @@ -416,21 +416,36 @@ BOOL X11DRV_GetDC( HWND hwnd, HDC hdc, H
if (top != hwnd) { - escape.drawable_org.x = escape.drawable_org.y = 0; - if (flags & (DCX_WINDOW|DCX_PARENTCLIP)) + /* find the top most parent that doesn't clip siblings */ + HWND clipping_parent = 0; + HWND *list = WIN_ListParents( hwnd ); + if (list) { - escape.org.x = win->rectWindow.left - win->rectClient.left; - escape.org.y = win->rectWindow.top - win->rectClient.top; - MapWindowPoints( hwnd, top, &escape.org, 1 ); - MapWindowPoints( top, 0, &escape.drawable_org, 1 ); - escape.drawable = X11DRV_get_client_window( top ); + int i; + for (i = 0; list[i] != top; i++) + { + LONG style = GetWindowLongW( list[i], GWL_STYLE ); + if (!(style & WS_CLIPSIBLINGS)) clipping_parent = list[i]; + } + HeapFree( GetProcessHeap(), 0, list ); } + if (clipping_parent) + clipping_parent = GetAncestor( clipping_parent, GA_PARENT ); + else if (!(flags & DCX_CLIPSIBLINGS) || (flags & DCX_WINDOW)) + clipping_parent = GetAncestor( hwnd, GA_PARENT ); else + clipping_parent = hwnd; + + escape.org.x = escape.org.y = 0; + escape.drawable_org.x = escape.drawable_org.y = 0; + if (flags & DCX_WINDOW) { - escape.org.x = escape.org.y = 0; - MapWindowPoints( hwnd, 0, &escape.drawable_org, 1 ); - escape.drawable = X11DRV_get_client_window( hwnd ); + escape.org.x = win->rectWindow.left - win->rectClient.left; + escape.org.y = win->rectWindow.top - win->rectClient.top; } + MapWindowPoints( hwnd, clipping_parent, &escape.org, 1 ); + MapWindowPoints( clipping_parent, 0, &escape.drawable_org, 1 ); + escape.drawable = X11DRV_get_client_window( clipping_parent ); } else {