mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-06-07 01:08:18 +08:00
[FancyZones] Keep the same layouts on the new virtual desktops. (#23927)
This commit is contained in:
parent
a6e0396290
commit
c180150d54
@ -716,13 +716,6 @@ void FancyZones::AddWorkArea(HMONITOR monitor, const FancyZonesDataTypes::WorkAr
|
||||
Logger::debug(L"Add new work area on virtual desktop {}", virtualDesktopIdStr.get());
|
||||
}
|
||||
|
||||
FancyZonesDataTypes::WorkAreaId parentId{};
|
||||
auto parentArea = m_workAreaHandler.GetWorkArea(monitor);
|
||||
if (parentArea)
|
||||
{
|
||||
parentId = parentArea->UniqueId();
|
||||
}
|
||||
|
||||
FancyZonesUtils::Rect rect{};
|
||||
if (monitor)
|
||||
{
|
||||
@ -733,7 +726,7 @@ void FancyZones::AddWorkArea(HMONITOR monitor, const FancyZonesDataTypes::WorkAr
|
||||
rect = FancyZonesUtils::GetAllMonitorsCombinedRect<&MONITORINFO::rcWork>();
|
||||
}
|
||||
|
||||
auto workArea = WorkArea::Create(m_hinstance, id, parentId, rect);
|
||||
auto workArea = WorkArea::Create(m_hinstance, id, m_workAreaHandler.GetParent(monitor), rect);
|
||||
if (workArea)
|
||||
{
|
||||
if (updateWindowsPositions)
|
||||
@ -761,6 +754,7 @@ LRESULT CALLBACK FancyZones::s_WndProc(HWND window, UINT message, WPARAM wparam,
|
||||
|
||||
void FancyZones::UpdateWorkAreas(bool updateWindowPositions) noexcept
|
||||
{
|
||||
m_workAreaHandler.SaveParentIds();
|
||||
m_workAreaHandler.Clear();
|
||||
|
||||
if (FancyZonesSettings::settings().spanZonesAcrossMonitors)
|
||||
|
@ -61,6 +61,28 @@ void MonitorWorkAreaMap::AddWorkArea(HMONITOR monitor, std::unique_ptr<WorkArea>
|
||||
m_workAreaMap.insert({ monitor, std::move(workArea) });
|
||||
}
|
||||
|
||||
FancyZonesDataTypes::WorkAreaId MonitorWorkAreaMap::GetParent(HMONITOR monitor) const
|
||||
{
|
||||
if (m_workAreaParents.contains(monitor))
|
||||
{
|
||||
return m_workAreaParents.at(monitor);
|
||||
}
|
||||
|
||||
return FancyZonesDataTypes::WorkAreaId{};
|
||||
}
|
||||
|
||||
void MonitorWorkAreaMap::SaveParentIds()
|
||||
{
|
||||
m_workAreaParents.clear();
|
||||
for (const auto& [monitor, workArea] : m_workAreaMap)
|
||||
{
|
||||
if (workArea)
|
||||
{
|
||||
m_workAreaParents.insert({ monitor, workArea->UniqueId() });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MonitorWorkAreaMap::Clear() noexcept
|
||||
{
|
||||
m_workAreaMap.clear();
|
||||
|
@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "GuidUtils.h"
|
||||
#include <FancyZonesLib/FancyZonesDataTypes.h>
|
||||
|
||||
class WorkArea;
|
||||
|
||||
@ -48,6 +49,13 @@ public:
|
||||
*/
|
||||
void AddWorkArea(HMONITOR monitor, std::unique_ptr<WorkArea> workArea);
|
||||
|
||||
FancyZonesDataTypes::WorkAreaId GetParent(HMONITOR monitor) const;
|
||||
|
||||
/**
|
||||
* Saving current work area IDs as parents for later use.
|
||||
*/
|
||||
void SaveParentIds();
|
||||
|
||||
/**
|
||||
* Clear all persisted work area related data.
|
||||
*/
|
||||
@ -55,4 +63,5 @@ public:
|
||||
|
||||
private:
|
||||
std::unordered_map<HMONITOR, std::unique_ptr<WorkArea>> m_workAreaMap;
|
||||
std::unordered_map<HMONITOR, FancyZonesDataTypes::WorkAreaId> m_workAreaParents{};
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user