From: Stefan D��singer stefan@codeweavers.com
--- dlls/ddraw/tests/ddraw1.c | 9 +++++++-- dlls/ddraw/tests/ddraw2.c | 13 +++++++++---- dlls/ddraw/tests/ddraw4.c | 13 +++++++++---- dlls/ddraw/tests/ddraw7.c | 13 +++++++++---- 4 files changed, 34 insertions(+), 14 deletions(-)
diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c index 531b16520a1..7d2e93ece61 100644 --- a/dlls/ddraw/tests/ddraw1.c +++ b/dlls/ddraw/tests/ddraw1.c @@ -14224,8 +14224,13 @@ static HRESULT CALLBACK find_different_mode_callback(DDSURFACEDESC *surface_desc
if (surface_desc->dwWidth != param->old_width && surface_desc->dwHeight != param->old_height) { - param->new_width = surface_desc->dwWidth; - param->new_height = surface_desc->dwHeight; + /* See test_coop_level_mode_set_enum_cb() for why enumeration might accidentally continue. */ + if (!param->new_width || (param->new_width < registry_mode.dmPelsWidth + && param->new_height < registry_mode.dmPelsHeight)) + { + param->new_width = surface_desc->dwWidth; + param->new_height = surface_desc->dwHeight; + } return DDENUMRET_CANCEL; }
diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c index 4c20a774b05..bc370396640 100644 --- a/dlls/ddraw/tests/ddraw2.c +++ b/dlls/ddraw/tests/ddraw2.c @@ -15205,10 +15205,15 @@ static HRESULT CALLBACK find_different_mode_callback(DDSURFACEDESC *surface_desc if (surface_desc->dwWidth != param->old_width && surface_desc->dwHeight != param->old_height && (!compare_uint(surface_desc->dwRefreshRate, param->old_frequency, 1) || !param->old_frequency)) { - param->new_width = surface_desc->dwWidth; - param->new_height = surface_desc->dwHeight; - param->new_frequency = surface_desc->dwRefreshRate; - param->new_bpp = surface_desc->ddpfPixelFormat.dwRGBBitCount; + /* See test_coop_level_mode_set_enum_cb() for why enumeration might accidentally continue. */ + if (!param->new_width || (param->new_width < registry_mode.dmPelsWidth + && param->new_height < registry_mode.dmPelsHeight)) + { + param->new_width = surface_desc->dwWidth; + param->new_height = surface_desc->dwHeight; + param->new_frequency = surface_desc->dwRefreshRate; + param->new_bpp = surface_desc->ddpfPixelFormat.dwRGBBitCount; + } return DDENUMRET_CANCEL; }
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c index 10cf8f88fd6..de438982703 100644 --- a/dlls/ddraw/tests/ddraw4.c +++ b/dlls/ddraw/tests/ddraw4.c @@ -18255,10 +18255,15 @@ static HRESULT CALLBACK find_different_mode_callback(DDSURFACEDESC2 *surface_des if (surface_desc->dwWidth != param->old_width && surface_desc->dwHeight != param->old_height && (!compare_uint(surface_desc->dwRefreshRate, param->old_frequency, 1) || !param->old_frequency)) { - param->new_width = surface_desc->dwWidth; - param->new_height = surface_desc->dwHeight; - param->new_frequency = surface_desc->dwRefreshRate; - param->new_bpp = surface_desc->ddpfPixelFormat.dwRGBBitCount; + /* See test_coop_level_mode_set_enum_cb() for why enumeration might accidentally continue. */ + if (!param->new_width || (param->new_width < registry_mode.dmPelsWidth + && param->new_height < registry_mode.dmPelsHeight)) + { + param->new_width = surface_desc->dwWidth; + param->new_height = surface_desc->dwHeight; + param->new_frequency = surface_desc->dwRefreshRate; + param->new_bpp = surface_desc->ddpfPixelFormat.dwRGBBitCount; + } return DDENUMRET_CANCEL; }
diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c index 062e8430a75..1d1ed1d15ac 100644 --- a/dlls/ddraw/tests/ddraw7.c +++ b/dlls/ddraw/tests/ddraw7.c @@ -18522,10 +18522,15 @@ static HRESULT CALLBACK find_different_mode_callback(DDSURFACEDESC2 *surface_des if (surface_desc->dwWidth != param->old_width && surface_desc->dwHeight != param->old_height && (!compare_uint(surface_desc->dwRefreshRate, param->old_frequency, 1) || !param->old_frequency)) { - param->new_width = surface_desc->dwWidth; - param->new_height = surface_desc->dwHeight; - param->new_frequency = surface_desc->dwRefreshRate; - param->new_bpp = surface_desc->ddpfPixelFormat.dwRGBBitCount; + /* See test_coop_level_mode_set_enum_cb() for why enumeration might accidentally continue. */ + if (!param->new_width || (param->new_width < registry_mode.dmPelsWidth + && param->new_height < registry_mode.dmPelsHeight)) + { + param->new_width = surface_desc->dwWidth; + param->new_height = surface_desc->dwHeight; + param->new_frequency = surface_desc->dwRefreshRate; + param->new_bpp = surface_desc->ddpfPixelFormat.dwRGBBitCount; + } return DDENUMRET_CANCEL; }