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

View File

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

View File

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