From cb70643fa4563052f90a45a30849d0736e23494b Mon Sep 17 00:00:00 2001 From: Quantum Date: Wed, 3 Jun 2026 01:50:15 -0400 Subject: [PATCH] [idd] helper: load default mode list with default refresh rate After 882d53179287a216dafa1a573a0b6dc32ef05768, the existing code in the helper reads past the end of the array for refresh rate, which is broken. This PR also refactors the default modes into a getDefaultModes method so that it can be used for a reset feature later. --- idd/LGIddHelper/CRegistrySettings.cpp | 32 ++++++++++++++++----------- idd/LGIddHelper/CRegistrySettings.h | 1 + 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/idd/LGIddHelper/CRegistrySettings.cpp b/idd/LGIddHelper/CRegistrySettings.cpp index 8e38ed4d..1cda0708 100644 --- a/idd/LGIddHelper/CRegistrySettings.cpp +++ b/idd/LGIddHelper/CRegistrySettings.cpp @@ -78,6 +78,24 @@ static std::optional parseDisplayMode(const std::wstring &str) return mode; } +std::vector CRegistrySettings::getDefaultModes() +{ + auto defaultRefresh = getDefaultRefresh(); + int refresh = defaultRefresh ? *defaultRefresh : DEFAULT_REFRESH; + + std::vector result; + for (int i = 0; i < ARRAYSIZE(DefaultDisplayModes); ++i) + { + DisplayMode mode; + mode.width = DefaultDisplayModes[i][0]; + mode.height = DefaultDisplayModes[i][1]; + mode.refresh = refresh; + mode.preferred = i == DefaultPreferredDisplayMode; + result.emplace_back(mode); + } + return result; +} + std::optional> CRegistrySettings::getModes() { LSTATUS status; @@ -89,19 +107,7 @@ std::optional> CRegistrySettings::getModes() case ERROR_SUCCESS: break; case ERROR_FILE_NOT_FOUND: - { - std::vector result; - for (int i = 0; i < ARRAYSIZE(DefaultDisplayModes); ++i) - { - DisplayMode mode; - mode.width = DefaultDisplayModes[i][0]; - mode.height = DefaultDisplayModes[i][1]; - mode.refresh = DefaultDisplayModes[i][2]; - mode.preferred = i == DefaultPreferredDisplayMode; - result.emplace_back(mode); - } - return result; - } + return getDefaultModes(); default: DEBUG_ERROR_HR(status, "RegGetValue(Modes) length computation"); return {}; diff --git a/idd/LGIddHelper/CRegistrySettings.h b/idd/LGIddHelper/CRegistrySettings.h index 83af6a50..49801985 100644 --- a/idd/LGIddHelper/CRegistrySettings.h +++ b/idd/LGIddHelper/CRegistrySettings.h @@ -44,6 +44,7 @@ public: LSTATUS open(); bool isOpen() { return !!hKey; } + std::vector getDefaultModes(); std::optional> getModes(); LSTATUS setModes(const std::vector &modes);