diff --git a/gfx/common/win32_common.c b/gfx/common/win32_common.c index b580a1bcb0..0b77ce9f88 100644 --- a/gfx/common/win32_common.c +++ b/gfx/common/win32_common.c @@ -1353,15 +1353,13 @@ void win32_get_video_output_prev( unsigned curr_width = 0; unsigned curr_height = 0; - memset(&dm, 0, sizeof(dm)); + if (win32_get_video_output(&dm, -1, sizeof(dm))) + { + curr_width = dm.dmPelsWidth; + curr_height = dm.dmPelsHeight; + } - dm.dmSize = sizeof(dm); - - win32_get_video_output_size(&curr_width, &curr_height); - - for (i = 0; - EnumDisplaySettings(NULL, i, &dm) != 0; - i++) + for (i = 0; win32_get_video_output(&dm, i, sizeof(dm)); i++) { if ( dm.dmPelsWidth == curr_width && dm.dmPelsHeight == curr_height) @@ -1458,14 +1456,13 @@ void win32_get_video_output_next( unsigned curr_width = 0; unsigned curr_height = 0; - memset(&dm, 0, sizeof(dm)); - dm.dmSize = sizeof(dm); + if (win32_get_video_output(&dm, -1, sizeof(dm))) + { + curr_width = dm.dmPelsWidth; + curr_height = dm.dmPelsHeight; + } - win32_get_video_output_size(&curr_width, &curr_height); - - for (i = 0; - EnumDisplaySettings(NULL, i, &dm) != 0; - i++) + for (i = 0; win32_get_video_output(&dm, i, sizeof(dm)); i++) { if (found) { @@ -1480,13 +1477,23 @@ void win32_get_video_output_next( } } +bool win32_get_video_output(DEVMODE *dm, int mode, size_t len) +{ + memset(dm, 0, len); + dm->dmSize = len; + + if (EnumDisplaySettings(NULL, + (mode == -1) ? ENUM_CURRENT_SETTINGS : mode, dm) == 0) + return false; + + return true; +} + void win32_get_video_output_size(unsigned *width, unsigned *height) { DEVMODE dm; - memset(&dm, 0, sizeof(dm)); - dm.dmSize = sizeof(dm); - if (EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dm) != 0) + if (win32_get_video_output(&dm, -1, sizeof(dm))) { *width = dm.dmPelsWidth; *height = dm.dmPelsHeight; diff --git a/gfx/common/win32_common.h b/gfx/common/win32_common.h index 04eeeef936..6f899ad491 100644 --- a/gfx/common/win32_common.h +++ b/gfx/common/win32_common.h @@ -101,6 +101,8 @@ void win32_check_window(bool *quit, void win32_set_window(unsigned *width, unsigned *height, bool fullscreen, bool windowed_full, void *rect_data); +bool win32_get_video_output(DEVMODE *dm, int mode, size_t len); + void win32_get_video_output_size( unsigned *width, unsigned *height); diff --git a/gfx/display_servers/dispserv_win32.c b/gfx/display_servers/dispserv_win32.c index c680ba4124..97469906c6 100644 --- a/gfx/display_servers/dispserv_win32.c +++ b/gfx/display_servers/dispserv_win32.c @@ -213,7 +213,7 @@ static bool win32_display_server_set_resolution(void *data, if (!serv) return false; - EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &curDevmode); + win32_get_video_output(&curDevmode, -1, sizeof(curDevmode)); if (win32_orig_width == 0) win32_orig_width = GetSystemMetrics(SM_CXSCREEN); @@ -238,7 +238,7 @@ static bool win32_display_server_set_resolution(void *data, LONG res; DEVMODE devmode; - if (!EnumDisplaySettings(NULL, iModeNum, &devmode)) + if (!win32_get_video_output(&devmode, iModeNum, sizeof(devmode))) break; if (devmode.dmPelsWidth != width)