From 079caeaa8d4421b6842399a7ac0f08c6ab6ea252 Mon Sep 17 00:00:00 2001 From: Zhiyi Zhang Date: Fri, 29 May 2020 00:11:35 +0800 Subject: [PATCH] ddraw: Get new window size from the primary output after display mode changes. MonitorFromWindow() may return a different monitor if switching to a smaller display mode. Fix Railroad Tycoon II crashes. Signed-off-by: Zhiyi Zhang Signed-off-by: Henri Verbeet Signed-off-by: Alexandre Julliard --- dlls/ddraw/ddraw.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c index 6f640ef422a..e92ac25c40e 100644 --- a/dlls/ddraw/ddraw.c +++ b/dlls/ddraw/ddraw.c @@ -4926,8 +4926,7 @@ static void CDECL device_parent_wined3d_device_created(struct wined3d_device_par static void CDECL device_parent_mode_changed(struct wined3d_device_parent *device_parent) { struct ddraw *ddraw = ddraw_from_device_parent(device_parent); - MONITORINFO monitor_info; - HMONITOR monitor; + struct wined3d_output_desc output_desc; RECT *r; TRACE("device_parent %p.\n", device_parent); @@ -4938,15 +4937,13 @@ static void CDECL device_parent_mode_changed(struct wined3d_device_parent *devic return; } - monitor = MonitorFromWindow(ddraw->swapchain_window, MONITOR_DEFAULTTOPRIMARY); - monitor_info.cbSize = sizeof(monitor_info); - if (!GetMonitorInfoW(monitor, &monitor_info)) + if (FAILED(wined3d_output_get_desc(ddraw->wined3d_output, &output_desc))) { - ERR("Failed to get monitor info.\n"); + ERR("Failed to get output description.\n"); return; } - r = &monitor_info.rcMonitor; + r = &output_desc.desktop_rect; TRACE("Resizing window %p to %s.\n", ddraw->swapchain_window, wine_dbgstr_rect(r)); if (!SetWindowPos(ddraw->swapchain_window, HWND_TOP, r->left, r->top,