[FancyZones] Monitor id comparison fix (#19312)

* added monitor number to id comparison

* added monitor number to id in editor

* empty serial number comparison
This commit is contained in:
Seraphima Zykova
2022-07-11 17:39:03 +02:00
committed by GitHub
parent c36a80dad5
commit 73c259342b
12 changed files with 150 additions and 60 deletions

View File

@@ -27,6 +27,7 @@ namespace JsonUtils
std::wstring monitor = device.GetNamedString(NonLocalizable::AppZoneHistoryIds::MonitorID).c_str();
std::wstring monitorInstance = device.GetNamedString(NonLocalizable::AppZoneHistoryIds::MonitorInstanceID, L"").c_str();
std::wstring monitorSerialNumber = device.GetNamedString(NonLocalizable::AppZoneHistoryIds::MonitorSerialNumberID, L"").c_str();
int monitorNumber = static_cast<int>(device.GetNamedNumber(NonLocalizable::AppZoneHistoryIds::MonitorNumberID, 0));
std::wstring virtualDesktop = device.GetNamedString(NonLocalizable::AppZoneHistoryIds::VirtualDesktopID).c_str();
auto virtualDesktopGuid = FancyZonesUtils::GuidFromString(virtualDesktop);
@@ -45,6 +46,7 @@ namespace JsonUtils
{
deviceId.id = monitor;
deviceId.instanceId = monitorInstance;
deviceId.number = monitorNumber;
}
FancyZonesDataTypes::MonitorId monitorId{
@@ -175,6 +177,7 @@ namespace JsonUtils
device.SetNamedValue(NonLocalizable::AppZoneHistoryIds::MonitorID, json::value(data.workAreaId.monitorId.deviceId.id));
device.SetNamedValue(NonLocalizable::AppZoneHistoryIds::MonitorInstanceID, json::value(data.workAreaId.monitorId.deviceId.instanceId));
device.SetNamedValue(NonLocalizable::AppZoneHistoryIds::MonitorSerialNumberID, json::value(data.workAreaId.monitorId.serialNumber));
device.SetNamedValue(NonLocalizable::AppZoneHistoryIds::MonitorNumberID, json::value(data.workAreaId.monitorId.deviceId.number));
auto virtualDesktopStr = FancyZonesUtils::GuidToString(data.workAreaId.virtualDesktopId);
if (virtualDesktopStr)
@@ -308,13 +311,16 @@ void AppZoneHistory::AdjustWorkAreaIds(const std::vector<FancyZonesDataTypes::Mo
for (auto& dataIter = data.begin(); dataIter != data.end(); ++dataIter)
{
auto& dataMonitorId = dataIter->workAreaId.monitorId;
if (dataMonitorId.serialNumber.empty() && !dataMonitorId.deviceId.isDefault())
bool serialNumberNotSet = dataMonitorId.serialNumber.empty() && !dataMonitorId.deviceId.isDefault();
bool monitorNumberNotSet = dataMonitorId.deviceId.number == 0;
if (serialNumberNotSet || monitorNumberNotSet)
{
for (const auto& monitorId : ids)
{
if (dataMonitorId.deviceId.id == monitorId.deviceId.id && dataMonitorId.deviceId.instanceId == monitorId.deviceId.instanceId)
{
dataMonitorId.serialNumber = monitorId.serialNumber;
dataMonitorId.deviceId.number = monitorId.deviceId.number;
dirtyFlag = true;
break;
}

View File

@@ -19,6 +19,7 @@ namespace NonLocalizable
const static wchar_t* MonitorID = L"monitor";
const static wchar_t* MonitorInstanceID = L"monitor-instance";
const static wchar_t* MonitorSerialNumberID = L"serial-number";
const static wchar_t* MonitorNumberID = L"monitor-number";
const static wchar_t* VirtualDesktopID = L"virtual-desktop";
}
}

View File

@@ -83,6 +83,7 @@ namespace JsonUtils
std::wstring monitor = device.GetNamedString(NonLocalizable::AppliedLayoutsIds::MonitorID).c_str();
std::wstring monitorInstance = device.GetNamedString(NonLocalizable::AppliedLayoutsIds::MonitorInstanceID, L"").c_str();
std::wstring monitorSerialNumber = device.GetNamedString(NonLocalizable::AppliedLayoutsIds::MonitorSerialNumberID, L"").c_str();
int monitorNumber = static_cast<int>(device.GetNamedNumber(NonLocalizable::AppliedLayoutsIds::MonitorNumberID, 0));
std::wstring virtualDesktop = device.GetNamedString(NonLocalizable::AppliedLayoutsIds::VirtualDesktopID).c_str();
auto virtualDesktopGuid = FancyZonesUtils::GuidFromString(virtualDesktop);
@@ -101,6 +102,7 @@ namespace JsonUtils
{
deviceId.id = monitor;
deviceId.instanceId = monitorInstance;
deviceId.number = monitorNumber;
}
FancyZonesDataTypes::MonitorId monitorId{
@@ -172,6 +174,7 @@ namespace JsonUtils
device.SetNamedValue(NonLocalizable::AppliedLayoutsIds::MonitorID, json::value(value.workAreaId.monitorId.deviceId.id));
device.SetNamedValue(NonLocalizable::AppliedLayoutsIds::MonitorInstanceID, json::value(value.workAreaId.monitorId.deviceId.instanceId));
device.SetNamedValue(NonLocalizable::AppliedLayoutsIds::MonitorSerialNumberID, json::value(value.workAreaId.monitorId.serialNumber));
device.SetNamedValue(NonLocalizable::AppliedLayoutsIds::MonitorNumberID, json::value(value.workAreaId.monitorId.deviceId.number));
auto virtualDesktopStr = FancyZonesUtils::GuidToString(value.workAreaId.virtualDesktopId);
if (virtualDesktopStr)
@@ -294,17 +297,22 @@ void AppliedLayouts::AdjustWorkAreaIds(const std::vector<FancyZonesDataTypes::Mo
{
bool dirtyFlag = false;
std::vector<std::pair<FancyZonesDataTypes::WorkAreaId, std::wstring>> replaceWithSerialNumber{};
std::vector<std::pair<FancyZonesDataTypes::WorkAreaId, FancyZonesDataTypes::WorkAreaId>> replaceWithSerialNumber{};
for (auto iter = m_layouts.begin(); iter != m_layouts.end(); ++iter)
{
const auto& [id, layout] = *iter;
if (id.monitorId.serialNumber.empty() && !id.monitorId.deviceId.isDefault())
bool serialNumberNotSet = id.monitorId.serialNumber.empty() && !id.monitorId.deviceId.isDefault();
bool monitorNumberNotSet = id.monitorId.deviceId.number == 0;
if (serialNumberNotSet || monitorNumberNotSet)
{
for (const auto& monitorId : ids)
{
if (id.monitorId.deviceId.id == monitorId.deviceId.id && id.monitorId.deviceId.instanceId == monitorId.deviceId.instanceId)
{
replaceWithSerialNumber.push_back({ id, monitorId.serialNumber });
FancyZonesDataTypes::WorkAreaId updatedId = id;
updatedId.monitorId.serialNumber = monitorId.serialNumber;
updatedId.monitorId.deviceId.number = monitorId.deviceId.number;
replaceWithSerialNumber.push_back({ id, updatedId });
dirtyFlag = true;
break;
}
@@ -315,7 +323,7 @@ void AppliedLayouts::AdjustWorkAreaIds(const std::vector<FancyZonesDataTypes::Mo
for (const auto& id : replaceWithSerialNumber)
{
auto mapEntry = m_layouts.extract(id.first);
mapEntry.key().monitorId.serialNumber = id.second;
mapEntry.key().monitorId = id.second.monitorId;
m_layouts.insert(std::move(mapEntry));
}

View File

@@ -20,6 +20,7 @@ namespace NonLocalizable
const static wchar_t* MonitorID = L"monitor";
const static wchar_t* MonitorInstanceID = L"monitor-instance";
const static wchar_t* MonitorSerialNumberID = L"serial-number";
const static wchar_t* MonitorNumberID = L"monitor-number";
const static wchar_t* VirtualDesktopID = L"virtual-desktop";
const static wchar_t* AppliedLayoutID = L"applied-layout";
const static wchar_t* UuidID = L"uuid";