Michael Jung wrote:
since a couple of weeks all wine GUI applications are missing the window manager decorations on my Debian Etch box with the Compiz window manager. I did'nt get to doing a bisect until today. The problematic patch seems to be:
commit ac98e0c07535af4a373c0af343498903e2ff42a6 Author: Alexandre Julliard julliard@winehq.org Date: Mon Aug 20 22:06:33 2007 +0200
winex11: Switch windows to managed mode in SetWindowPos instead of
at creation time.
It seems that the added "data->whole_window" check in the expression used to decide if a window has to be switched to managed mode causes this problem for me.
data->whole_window is set in create_whole_window at window.c:1002 create_whole_window is called from X11DRV_CreateWindow at window.c:1292
data->whole_window is tested in X11DRV_SetWindowPos at winpos.c:251 X11DRV_SetWindowPos is called form X11DRV_CreateWindow at window.c:1287
Thus, it seems to me that this check happens before "data->whole_window" is initialized. Removing this check (as in the attached patch) resolves the issue for me. But this does not seem to be the correct solution, since the root desktop window is now flagged as "managed", which does not have any impact (at least for me), but which seem logically incorrect.
Thanks, -- Michael Jung mjung@iss.tu-darmstadt.de
From ebd940b415d69270aa6b2408688560dd915ec9bb Mon Sep 17 00:00:00 2001
From: Michael Jung <mjung@denkbrett.(none)> Date: Thu, 4 Oct 2007 16:44:53 +0200 Subject: [PATCH] Do not test uninitialized data->whole_window in X11DRV_SetWindowPos
--- dlls/winex11.drv/winpos.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/dlls/winex11.drv/winpos.c b/dlls/winex11.drv/winpos.c index 1e7da13..b9db494 100644 --- a/dlls/winex11.drv/winpos.c +++ b/dlls/winex11.drv/winpos.c @@ -248,7 +248,7 @@ BOOL X11DRV_SetWindowPos( HWND hwnd, HWND insert_after, const RECT *rectWindow, if (!(data = X11DRV_get_win_data( hwnd ))) return FALSE;
/* check if we need to switch the window to managed */ - if (!data->managed && data->whole_window && managed_mode && + if (!data->managed && managed_mode && root_window == DefaultRootWindow( display ) && data->whole_window != root_window) {