From: "Rémi Bernon" Subject: [PATCH 3/8] wined3d: Add WINED3D_SWAPCHAIN_NO_STYLE_CHANGES flag. Message-Id: <20200311143634.913761-4-rbernon@codeweavers.com> Date: Wed, 11 Mar 2020 15:36:29 +0100 In-Reply-To: <20200311143634.913761-1-rbernon@codeweavers.com> References: <20200311143634.913761-1-rbernon@codeweavers.com> Signed-off-by: Rémi Bernon --- dlls/wined3d/swapchain.c | 34 +++++++++++++++++++++------------- include/wine/wined3d.h | 1 + 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c index c5fd2879c05..ad91f506cc1 100644 --- a/dlls/wined3d/swapchain.c +++ b/dlls/wined3d/swapchain.c @@ -1544,6 +1544,7 @@ static LONG fullscreen_exstyle(LONG exstyle) HRESULT wined3d_swapchain_state_setup_fullscreen(struct wined3d_swapchain_state *state, HWND window, unsigned int w, unsigned int h) { + unsigned int window_pos_flags = SWP_SHOWWINDOW | SWP_NOACTIVATE; LONG style, exstyle; BOOL filter; @@ -1564,17 +1565,22 @@ HRESULT wined3d_swapchain_state_setup_fullscreen(struct wined3d_swapchain_state state->style = GetWindowLongW(window, GWL_STYLE); state->exstyle = GetWindowLongW(window, GWL_EXSTYLE); - style = fullscreen_style(state->style); - exstyle = fullscreen_exstyle(state->exstyle); + filter = wined3d_filter_messages(window, TRUE); + + if (!(state->desc.flags & WINED3D_SWAPCHAIN_NO_STYLE_CHANGES)) + { + style = fullscreen_style(state->style); + exstyle = fullscreen_exstyle(state->exstyle); - TRACE("Old style was %08x, %08x, setting to %08x, %08x.\n", - state->style, state->exstyle, style, exstyle); + TRACE("Old style was %08x, %08x, setting to %08x, %08x.\n", + state->style, state->exstyle, style, exstyle); - filter = wined3d_filter_messages(window, TRUE); + SetWindowLongW(window, GWL_STYLE, style); + SetWindowLongW(window, GWL_EXSTYLE, exstyle); + window_pos_flags |= SWP_FRAMECHANGED; + } - SetWindowLongW(window, GWL_STYLE, style); - SetWindowLongW(window, GWL_EXSTYLE, exstyle); - SetWindowPos(window, HWND_TOPMOST, 0, 0, w, h, SWP_FRAMECHANGED | SWP_SHOWWINDOW | SWP_NOACTIVATE); + SetWindowPos(window, HWND_TOPMOST, 0, 0, w, h, window_pos_flags); wined3d_filter_messages(window, filter); @@ -1584,7 +1590,7 @@ HRESULT wined3d_swapchain_state_setup_fullscreen(struct wined3d_swapchain_state void wined3d_swapchain_state_restore_from_fullscreen(struct wined3d_swapchain_state *state, HWND window, const RECT *window_rect) { - unsigned int window_pos_flags = SWP_FRAMECHANGED | SWP_NOZORDER | SWP_NOACTIVATE; + unsigned int window_pos_flags = SWP_NOZORDER | SWP_NOACTIVATE; LONG style, exstyle; RECT rect = {0}; BOOL filter; @@ -1604,19 +1610,21 @@ void wined3d_swapchain_state_restore_from_fullscreen(struct wined3d_swapchain_st state->style ^= (state->style ^ style) & WS_VISIBLE; state->exstyle ^= (state->exstyle ^ exstyle) & WS_EX_TOPMOST; - TRACE("Restoring window style of window %p to %08x, %08x.\n", - window, state->style, state->exstyle); - filter = wined3d_filter_messages(window, TRUE); /* Only restore the style if the application didn't modify it during the * fullscreen phase. Some applications change it before calling Reset() * when switching between windowed and fullscreen modes (HL2), some * depend on the original style (Eve Online). */ - if (style == fullscreen_style(state->style) && exstyle == fullscreen_exstyle(state->exstyle)) + if (!(state->desc.flags & WINED3D_SWAPCHAIN_NO_STYLE_CHANGES) && + style == fullscreen_style(state->style) && exstyle == fullscreen_exstyle(state->exstyle)) { + TRACE("Restoring window style of window %p to %08x, %08x.\n", + window, state->style, state->exstyle); + SetWindowLongW(window, GWL_STYLE, state->style); SetWindowLongW(window, GWL_EXSTYLE, state->exstyle); + window_pos_flags |= SWP_FRAMECHANGED; } if (window_rect) diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h index 923f184d96d..aab3780d08f 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h @@ -906,6 +906,7 @@ enum wined3d_shader_type #define WINED3D_SWAPCHAIN_GDI_COMPATIBLE 0x00008000u #define WINED3D_SWAPCHAIN_IMPLICIT 0x00010000u #define WINED3D_SWAPCHAIN_HOOK 0x00020000u +#define WINED3D_SWAPCHAIN_NO_STYLE_CHANGES 0x00040000u #define WINED3DDP_MAXTEXCOORD 8 -- 2.25.0