mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-05 10:46:33 +02:00
[Workspaces] Fix case: monitor not present at launch (#37005)
* [Workspaces] Fix case: monitor not present at launch * Fix DPI multiplicator calculation when monitor not present
This commit is contained in:
@@ -62,11 +62,10 @@ namespace PlacementHelper
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
placement.showCmd = SW_RESTORE;
|
placement.showCmd = SW_RESTORE;
|
||||||
|
|
||||||
ScreenToWorkAreaCoords(window, monitor, rect);
|
|
||||||
placement.rcNormalPosition = rect;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ScreenToWorkAreaCoords(window, monitor, rect);
|
||||||
|
placement.rcNormalPosition = rect;
|
||||||
placement.flags |= WPF_ASYNCWINDOWPLACEMENT;
|
placement.flags |= WPF_ASYNCWINDOWPLACEMENT;
|
||||||
|
|
||||||
auto result = ::SetWindowPlacement(window, &placement);
|
auto result = ::SetWindowPlacement(window, &placement);
|
||||||
@@ -430,9 +429,11 @@ bool WindowArranger::moveWindow(HWND window, const WorkspacesData::WorkspacesPro
|
|||||||
Logger::error(L"No monitor saved for launching the app");
|
Logger::error(L"No monitor saved for launching the app");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
UINT snapDPI = snapMonitorIter->dpi;
|
||||||
|
|
||||||
bool launchMinimized = app.isMinimized;
|
bool launchMinimized = app.isMinimized;
|
||||||
bool launchMaximized = app.isMaximized;
|
bool launchMaximized = app.isMaximized;
|
||||||
|
RECT rect = app.position.toRect();
|
||||||
|
|
||||||
HMONITOR currentMonitor{};
|
HMONITOR currentMonitor{};
|
||||||
UINT currentDpi = DPIAware::DEFAULT_DPI;
|
UINT currentDpi = DPIAware::DEFAULT_DPI;
|
||||||
@@ -446,12 +447,18 @@ bool WindowArranger::moveWindow(HWND window, const WorkspacesData::WorkspacesPro
|
|||||||
{
|
{
|
||||||
currentMonitor = MonitorFromPoint(POINT{ 0, 0 }, MONITOR_DEFAULTTOPRIMARY);
|
currentMonitor = MonitorFromPoint(POINT{ 0, 0 }, MONITOR_DEFAULTTOPRIMARY);
|
||||||
DPIAware::GetScreenDPIForMonitor(currentMonitor, currentDpi);
|
DPIAware::GetScreenDPIForMonitor(currentMonitor, currentDpi);
|
||||||
|
snapDPI = DPIAware::DEFAULT_DPI;
|
||||||
launchMinimized = true;
|
launchMinimized = true;
|
||||||
launchMaximized = false;
|
launchMaximized = false;
|
||||||
|
MONITORINFOEX monitorInfo;
|
||||||
|
monitorInfo.cbSize = sizeof(monitorInfo);
|
||||||
|
if (GetMonitorInfo(currentMonitor, &monitorInfo))
|
||||||
|
{
|
||||||
|
rect = monitorInfo.rcWork;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RECT rect = app.position.toRect();
|
float mult = static_cast<float>(snapDPI) / currentDpi;
|
||||||
float mult = static_cast<float>(snapMonitorIter->dpi) / currentDpi;
|
|
||||||
rect.left = static_cast<long>(std::round(rect.left * mult));
|
rect.left = static_cast<long>(std::round(rect.left * mult));
|
||||||
rect.right = static_cast<long>(std::round(rect.right * mult));
|
rect.right = static_cast<long>(std::round(rect.right * mult));
|
||||||
rect.top = static_cast<long>(std::round(rect.top * mult));
|
rect.top = static_cast<long>(std::round(rect.top * mult));
|
||||||
|
|||||||
Reference in New Issue
Block a user