Alexandre Julliard : x11drv: Make sure to never manipulate the root window, even if we own

Alexandre Julliard julliard at wine.codeweavers.com
Mon Mar 6 15:28:04 CST 2006


Module: wine
Branch: refs/heads/master
Commit: 6d5f5447eaae4837d8da9210d21fd3265a0073d7
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=6d5f5447eaae4837d8da9210d21fd3265a0073d7

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Mon Mar  6 21:02:59 2006 +0100

x11drv: Make sure to never manipulate the root window, even if we own
the desktop window.

---

 dlls/x11drv/window.c |    6 ++++--
 dlls/x11drv/winpos.c |    9 ++++++++-
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/dlls/x11drv/window.c b/dlls/x11drv/window.c
index 8eca46e..5cac2ed 100644
--- a/dlls/x11drv/window.c
+++ b/dlls/x11drv/window.c
@@ -145,7 +145,8 @@ void X11DRV_sync_window_style( Display *
     int mask = get_window_attributes( data, &attr );
 
     wine_tsx11_lock();
-    XChangeWindowAttributes( display, data->whole_window, mask, &attr );
+    if (data->whole_window != DefaultRootWindow(display))
+        XChangeWindowAttributes( display, data->whole_window, mask, &attr );
     wine_tsx11_unlock();
 }
 
@@ -715,7 +716,8 @@ static void destroy_whole_window( Displa
     wine_tsx11_lock();
     XSync( gdi_display, False );  /* flush any reference to this drawable in GDI queue */
     XDeleteContext( display, data->whole_window, winContext );
-    XDestroyWindow( display, data->whole_window );  /* this destroys client too */
+    if (data->whole_window != DefaultRootWindow(display))
+        XDestroyWindow( display, data->whole_window );
     data->whole_window = 0;
     if (data->xic)
     {
diff --git a/dlls/x11drv/winpos.c b/dlls/x11drv/winpos.c
index c49b8c9..e912531 100644
--- a/dlls/x11drv/winpos.c
+++ b/dlls/x11drv/winpos.c
@@ -586,9 +586,16 @@ BOOL X11DRV_set_window_pos( HWND hwnd, H
     }
     SERVER_END_REQ;
 
-    if (win == WND_DESKTOP)
+    if (win == WND_DESKTOP || data->whole_window == DefaultRootWindow(gdi_display))
     {
         data->whole_rect = data->client_rect = data->window_rect = *rectWindow;
+        if (win != WND_DESKTOP)
+        {
+            win->rectWindow   = *rectWindow;
+            win->rectClient   = *rectClient;
+            win->dwStyle      = new_style;
+            WIN_ReleasePtr( win );
+        }
         return ret;
     }
 




More information about the wine-cvs mailing list