[FancyZones] Set 3-zones PriorityGrid as default layout (#6248)

* 3-zones Priority Grid as default layout

* Update tests

* Address PR comments
This commit is contained in:
stefansjfw
2020-09-04 16:37:06 +02:00
committed by GitHub
parent 91f0d40d1a
commit 78edaf5edc
3 changed files with 50 additions and 72 deletions

View File

@@ -95,11 +95,28 @@ std::optional<FancyZonesDataTypes::CustomZoneSetData> FancyZonesData::FindCustom
void FancyZonesData::AddDevice(const std::wstring& deviceId) void FancyZonesData::AddDevice(const std::wstring& deviceId)
{ {
using namespace FancyZonesDataTypes;
std::scoped_lock lock{ dataLock }; std::scoped_lock lock{ dataLock };
if (!deviceInfoMap.contains(deviceId)) if (!deviceInfoMap.contains(deviceId))
{ {
// Creates default entry in map when ZoneWindow is created // Creates default entry in map when ZoneWindow is created
deviceInfoMap[deviceId] = FancyZonesDataTypes::DeviceInfoData{ FancyZonesDataTypes::ZoneSetData{ NonLocalizable::NullStr, FancyZonesDataTypes::ZoneSetLayoutType::Blank } }; GUID guid;
auto result{ CoCreateGuid(&guid) };
wil::unique_cotaskmem_string guidString;
if (result == S_OK && SUCCEEDED(StringFromCLSID(guid, &guidString)))
{
constexpr bool defaultShowSpacing{ true };
constexpr int defaultSpacing{ 16 };
constexpr int defaultZoneCount{ 3 };
const ZoneSetData zoneSetData{ guidString.get(), ZoneSetLayoutType::PriorityGrid };
DeviceInfoData defaultDeviceInfoData{ zoneSetData, defaultShowSpacing, defaultSpacing, defaultZoneCount };
deviceInfoMap[deviceId] = std::move(defaultDeviceInfoData);
}
else
{
deviceInfoMap[deviceId] = DeviceInfoData{ ZoneSetData{ NonLocalizable::NullStr, ZoneSetLayoutType::Blank } };
}
} }
} }
@@ -118,11 +135,7 @@ void FancyZonesData::CloneDeviceInfo(const std::wstring& source, const std::wstr
} }
// Clone information from source device if destination device is uninitialized (Blank). // Clone information from source device if destination device is uninitialized (Blank).
auto& destInfo = deviceInfoMap[destination]; deviceInfoMap[destination] = deviceInfoMap[source];
if (destInfo.activeZoneSet.type == FancyZonesDataTypes::ZoneSetLayoutType::Blank)
{
destInfo = deviceInfoMap[source];
}
} }
void FancyZonesData::UpdatePrimaryDesktopData(const std::wstring& desktopId) void FancyZonesData::UpdatePrimaryDesktopData(const std::wstring& desktopId)

View File

@@ -86,6 +86,7 @@ DWORD WINAPI ThreadProc(LPVOID lpParam)
if (RegisterDLLWindowClass((LPCWSTR)creator->getWindowClassName().c_str(), creator) != 0) if (RegisterDLLWindowClass((LPCWSTR)creator->getWindowClassName().c_str(), creator) != 0)
{ {
auto hWnd = CreateWindowEx(0, (LPCWSTR)creator->getWindowClassName().c_str(), (LPCWSTR)creator->getTitle().c_str(), WS_EX_APPWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 10, 10, nullptr, nullptr, creator->getHInstance(), NULL); auto hWnd = CreateWindowEx(0, (LPCWSTR)creator->getWindowClassName().c_str(), (LPCWSTR)creator->getTitle().c_str(), WS_EX_APPWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 10, 10, nullptr, nullptr, creator->getHInstance(), NULL);
SetWindowPos(hWnd, HWND_TOPMOST, 10, 10, 100, 100, SWP_SHOWWINDOW);
creator->setHwnd(hWnd); creator->setHwnd(hWnd);
creator->setCondition(true); creator->setCondition(true);

View File

@@ -116,21 +116,33 @@ namespace FancyZonesUnitTests
{ {
auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false); auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false);
testZoneWindow(zoneWindow); testZoneWindow(zoneWindow);
Assert::IsNull(zoneWindow->ActiveZoneSet());
auto* activeZoneSet{ zoneWindow->ActiveZoneSet() };
Assert::IsNotNull(activeZoneSet);
Assert::AreEqual(static_cast<int>(activeZoneSet->LayoutType()), static_cast<int>(FancyZonesDataTypes::ZoneSetLayoutType::PriorityGrid));
Assert::AreEqual(activeZoneSet->GetZones().size(), static_cast<size_t>(3));
} }
TEST_METHOD(CreateZoneWindowNoHinst) TEST_METHOD(CreateZoneWindowNoHinst)
{ {
auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), {}, m_monitor, m_uniqueId.str(), {}, false); auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), {}, m_monitor, m_uniqueId.str(), {}, false);
testZoneWindow(zoneWindow); testZoneWindow(zoneWindow);
Assert::IsNull(zoneWindow->ActiveZoneSet());
auto* activeZoneSet{ zoneWindow->ActiveZoneSet() };
Assert::IsNotNull(activeZoneSet);
Assert::AreEqual(static_cast<int>(activeZoneSet->LayoutType()), static_cast<int>(FancyZonesDataTypes::ZoneSetLayoutType::PriorityGrid));
Assert::AreEqual(activeZoneSet->GetZones().size(), static_cast<size_t>(3));
} }
TEST_METHOD(CreateZoneWindowNoHinstFlashZones) TEST_METHOD(CreateZoneWindowNoHinstFlashZones)
{ {
auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), {}, m_monitor, m_uniqueId.str(), {}, false); auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), {}, m_monitor, m_uniqueId.str(), {}, false);
testZoneWindow(zoneWindow); testZoneWindow(zoneWindow);
Assert::IsNull(zoneWindow->ActiveZoneSet());
auto* activeZoneSet{ zoneWindow->ActiveZoneSet() };
Assert::IsNotNull(activeZoneSet);
Assert::AreEqual(static_cast<int>(activeZoneSet->LayoutType()), static_cast<int>(FancyZonesDataTypes::ZoneSetLayoutType::PriorityGrid));
Assert::AreEqual(activeZoneSet->GetZones().size(), static_cast<size_t>(3));
} }
TEST_METHOD(CreateZoneWindowNoMonitor) TEST_METHOD(CreateZoneWindowNoMonitor)
@@ -156,7 +168,11 @@ namespace FancyZonesUnitTests
Assert::IsNotNull(zoneWindow.get()); Assert::IsNotNull(zoneWindow.get());
Assert::AreEqual(expectedUniqueId.c_str(), zoneWindow->UniqueId().c_str()); Assert::AreEqual(expectedUniqueId.c_str(), zoneWindow->UniqueId().c_str());
Assert::IsNull(zoneWindow->ActiveZoneSet());
auto* activeZoneSet{ zoneWindow->ActiveZoneSet() };
Assert::IsNotNull(activeZoneSet);
Assert::AreEqual(static_cast<int>(activeZoneSet->LayoutType()), static_cast<int>(FancyZonesDataTypes::ZoneSetLayoutType::PriorityGrid));
Assert::AreEqual(activeZoneSet->GetZones().size(), static_cast<size_t>(3));
} }
TEST_METHOD(CreateZoneWindowNoDesktopId) TEST_METHOD(CreateZoneWindowNoDesktopId)
@@ -168,8 +184,11 @@ namespace FancyZonesUnitTests
const std::wstring expectedWorkArea = std::to_wstring(m_monitorInfo.rcMonitor.right) + L"_" + std::to_wstring(m_monitorInfo.rcMonitor.bottom); const std::wstring expectedWorkArea = std::to_wstring(m_monitorInfo.rcMonitor.right) + L"_" + std::to_wstring(m_monitorInfo.rcMonitor.bottom);
Assert::IsNotNull(zoneWindow.get()); Assert::IsNotNull(zoneWindow.get());
Assert::IsTrue(zoneWindow->UniqueId().empty()); Assert::IsTrue(zoneWindow->UniqueId().empty());
Assert::IsNull(zoneWindow->ActiveZoneSet());
Assert::IsNull(zoneWindow->ActiveZoneSet()); auto* activeZoneSet{ zoneWindow->ActiveZoneSet() };
Assert::IsNotNull(activeZoneSet);
Assert::AreEqual(static_cast<int>(activeZoneSet->LayoutType()), static_cast<int>(FancyZonesDataTypes::ZoneSetLayoutType::PriorityGrid));
Assert::AreEqual(activeZoneSet->GetZones().size(), static_cast<size_t>(3));
} }
TEST_METHOD(CreateZoneWindowWithActiveZoneTmpFile) TEST_METHOD(CreateZoneWindowWithActiveZoneTmpFile)
@@ -401,16 +420,15 @@ namespace FancyZonesUnitTests
// newWorkArea = false - zoneWindow won't be cloned from parent // newWorkArea = false - zoneWindow won't be cloned from parent
auto actualZoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false); auto actualZoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false);
Assert::IsNull(actualZoneWindow->ActiveZoneSet()); Assert::IsNotNull(actualZoneWindow->ActiveZoneSet());
Assert::IsTrue(m_fancyZonesData.GetDeviceInfoMap().contains(m_uniqueId.str())); Assert::IsTrue(m_fancyZonesData.GetDeviceInfoMap().contains(m_uniqueId.str()));
auto currentDeviceInfo = m_fancyZonesData.GetDeviceInfoMap().at(m_uniqueId.str()); auto currentDeviceInfo = m_fancyZonesData.GetDeviceInfoMap().at(m_uniqueId.str());
// default values // default values
Assert::AreEqual(false, currentDeviceInfo.showSpacing); Assert::AreEqual(true, currentDeviceInfo.showSpacing);
Assert::AreEqual(0, currentDeviceInfo.zoneCount); Assert::AreEqual(3, currentDeviceInfo.zoneCount);
Assert::AreEqual(0, currentDeviceInfo.spacing); Assert::AreEqual(16, currentDeviceInfo.spacing);
Assert::AreEqual(std::wstring{ L"null" }, currentDeviceInfo.activeZoneSet.uuid); Assert::AreEqual(static_cast<int>(ZoneSetLayoutType::PriorityGrid), static_cast<int>(currentDeviceInfo.activeZoneSet.type));
Assert::AreEqual(static_cast<int>(ZoneSetLayoutType::Blank), static_cast<int>(currentDeviceInfo.activeZoneSet.type));
} }
}; };
@@ -454,22 +472,6 @@ namespace FancyZonesUnitTests
std::filesystem::remove(m_fancyZonesData.deletedCustomZoneSetsTmpFileName); std::filesystem::remove(m_fancyZonesData.deletedCustomZoneSetsTmpFileName);
} }
void PrepareFZData()
{
const auto activeZoneSetTempPath = m_fancyZonesData.activeZoneSetTmpFileName;
Assert::IsFalse(std::filesystem::exists(activeZoneSetTempPath));
const auto type = FancyZonesDataTypes::ZoneSetLayoutType::Columns;
const auto expectedZoneSet = FancyZonesDataTypes::ZoneSetData{ Helpers::CreateGuidString(), type };
const auto data = FancyZonesDataTypes::DeviceInfoData{ expectedZoneSet, true, 16, 3 };
const auto deviceInfo = JSONHelpers::DeviceInfoJSON{ m_uniqueId.str(), data };
const auto json = JSONHelpers::DeviceInfoJSON::ToJson(deviceInfo);
json::to_file(activeZoneSetTempPath, json);
Assert::IsTrue(std::filesystem::exists(activeZoneSetTempPath));
m_fancyZonesData.ParseDeviceInfoFromTmpFile(activeZoneSetTempPath);
}
public: public:
TEST_METHOD(MoveSizeEnter) TEST_METHOD(MoveSizeEnter)
{ {
@@ -525,7 +527,6 @@ namespace FancyZonesUnitTests
TEST_METHOD(MoveSizeEnd) TEST_METHOD(MoveSizeEnd)
{ {
PrepareFZData();
auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false); auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false);
const auto window = Mocks::Window(); const auto window = Mocks::Window();
@@ -543,7 +544,6 @@ namespace FancyZonesUnitTests
TEST_METHOD(MoveSizeEndWindowNotAdded) TEST_METHOD(MoveSizeEndWindowNotAdded)
{ {
PrepareFZData();
auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false); auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false);
const auto window = Mocks::Window(); const auto window = Mocks::Window();
@@ -583,7 +583,6 @@ namespace FancyZonesUnitTests
TEST_METHOD(MoveSizeEndInvalidPoint) TEST_METHOD(MoveSizeEndInvalidPoint)
{ {
PrepareFZData();
auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false); auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false);
const auto window = Mocks::Window(); const auto window = Mocks::Window();
@@ -599,17 +598,8 @@ namespace FancyZonesUnitTests
Assert::IsFalse(std::vector<size_t>{} == actualZoneIndex); // with invalid point zone remains the same Assert::IsFalse(std::vector<size_t>{} == actualZoneIndex); // with invalid point zone remains the same
} }
TEST_METHOD(MoveWindowIntoZoneByIndexNoActiveZoneSet)
{
auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false);
Assert::IsNull(zoneWindow->ActiveZoneSet());
zoneWindow->MoveWindowIntoZoneByIndex(Mocks::Window(), 0);
}
TEST_METHOD(MoveWindowIntoZoneByIndex) TEST_METHOD(MoveWindowIntoZoneByIndex)
{ {
PrepareFZData();
auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false); auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false);
Assert::IsNotNull(zoneWindow->ActiveZoneSet()); Assert::IsNotNull(zoneWindow->ActiveZoneSet());
@@ -618,17 +608,8 @@ namespace FancyZonesUnitTests
const auto actual = zoneWindow->ActiveZoneSet(); const auto actual = zoneWindow->ActiveZoneSet();
} }
TEST_METHOD(MoveWindowIntoZoneByDirectionNoActiveZoneSet)
{
auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false);
Assert::IsNull(zoneWindow->ActiveZoneSet());
zoneWindow->MoveWindowIntoZoneByIndex(Mocks::Window(), 0);
}
TEST_METHOD(MoveWindowIntoZoneByDirectionAndIndex) TEST_METHOD(MoveWindowIntoZoneByDirectionAndIndex)
{ {
PrepareFZData();
auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false); auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false);
Assert::IsNotNull(zoneWindow->ActiveZoneSet()); Assert::IsNotNull(zoneWindow->ActiveZoneSet());
@@ -644,7 +625,6 @@ namespace FancyZonesUnitTests
TEST_METHOD(MoveWindowIntoZoneByDirectionManyTimes) TEST_METHOD(MoveWindowIntoZoneByDirectionManyTimes)
{ {
PrepareFZData();
auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false); auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false);
Assert::IsNotNull(zoneWindow->ActiveZoneSet()); Assert::IsNotNull(zoneWindow->ActiveZoneSet());
@@ -660,20 +640,8 @@ namespace FancyZonesUnitTests
Assert::IsTrue(std::vector<size_t>{ 2 } == appHistoryArray[0].zoneIndexSet); Assert::IsTrue(std::vector<size_t>{ 2 } == appHistoryArray[0].zoneIndexSet);
} }
TEST_METHOD(SaveWindowProcessToZoneIndexNoActiveZoneSet)
{
auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false);
Assert::IsNull(zoneWindow->ActiveZoneSet());
zoneWindow->SaveWindowProcessToZoneIndex(Mocks::Window());
const auto actualAppZoneHistory = m_fancyZonesData.GetAppZoneHistoryMap();
Assert::IsTrue(actualAppZoneHistory.empty());
}
TEST_METHOD(SaveWindowProcessToZoneIndexNullptrWindow) TEST_METHOD(SaveWindowProcessToZoneIndexNullptrWindow)
{ {
PrepareFZData();
auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false); auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false);
Assert::IsNotNull(zoneWindow->ActiveZoneSet()); Assert::IsNotNull(zoneWindow->ActiveZoneSet());
@@ -685,7 +653,6 @@ namespace FancyZonesUnitTests
TEST_METHOD(SaveWindowProcessToZoneIndexNoWindowAdded) TEST_METHOD(SaveWindowProcessToZoneIndexNoWindowAdded)
{ {
PrepareFZData();
auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false); auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false);
Assert::IsNotNull(zoneWindow->ActiveZoneSet()); Assert::IsNotNull(zoneWindow->ActiveZoneSet());
@@ -701,7 +668,6 @@ namespace FancyZonesUnitTests
TEST_METHOD(SaveWindowProcessToZoneIndexNoWindowAddedWithFilledAppZoneHistory) TEST_METHOD(SaveWindowProcessToZoneIndexNoWindowAddedWithFilledAppZoneHistory)
{ {
PrepareFZData();
auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false); auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false);
Assert::IsNotNull(zoneWindow->ActiveZoneSet()); Assert::IsNotNull(zoneWindow->ActiveZoneSet());
@@ -730,7 +696,6 @@ namespace FancyZonesUnitTests
TEST_METHOD(SaveWindowProcessToZoneIndexWindowAdded) TEST_METHOD(SaveWindowProcessToZoneIndexWindowAdded)
{ {
PrepareFZData();
auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false); auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false);
Assert::IsNotNull(zoneWindow->ActiveZoneSet()); Assert::IsNotNull(zoneWindow->ActiveZoneSet());
@@ -761,7 +726,6 @@ namespace FancyZonesUnitTests
TEST_METHOD(WhenWindowIsNotResizablePlacingItIntoTheZoneShouldNotResizeIt) TEST_METHOD(WhenWindowIsNotResizablePlacingItIntoTheZoneShouldNotResizeIt)
{ {
PrepareFZData();
auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false); auto zoneWindow = MakeZoneWindow(winrt::make_self<MockZoneWindowHost>().get(), m_hInst, m_monitor, m_uniqueId.str(), {}, false);
Assert::IsNotNull(zoneWindow->ActiveZoneSet()); Assert::IsNotNull(zoneWindow->ActiveZoneSet());