regression: listbox stays disabled in created dialog-window

Alexandre Julliard julliard at winehq.org
Wed Sep 1 11:52:40 CDT 2004


Rein Klazes <rklazes at 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
     {

-- 
Alexandre Julliard
julliard at winehq.org



More information about the wine-devel mailing list