mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-07 19:57:07 +02:00
[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:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
@@ -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";
|
||||
|
||||
Reference in New Issue
Block a user