[FancyZones] "Match not found" error fix (#11840)

This commit is contained in:
Seraphima Zykova
2021-06-23 18:28:23 +03:00
committed by GitHub
parent eeea6b3bae
commit 2dc82f31b3
10 changed files with 92 additions and 178 deletions

View File

@@ -6,6 +6,7 @@
#include "Settings.h"
#include "CallTracer.h"
#include <common/Display/dpi_aware.h>
#include <common/utils/json.h>
#include <FancyZonesLib/util.h>
@@ -584,7 +585,7 @@ void FancyZonesData::SaveAppZoneHistory() const
JSONHelpers::SaveAppZoneHistory(appZoneHistoryFileName, appZoneHistoryMap);
}
void FancyZonesData::SaveFancyZonesEditorParameters(bool spanZonesAcrossMonitors, const std::wstring& virtualDesktopId, const HMONITOR& targetMonitor) const
void FancyZonesData::SaveFancyZonesEditorParameters(bool spanZonesAcrossMonitors, const std::wstring& virtualDesktopId, const HMONITOR& targetMonitor, const std::vector<std::pair<HMONITOR, MONITORINFOEX>>& allMonitors) const
{
JSONHelpers::EditorArgs argsJson; /* json arguments */
argsJson.processId = GetCurrentProcessId(); /* Process id */
@@ -599,6 +600,8 @@ void FancyZonesData::SaveFancyZonesEditorParameters(bool spanZonesAcrossMonitors
monitorJson.id = monitorId;
monitorJson.top = monitorRect.top;
monitorJson.left = monitorRect.left;
monitorJson.width = monitorRect.right - monitorRect.left;
monitorJson.height = monitorRect.bottom - monitorRect.top;
monitorJson.isSelected = true;
monitorJson.dpi = 0; // unused
@@ -606,9 +609,6 @@ void FancyZonesData::SaveFancyZonesEditorParameters(bool spanZonesAcrossMonitors
}
else
{
std::vector<std::pair<HMONITOR, MONITORINFOEX>> allMonitors;
allMonitors = FancyZonesUtils::GetAllMonitorInfo<&MONITORINFOEX::rcWork>();
// device id map for correct device ids
std::unordered_map<std::wstring, DWORD> displayDeviceIdxMap;
@@ -629,16 +629,18 @@ void FancyZonesData::SaveFancyZonesEditorParameters(bool spanZonesAcrossMonitors
monitorJson.id = monitorId; /* Monitor id */
UINT dpiX = 0;
UINT dpiY = 0;
if (GetDpiForMonitor(monitor, MDT_EFFECTIVE_DPI, &dpiX, &dpiY) == S_OK)
UINT dpi = 0;
if (DPIAware::GetScreenDPIForMonitor(monitor, dpi) != S_OK)
{
monitorJson.dpi = dpiX; /* DPI */
continue;
}
monitorJson.top = monitorInfo.rcMonitor.top; /* Top coordinate */
monitorJson.left = monitorInfo.rcMonitor.left; /* Left coordinate */
monitorJson.dpi = dpi; /* DPI */
monitorJson.top = monitorInfo.rcWork.top; /* Top coordinate */
monitorJson.left = monitorInfo.rcWork.left; /* Left coordinate */
monitorJson.width = monitorInfo.rcWork.right - monitorInfo.rcWork.left; /* Width */
monitorJson.height = monitorInfo.rcWork.bottom - monitorInfo.rcWork.top; /* Height */
argsJson.monitors.emplace_back(std::move(monitorJson)); /* add monitor data */
}
}