mirror of
git://source.winehq.org/git/wine.git
synced 2024-11-05 18:01:34 +00:00
wined3d: Restore the window visibility and z-order upon exiting fullscreen, if requested.
Signed-off-by: Gabriel Ivăncescu <gabrielopcode@gmail.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
f90d607c67
commit
0f024390ca
4 changed files with 13 additions and 4 deletions
|
@ -5888,10 +5888,8 @@ static void test_swapchain_window_styles(void)
|
|||
|
||||
style = GetWindowLongA(swapchain_desc.OutputWindow, GWL_STYLE);
|
||||
exstyle = GetWindowLongA(swapchain_desc.OutputWindow, GWL_EXSTYLE);
|
||||
todo_wine_if(!(tests[i].expected_style & WS_VISIBLE))
|
||||
ok(style == tests[i].expected_style, "Test %u: Got style %#x, expected %#x.\n",
|
||||
i, style, tests[i].expected_style);
|
||||
todo_wine_if(!(tests[i].expected_exstyle & WS_EX_TOPMOST))
|
||||
ok(exstyle == tests[i].expected_exstyle, "Test %u: Got exstyle %#x, expected %#x.\n",
|
||||
i, exstyle, tests[i].expected_exstyle);
|
||||
|
||||
|
|
|
@ -513,7 +513,8 @@ unsigned int wined3d_bind_flags_from_dxgi_usage(DXGI_USAGE dxgi_usage)
|
|||
}
|
||||
|
||||
#define DXGI_WINED3D_SWAPCHAIN_FLAGS \
|
||||
(WINED3D_SWAPCHAIN_USE_CLOSEST_MATCHING_MODE | WINED3D_SWAPCHAIN_RESTORE_WINDOW_RECT | WINED3D_SWAPCHAIN_HOOK)
|
||||
(WINED3D_SWAPCHAIN_USE_CLOSEST_MATCHING_MODE | WINED3D_SWAPCHAIN_RESTORE_WINDOW_RECT \
|
||||
| WINED3D_SWAPCHAIN_HOOK | WINED3D_SWAPCHAIN_RESTORE_WINDOW_STATE)
|
||||
|
||||
unsigned int dxgi_swapchain_flags_from_wined3d(unsigned int wined3d_flags)
|
||||
{
|
||||
|
|
|
@ -2112,6 +2112,7 @@ void wined3d_swapchain_state_restore_from_fullscreen(struct wined3d_swapchain_st
|
|||
HWND window, const RECT *window_rect)
|
||||
{
|
||||
unsigned int window_pos_flags = SWP_FRAMECHANGED | SWP_NOZORDER | SWP_NOACTIVATE;
|
||||
HWND window_pos_after = NULL;
|
||||
LONG style, exstyle;
|
||||
RECT rect = {0};
|
||||
BOOL filter;
|
||||
|
@ -2119,6 +2120,14 @@ void wined3d_swapchain_state_restore_from_fullscreen(struct wined3d_swapchain_st
|
|||
if (!state->style && !state->exstyle)
|
||||
return;
|
||||
|
||||
if ((state->desc.flags & WINED3D_SWAPCHAIN_RESTORE_WINDOW_STATE)
|
||||
&& !(state->desc.flags & WINED3D_SWAPCHAIN_NO_WINDOW_CHANGES))
|
||||
{
|
||||
window_pos_after = (state->exstyle & WS_EX_TOPMOST) ? HWND_TOPMOST : HWND_NOTOPMOST;
|
||||
window_pos_flags |= (state->style & WS_VISIBLE) ? SWP_SHOWWINDOW : SWP_HIDEWINDOW;
|
||||
window_pos_flags &= ~SWP_NOZORDER;
|
||||
}
|
||||
|
||||
style = GetWindowLongW(window, GWL_STYLE);
|
||||
exstyle = GetWindowLongW(window, GWL_EXSTYLE);
|
||||
|
||||
|
@ -2150,7 +2159,7 @@ void wined3d_swapchain_state_restore_from_fullscreen(struct wined3d_swapchain_st
|
|||
rect = *window_rect;
|
||||
else
|
||||
window_pos_flags |= (SWP_NOMOVE | SWP_NOSIZE);
|
||||
SetWindowPos(window, 0, rect.left, rect.top,
|
||||
SetWindowPos(window, window_pos_after, rect.left, rect.top,
|
||||
rect.right - rect.left, rect.bottom - rect.top, window_pos_flags);
|
||||
|
||||
wined3d_filter_messages(window, filter);
|
||||
|
|
|
@ -906,6 +906,7 @@ enum wined3d_shader_type
|
|||
#define WINED3D_SWAPCHAIN_IMPLICIT 0x00010000u
|
||||
#define WINED3D_SWAPCHAIN_HOOK 0x00020000u
|
||||
#define WINED3D_SWAPCHAIN_NO_WINDOW_CHANGES 0x00040000u
|
||||
#define WINED3D_SWAPCHAIN_RESTORE_WINDOW_STATE 0x00080000u
|
||||
|
||||
#define WINED3DDP_MAXTEXCOORD 8
|
||||
|
||||
|
|
Loading…
Reference in a new issue