From: Rémi Bernon rbernon@codeweavers.com
This confuses mutter, and it will later get confused in various ways if decorations are later added or removed on the window, even if the flag has been unset. Doing it the other way, changing the flag later on, when needed works fine.
This manifests with spurious IconicState WM_STATE change when mutter decides to try managing the window, but it also makes it randomly lose focus or even fail to map the window back on screen. --- dlls/winex11.drv/window.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c index 49785b9a416..2a8fd624fd5 100644 --- a/dlls/winex11.drv/window.c +++ b/dlls/winex11.drv/window.c @@ -2078,12 +2078,6 @@ static void create_whole_window( struct x11drv_win_data *data ) HRGN win_rgn; POINT pos;
- if (!data->managed && is_window_managed( data->hwnd, SWP_NOACTIVATE, &data->rects.window )) - { - TRACE( "making win %p/%lx managed\n", data->hwnd, data->whole_window ); - data->managed = TRUE; - } - if ((win_rgn = NtGdiCreateRectRgn( 0, 0, 0, 0 )) && NtUserGetWindowRgnEx( data->hwnd, win_rgn, 0 ) == ERROR) { @@ -2095,6 +2089,7 @@ static void create_whole_window( struct x11drv_win_data *data ) if (data->vis.visualid != default_visual.visualid) data->whole_colormap = XCreateColormap( data->display, root_window, data->vis.visual, AllocNone );
+ data->managed = TRUE; mask = get_window_attributes( data, &attr );
if (!(cx = data->rects.visible.right - data->rects.visible.left)) cx = 1; @@ -2111,6 +2106,7 @@ static void create_whole_window( struct x11drv_win_data *data ) data->pending_state.rect = data->current_state.rect; data->desired_state.rect = data->current_state.rect;
+ if (!is_window_managed( data->hwnd, SWP_NOACTIVATE, &data->rects.window )) data->managed = FALSE; x11drv_xinput2_enable( data->display, data->whole_window ); set_initial_wm_hints( data->display, data->whole_window ); set_wm_hints( data );