From: Rémi Bernon rbernon@codeweavers.com
There should always be a call to update_window_state / apply_window_pos after layered window attributes have been set, which will call into WindowPosChanged and the layered window should get mapped. --- dlls/winex11.drv/window.c | 23 ----------------------- 1 file changed, 23 deletions(-)
diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c index fdd958a7631..6da69b1f0d2 100644 --- a/dlls/winex11.drv/window.c +++ b/dlls/winex11.drv/window.c @@ -3316,18 +3316,6 @@ void X11DRV_SetLayeredWindowAttributes( HWND hwnd, COLORREF key, BYTE alpha, DWO sync_window_opacity( data->display, data->whole_window, alpha, flags );
data->layered = TRUE; - if (data->desired_state.wm_state == WithdrawnState) /* mapping is delayed until attributes are set */ - { - DWORD style = NtUserGetWindowLongW( data->hwnd, GWL_STYLE ); - - if ((style & WS_VISIBLE) && - ((style & WS_MINIMIZE) || is_window_rect_mapped( &data->rects.window ))) - { - release_win_data( data ); - map_window( hwnd, style, TRUE ); - return; - } - } release_win_data( data ); } else @@ -3349,24 +3337,13 @@ void X11DRV_SetLayeredWindowAttributes( HWND hwnd, COLORREF key, BYTE alpha, DWO void X11DRV_UpdateLayeredWindow( HWND hwnd, BYTE alpha, UINT flags ) { struct x11drv_win_data *data; - BOOL mapped;
if (!(data = get_win_data( hwnd ))) return;
if (data->whole_window) sync_window_opacity( data->display, data->whole_window, alpha, flags );
- mapped = data->desired_state.wm_state != WithdrawnState; release_win_data( data ); - - /* layered windows are mapped only once their attributes are set */ - if (!mapped) - { - DWORD style = NtUserGetWindowLongW( hwnd, GWL_STYLE ); - - if ((style & WS_VISIBLE) && ((style & WS_MINIMIZE) || is_window_rect_mapped( &data->rects.window ))) - map_window( hwnd, style, TRUE ); - } }