diff --git a/idd/LGIdd/CSettings.cpp b/idd/LGIdd/CSettings.cpp index 42679c37..4a2b0436 100644 --- a/idd/LGIdd/CSettings.cpp +++ b/idd/LGIdd/CSettings.cpp @@ -98,7 +98,7 @@ void CSettings::SetExtraMode(const DisplayMode& mode) RegCloseKey(hKey); } -bool CSettings::GetExtraMode(DisplayMode& mode) +std::wstring CSettings::ReadStringValue(const wchar_t* name, const wchar_t* default) { HKEY hKey = nullptr; LONG ec = RegOpenKeyExW( @@ -110,29 +110,38 @@ bool CSettings::GetExtraMode(DisplayMode& mode) ); if (ec != ERROR_SUCCESS) - return false; + return std::wstring(default); DWORD type = 0; DWORD cb = 0; - ec = RegQueryValueExW(hKey, L"ExtraMode", nullptr, &type, nullptr, &cb); + ec = RegQueryValueExW(hKey, name, nullptr, &type, nullptr, &cb); if (ec != ERROR_SUCCESS || (type != REG_SZ && type != REG_EXPAND_SZ) || cb == 0) { RegCloseKey(hKey); - return false; + return std::wstring(default); } std::vector buf(cb / sizeof(wchar_t) + 1); - ec = RegQueryValueExW(hKey, L"ExtraMode", nullptr, &type, + ec = RegQueryValueExW(hKey, name, nullptr, &type, reinterpret_cast(buf.data()), &cb); RegCloseKey(hKey); if (ec != ERROR_SUCCESS) - return false; + return std::wstring(default); buf.back() = L'\0'; std::wstring s(buf.data()); - return ParseModeString(s, mode); + return s; +} + +bool CSettings::GetExtraMode(DisplayMode& mode) +{ + std::wstring extraMode = ReadStringValue(L"ExtraMode", NULL); + if (extraMode.empty()) + return false; + + return ParseModeString(extraMode, mode); } bool CSettings::ReadModesValue(std::vector &out) const diff --git a/idd/LGIdd/CSettings.h b/idd/LGIdd/CSettings.h index 1190c549..1d7070a4 100644 --- a/idd/LGIdd/CSettings.h +++ b/idd/LGIdd/CSettings.h @@ -24,6 +24,7 @@ class CSettings private: DisplayModes m_displayModes; + std::wstring ReadStringValue(const wchar_t* name, const wchar_t* default); bool ReadModesValue(std::vector &out) const; bool ParseModeString(const std::wstring& in, DisplayMode& out);