Alexandre Julliard : winex11: Create a dummy parent window for composite child windows to avoid using the root .

Alexandre Julliard julliard at winehq.org
Mon May 12 13:41:09 CDT 2008


Module: wine
Branch: master
Commit: b605980bf15fbc83cc0e38d951731ccbd2125401
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=b605980bf15fbc83cc0e38d951731ccbd2125401

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Mon May 12 19:14:11 2008 +0200

winex11: Create a dummy parent window for composite child windows to avoid using the root.

---

 dlls/winex11.drv/window.c |   15 ++++++++++-----
 1 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c
index 791dcd0..191931a 100644
--- a/dlls/winex11.drv/window.c
+++ b/dlls/winex11.drv/window.c
@@ -454,21 +454,26 @@ BOOL X11DRV_set_win_format( HWND hwnd, XID fbconfig_id )
     if(usexcomposite)
     {
         XSetWindowAttributes attrib;
-        Window parent = X11DRV_get_whole_window( GetAncestor( hwnd, GA_ROOT ));
+        static Window dummy_parent;
 
-        if (!parent) parent = root_window;
         wine_tsx11_lock();
-        data->colormap = XCreateColormap(gdi_display, parent, vis->visual,
+        attrib.override_redirect = True;
+        if (!dummy_parent)
+        {
+            dummy_parent = XCreateWindow( gdi_display, root_window, -1, -1, 1, 1, 0, screen_depth,
+                                         InputOutput, visual, CWOverrideRedirect, &attrib );
+            XMapWindow( gdi_display, dummy_parent );
+        }
+        data->colormap = XCreateColormap(gdi_display, dummy_parent, vis->visual,
                                          (vis->class == PseudoColor ||
                                           vis->class == GrayScale ||
                                           vis->class == DirectColor) ?
                                          AllocAll : AllocNone);
-        attrib.override_redirect = True;
         attrib.colormap = data->colormap;
         XInstallColormap(gdi_display, attrib.colormap);
 
         if(data->gl_drawable) XDestroyWindow(gdi_display, data->gl_drawable);
-        data->gl_drawable = XCreateWindow(gdi_display, parent, -w, 0, w, h, 0,
+        data->gl_drawable = XCreateWindow(gdi_display, dummy_parent, -w, 0, w, h, 0,
                                           vis->depth, InputOutput, vis->visual,
                                           CWColormap | CWOverrideRedirect,
                                           &attrib);




More information about the wine-cvs mailing list