[idd] helper: load default mode list with default refresh rate

After 882d531792, 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.
This commit is contained in:
Quantum
2026-06-03 01:50:15 -04:00
committed by Geoffrey McRae
parent 3ef8344e9f
commit cb70643fa4
2 changed files with 20 additions and 13 deletions

View File

@@ -78,6 +78,24 @@ static std::optional<DisplayMode> parseDisplayMode(const std::wstring &str)
return mode;
}
std::vector<DisplayMode> CRegistrySettings::getDefaultModes()
{
auto defaultRefresh = getDefaultRefresh();
int refresh = defaultRefresh ? *defaultRefresh : DEFAULT_REFRESH;
std::vector<DisplayMode> 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<std::vector<DisplayMode>> CRegistrySettings::getModes()
{
LSTATUS status;
@@ -89,19 +107,7 @@ std::optional<std::vector<DisplayMode>> CRegistrySettings::getModes()
case ERROR_SUCCESS:
break;
case ERROR_FILE_NOT_FOUND:
{
std::vector<DisplayMode> 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 {};

View File

@@ -44,6 +44,7 @@ public:
LSTATUS open();
bool isOpen() { return !!hKey; }
std::vector<DisplayMode> getDefaultModes();
std::optional<std::vector<DisplayMode>> getModes();
LSTATUS setModes(const std::vector<DisplayMode> &modes);