[idd] never add the extraMode to the EDID

Doing so causes windows to treat a new EDID as a new monitor
This commit is contained in:
Geoffrey McRae
2026-07-18 04:01:19 +10:00
parent 234f8623dc
commit 6e70f36134
3 changed files with 16 additions and 1 deletions

View File

@@ -554,6 +554,10 @@ void CEdid::Build(const CSettings::DisplayModes& modes)
baseDtdIndex < EDID_BASE_DETAILED_TIMING_COUNT; baseDtdIndex < EDID_BASE_DETAILED_TIMING_COUNT;
++modeIndex) ++modeIndex)
{ {
// never include the extra mode in the EDID
if (sorted[modeIndex].extraMode)
continue;
if (MakeDetailedTiming( if (MakeDetailedTiming(
baseBlock.descriptors[baseDtdIndex].detailedTiming, baseBlock.descriptors[baseDtdIndex].detailedTiming,
sorted[modeIndex])) sorted[modeIndex]))
@@ -589,6 +593,10 @@ void CEdid::Build(const CSettings::DisplayModes& modes)
ctaDtdWrite + EDID_DTD_SIZE <= EDID_BLOCK_SIZE - 1; ctaDtdWrite + EDID_DTD_SIZE <= EDID_BLOCK_SIZE - 1;
++modeIndex) ++modeIndex)
{ {
// never include the extra mode in the EDID
if (sorted[modeIndex].extraMode)
continue;
if (WriteDetailedTiming(cta + ctaDtdWrite, sorted[modeIndex])) if (WriteDetailedTiming(cta + ctaDtdWrite, sorted[modeIndex]))
ctaDtdWrite += EDID_DTD_SIZE; ctaDtdWrite += EDID_DTD_SIZE;
} }

View File

@@ -58,6 +58,7 @@ void CSettings::LoadModes()
m.height = DefaultDisplayModes[i][1]; m.height = DefaultDisplayModes[i][1];
m.refresh = defaultRefresh; m.refresh = defaultRefresh;
m.preferred = !hasPreferred && (i == DefaultPreferredDisplayMode); m.preferred = !hasPreferred && (i == DefaultPreferredDisplayMode);
m.extraMode = false;
m_displayModes.push_back(m); m_displayModes.push_back(m);
} }
return; return;
@@ -209,7 +210,11 @@ bool CSettings::GetExtraMode(DisplayMode& mode)
if (extraMode.empty()) if (extraMode.empty())
return false; return false;
return ParseModeString(extraMode, mode); if (!ParseModeString(extraMode, mode))
return false;
mode.extraMode = true;
return true;
} }
unsigned CSettings::GetDefaultRefresh() const unsigned CSettings::GetDefaultRefresh() const
@@ -318,5 +323,6 @@ bool CSettings::ParseModeString(const std::wstring& in, DisplayMode& out)
out.refresh > 1000) out.refresh > 1000)
return false; return false;
out.extraMode = false;
return true; return true;
} }

View File

@@ -32,6 +32,7 @@ class CSettings
unsigned height; unsigned height;
unsigned refresh; unsigned refresh;
bool preferred; bool preferred;
bool extraMode;
}; };
typedef std::vector<DisplayMode> DisplayModes; typedef std::vector<DisplayMode> DisplayModes;