Module: wine Branch: master Commit: 628d60a1596eb470e155b41e158e6b68d9c3ddd9 URL: https://source.winehq.org/git/wine.git/?a=commit;h=628d60a1596eb470e155b41e1...
Author: Andrew Eikum aeikum@codeweavers.com Date: Thu Jun 20 02:47:48 2019 +0430
wined3d: Validate that we got a valid window in wined3d_device_setup_fullscreen_window().
Signed-off-by: Andrew Eikum aeikum@codeweavers.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/dxgi/tests/dxgi.c | 4 ++-- dlls/wined3d/device.c | 11 ++++++++++- dlls/wined3d/swapchain.c | 4 +++- include/wine/wined3d.h | 3 ++- 4 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/dlls/dxgi/tests/dxgi.c b/dlls/dxgi/tests/dxgi.c index f5e1b10..69c868c 100644 --- a/dlls/dxgi/tests/dxgi.c +++ b/dlls/dxgi/tests/dxgi.c @@ -2292,7 +2292,7 @@ static void test_set_fullscreen(void) hr = IDXGISwapChain_SetFullscreenState(swapchain, FALSE, NULL); ok(hr == S_OK, "Got unexpected hr %#x.\n", hr); hr = IDXGISwapChain_SetFullscreenState(swapchain, TRUE, NULL); - todo_wine ok(hr == DXGI_ERROR_NOT_CURRENTLY_AVAILABLE, "Got unexpected hr %#x.\n", hr); + ok(hr == DXGI_ERROR_NOT_CURRENTLY_AVAILABLE, "Got unexpected hr %#x.\n", hr); hr = IDXGISwapChain_SetFullscreenState(swapchain, FALSE, NULL); ok(hr == S_OK, "Got unexpected hr %#x.\n", hr); refcount = IDXGISwapChain_Release(swapchain); @@ -2310,7 +2310,7 @@ static void test_set_fullscreen(void) hr = IDXGISwapChain_SetFullscreenState(swapchain, FALSE, NULL); ok(hr == S_OK, "Got unexpected hr %#x.\n", hr); hr = IDXGISwapChain_SetFullscreenState(swapchain, TRUE, NULL); - todo_wine ok(hr == DXGI_ERROR_NOT_CURRENTLY_AVAILABLE, "Got unexpected hr %#x.\n", hr); + ok(hr == DXGI_ERROR_NOT_CURRENTLY_AVAILABLE, "Got unexpected hr %#x.\n", hr); hr = IDXGISwapChain_SetFullscreenState(swapchain, FALSE, NULL); ok(hr == S_OK, "Got unexpected hr %#x.\n", hr); refcount = IDXGISwapChain_Release(swapchain); diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 768375d..d35a064 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -927,13 +927,20 @@ static LONG fullscreen_exstyle(LONG exstyle) return exstyle; }
-void CDECL wined3d_device_setup_fullscreen_window(struct wined3d_device *device, HWND window, UINT w, UINT h) +HRESULT CDECL wined3d_device_setup_fullscreen_window(struct wined3d_device *device, + HWND window, unsigned int w, unsigned int h) { BOOL filter_messages; LONG style, exstyle;
TRACE("Setting up window %p for fullscreen mode.\n", window);
+ if (!IsWindow(window)) + { + WARN("%p is not a valid window.\n", window); + return WINED3DERR_NOTAVAILABLE; + } + if (device->style || device->exStyle) { ERR("Changing the window style for window %p, but another style (%08x, %08x) is already stored.\n", @@ -957,6 +964,8 @@ void CDECL wined3d_device_setup_fullscreen_window(struct wined3d_device *device, SetWindowPos(window, HWND_TOPMOST, 0, 0, w, h, SWP_FRAMECHANGED | SWP_SHOWWINDOW | SWP_NOACTIVATE);
device->filter_messages = filter_messages; + + return WINED3D_OK; }
void CDECL wined3d_device_restore_fullscreen_window(struct wined3d_device *device, HWND window, diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c index 7807341..8d6306e 100644 --- a/dlls/wined3d/swapchain.c +++ b/dlls/wined3d/swapchain.c @@ -1478,7 +1478,9 @@ HRESULT CDECL wined3d_swapchain_set_fullscreen(struct wined3d_swapchain *swapcha if (swapchain->desc.windowed) { /* Switch from windowed to fullscreen */ - wined3d_device_setup_fullscreen_window(device, swapchain->device_window, width, height); + if (FAILED(hr = wined3d_device_setup_fullscreen_window(device, + swapchain->device_window, width, height))) + return hr; } else { diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h index a0ff3f1..abef3f0 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h @@ -2483,7 +2483,8 @@ HRESULT __cdecl wined3d_device_set_vs_consts_i(struct wined3d_device *device, void __cdecl wined3d_device_set_vs_resource_view(struct wined3d_device *device, UINT idx, struct wined3d_shader_resource_view *view); void __cdecl wined3d_device_set_vs_sampler(struct wined3d_device *device, UINT idx, struct wined3d_sampler *sampler); -void __cdecl wined3d_device_setup_fullscreen_window(struct wined3d_device *device, HWND window, UINT w, UINT h); +HRESULT __cdecl wined3d_device_setup_fullscreen_window(struct wined3d_device *device, + HWND window, unsigned int w, unsigned int h); BOOL __cdecl wined3d_device_show_cursor(struct wined3d_device *device, BOOL show); void __cdecl wined3d_device_update_sub_resource(struct wined3d_device *device, struct wined3d_resource *resource, unsigned int sub_resource_idx, const struct wined3d_box *box, const void *data, unsigned int row_pitch,