mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-06 03:07:04 +02:00
[FancyZones] Customize default layouts (#21156)
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
#include <FancyZonesLib/FancyZonesData/AppliedLayouts.h>
|
||||
#include <FancyZonesLib/FancyZonesData/AppZoneHistory.h>
|
||||
#include <FancyZonesLib/FancyZonesData/CustomLayouts.h>
|
||||
#include <FancyZonesLib/FancyZonesData/DefaultLayouts.h>
|
||||
#include <FancyZonesLib/FancyZonesData/LayoutHotkeys.h>
|
||||
#include <FancyZonesLib/FancyZonesData/LayoutTemplates.h>
|
||||
#include <FancyZonesLib/FancyZonesWindowProcessing.h>
|
||||
@@ -73,6 +74,7 @@ public:
|
||||
LayoutHotkeys::instance().LoadData();
|
||||
AppliedLayouts::instance().LoadData();
|
||||
AppZoneHistory::instance().LoadData();
|
||||
DefaultLayouts::instance().LoadData();
|
||||
}
|
||||
|
||||
// IFancyZones
|
||||
@@ -662,6 +664,10 @@ LRESULT FancyZones::WndProc(HWND window, UINT message, WPARAM wparam, LPARAM lpa
|
||||
AppliedLayouts::instance().LoadData();
|
||||
UpdateZoneSets();
|
||||
}
|
||||
else if (message == WM_PRIV_DEFAULT_LAYOUTS_FILE_UPDATE)
|
||||
{
|
||||
DefaultLayouts::instance().LoadData();
|
||||
}
|
||||
else if (message == WM_PRIV_QUICK_LAYOUT_KEY)
|
||||
{
|
||||
ApplyQuickLayout(static_cast<int>(lparam));
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
|
||||
#include <FancyZonesLib/GuidUtils.h>
|
||||
#include <FancyZonesLib/FancyZonesData/CustomLayouts.h>
|
||||
#include <FancyZonesLib/FancyZonesData/DefaultLayouts.h>
|
||||
#include <FancyZonesLib/FancyZonesData/LayoutDefaults.h>
|
||||
#include <FancyZonesLib/FancyZonesWinHookEventIDs.h>
|
||||
#include <FancyZonesLib/JsonHelpers.h>
|
||||
@@ -73,7 +74,7 @@ namespace JsonUtils
|
||||
struct AppliedLayoutsJSON
|
||||
{
|
||||
private:
|
||||
static std::optional<FancyZonesDataTypes::WorkAreaId> WorkAreaIdFromJson(const json::JsonObject& json)
|
||||
static std::pair<std::optional<FancyZonesDataTypes::WorkAreaId>, bool> WorkAreaIdFromJson(const json::JsonObject& json)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -89,7 +90,7 @@ namespace JsonUtils
|
||||
auto virtualDesktopGuid = FancyZonesUtils::GuidFromString(virtualDesktop);
|
||||
if (!virtualDesktopGuid)
|
||||
{
|
||||
return std::nullopt;
|
||||
return { std::nullopt, false };
|
||||
}
|
||||
|
||||
FancyZonesDataTypes::DeviceId deviceId{};
|
||||
@@ -104,16 +105,17 @@ namespace JsonUtils
|
||||
deviceId.instanceId = monitorInstance;
|
||||
deviceId.number = monitorNumber;
|
||||
}
|
||||
|
||||
|
||||
FancyZonesDataTypes::MonitorId monitorId{
|
||||
.deviceId = deviceId,
|
||||
.serialNumber = monitorSerialNumber
|
||||
};
|
||||
|
||||
return FancyZonesDataTypes::WorkAreaId{
|
||||
.monitorId = monitorId,
|
||||
.virtualDesktopId = virtualDesktopGuid.value(),
|
||||
};
|
||||
return { FancyZonesDataTypes::WorkAreaId{
|
||||
.monitorId = monitorId,
|
||||
.virtualDesktopId = virtualDesktopGuid.value(),
|
||||
},
|
||||
false };
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -121,24 +123,26 @@ namespace JsonUtils
|
||||
auto bcDeviceId = BackwardsCompatibility::DeviceIdData::ParseDeviceId(deviceIdStr);
|
||||
if (!bcDeviceId)
|
||||
{
|
||||
return std::nullopt;
|
||||
return { std::nullopt, false };
|
||||
}
|
||||
|
||||
return FancyZonesDataTypes::WorkAreaId{
|
||||
.monitorId = { .deviceId = MonitorUtils::Display::ConvertObsoleteDeviceId(bcDeviceId->deviceName) },
|
||||
.virtualDesktopId = bcDeviceId->virtualDesktopId,
|
||||
};
|
||||
return { FancyZonesDataTypes::WorkAreaId{
|
||||
.monitorId = { .deviceId = MonitorUtils::Display::ConvertObsoleteDeviceId(bcDeviceId->deviceName) },
|
||||
.virtualDesktopId = bcDeviceId->virtualDesktopId,
|
||||
},
|
||||
true };
|
||||
}
|
||||
}
|
||||
catch (const winrt::hresult_error&)
|
||||
{
|
||||
return std::nullopt;
|
||||
return { std::nullopt, false };
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
FancyZonesDataTypes::WorkAreaId workAreaId;
|
||||
Layout data{};
|
||||
bool hasResolutionInId = false;
|
||||
|
||||
static std::optional<AppliedLayoutsJSON> FromJson(const json::JsonObject& json)
|
||||
{
|
||||
@@ -147,7 +151,7 @@ namespace JsonUtils
|
||||
AppliedLayoutsJSON result;
|
||||
|
||||
auto deviceIdOpt = WorkAreaIdFromJson(json);
|
||||
if (!deviceIdOpt.has_value())
|
||||
if (!deviceIdOpt.first.has_value())
|
||||
{
|
||||
return std::nullopt;
|
||||
}
|
||||
@@ -158,8 +162,10 @@ namespace JsonUtils
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
result.workAreaId = std::move(deviceIdOpt.value());
|
||||
result.workAreaId = std::move(deviceIdOpt.first.value());
|
||||
result.data = std::move(layout.value());
|
||||
result.hasResolutionInId = deviceIdOpt.second;
|
||||
|
||||
return result;
|
||||
}
|
||||
catch (const winrt::hresult_error&)
|
||||
@@ -200,8 +206,13 @@ namespace JsonUtils
|
||||
if (auto obj = AppliedLayoutsJSON::FromJson(layouts.GetObjectAt(i)); obj.has_value())
|
||||
{
|
||||
// skip default layouts in case if they were applied to different resolutions on the same monitor.
|
||||
// NOTE: keep the default layout check for users who update PT version from the v0.57
|
||||
if (!map.contains(obj->workAreaId) && !isLayoutDefault(obj->data))
|
||||
// NOTE: keep the default layout check for users who update PT version from the v0.57
|
||||
if (obj->hasResolutionInId && isLayoutDefault(obj->data))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!map.contains(obj->workAreaId))
|
||||
{
|
||||
map[obj->workAreaId] = std::move(obj->data);
|
||||
}
|
||||
@@ -456,16 +467,8 @@ bool AppliedLayouts::ApplyDefaultLayout(const FancyZonesDataTypes::WorkAreaId& d
|
||||
return false;
|
||||
}
|
||||
|
||||
Layout layout{
|
||||
.uuid = guid,
|
||||
.type = FancyZonesDataTypes::ZoneSetLayoutType::PriorityGrid,
|
||||
.showSpacing = DefaultValues::ShowSpacing,
|
||||
.spacing = DefaultValues::Spacing,
|
||||
.zoneCount = DefaultValues::ZoneCount,
|
||||
.sensitivityRadius = DefaultValues::SensitivityRadius
|
||||
};
|
||||
|
||||
m_layouts[deviceId] = std::move(layout);
|
||||
// TODO: vertical or horizontal
|
||||
m_layouts[deviceId] = DefaultLayouts::instance().GetDefaultLayout();
|
||||
|
||||
// Saving default layout data doesn't make sense, since it's ignored on parsing.
|
||||
// Given that default layouts are ignored when parsing,
|
||||
|
||||
@@ -227,11 +227,7 @@ std::optional<Layout> CustomLayouts::GetLayout(const GUID& id) const noexcept
|
||||
FancyZonesDataTypes::CustomLayoutData customLayout = iter->second;
|
||||
Layout layout{
|
||||
.uuid = id,
|
||||
.type = FancyZonesDataTypes::ZoneSetLayoutType::Custom,
|
||||
.showSpacing = DefaultValues::ShowSpacing,
|
||||
.spacing = DefaultValues::Spacing,
|
||||
.zoneCount = DefaultValues::ZoneCount,
|
||||
.sensitivityRadius = DefaultValues::SensitivityRadius
|
||||
.type = FancyZonesDataTypes::ZoneSetLayoutType::Custom
|
||||
};
|
||||
|
||||
if (customLayout.type == FancyZonesDataTypes::CustomLayoutType::Grid)
|
||||
|
||||
@@ -0,0 +1,175 @@
|
||||
#include "../pch.h"
|
||||
#include "DefaultLayouts.h"
|
||||
|
||||
#include <FancyZonesLib/FancyZonesData/LayoutDefaults.h>
|
||||
#include <FancyZonesLib/FancyZonesWinHookEventIDs.h>
|
||||
#include <FancyZonesLib/util.h>
|
||||
|
||||
#include <common/logger/logger.h>
|
||||
|
||||
namespace DefaultLayoutsJsonUtils
|
||||
{
|
||||
MonitorConfiguraionType TypeFromString(const std::wstring& data)
|
||||
{
|
||||
if (data == L"vertical")
|
||||
{
|
||||
return MonitorConfiguraionType::Vertical;
|
||||
}
|
||||
|
||||
return MonitorConfiguraionType::Horizontal;
|
||||
}
|
||||
|
||||
std::wstring TypeToString(MonitorConfiguraionType type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case MonitorConfiguraionType::Horizontal:
|
||||
return L"horizontal";
|
||||
case MonitorConfiguraionType::Vertical:
|
||||
return L"vertical";
|
||||
default:
|
||||
return L"horizontal";
|
||||
}
|
||||
}
|
||||
|
||||
struct LayoutJSON
|
||||
{
|
||||
static std::optional<Layout> FromJson(const json::JsonObject& json)
|
||||
{
|
||||
try
|
||||
{
|
||||
Layout data{};
|
||||
auto idStr = json.GetNamedString(NonLocalizable::DefaultLayoutsIds::UuidID, L"");
|
||||
if (!idStr.empty())
|
||||
{
|
||||
auto id = FancyZonesUtils::GuidFromString(idStr.c_str());
|
||||
if (!id.has_value())
|
||||
{
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
data.uuid = id.value();
|
||||
}
|
||||
|
||||
data.type = FancyZonesDataTypes::TypeFromString(std::wstring{ json.GetNamedString(NonLocalizable::DefaultLayoutsIds::TypeID) });
|
||||
data.showSpacing = json.GetNamedBoolean(NonLocalizable::DefaultLayoutsIds::ShowSpacingID, DefaultValues::ShowSpacing);
|
||||
data.spacing = static_cast<int>(json.GetNamedNumber(NonLocalizable::DefaultLayoutsIds::SpacingID, DefaultValues::Spacing));
|
||||
data.zoneCount = static_cast<int>(json.GetNamedNumber(NonLocalizable::DefaultLayoutsIds::ZoneCountID, DefaultValues::ZoneCount));
|
||||
data.sensitivityRadius = static_cast<int>(json.GetNamedNumber(NonLocalizable::DefaultLayoutsIds::SensitivityRadiusID, DefaultValues::SensitivityRadius));
|
||||
|
||||
return data;
|
||||
}
|
||||
catch (const winrt::hresult_error&)
|
||||
{
|
||||
return std::nullopt;
|
||||
}
|
||||
}
|
||||
|
||||
static json::JsonObject ToJson(const Layout& data)
|
||||
{
|
||||
json::JsonObject result{};
|
||||
result.SetNamedValue(NonLocalizable::DefaultLayoutsIds::UuidID, json::value(FancyZonesUtils::GuidToString(data.uuid).value()));
|
||||
result.SetNamedValue(NonLocalizable::DefaultLayoutsIds::TypeID, json::value(FancyZonesDataTypes::TypeToString(data.type)));
|
||||
result.SetNamedValue(NonLocalizable::DefaultLayoutsIds::ShowSpacingID, json::value(data.showSpacing));
|
||||
result.SetNamedValue(NonLocalizable::DefaultLayoutsIds::SpacingID, json::value(data.spacing));
|
||||
result.SetNamedValue(NonLocalizable::DefaultLayoutsIds::ZoneCountID, json::value(data.zoneCount));
|
||||
result.SetNamedValue(NonLocalizable::DefaultLayoutsIds::SensitivityRadiusID, json::value(data.sensitivityRadius));
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
struct DefaultLayoutJSON
|
||||
{
|
||||
MonitorConfiguraionType monitorConfigurationType{ MonitorConfiguraionType::Horizontal };
|
||||
Layout layout{};
|
||||
|
||||
static std::optional<DefaultLayoutJSON> FromJson(const json::JsonObject& json)
|
||||
{
|
||||
try
|
||||
{
|
||||
DefaultLayoutJSON result;
|
||||
|
||||
auto type = TypeFromString(std::wstring{ json.GetNamedString(NonLocalizable::DefaultLayoutsIds::MonitorConfigurationTypeID) });
|
||||
auto layout = DefaultLayoutsJsonUtils::LayoutJSON::FromJson(json.GetNamedObject(NonLocalizable::DefaultLayoutsIds::LayoutID));
|
||||
if (!layout.has_value())
|
||||
{
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
result.monitorConfigurationType = std::move(type);
|
||||
result.layout = std::move(layout.value());
|
||||
|
||||
return result;
|
||||
}
|
||||
catch (const winrt::hresult_error&)
|
||||
{
|
||||
return std::nullopt;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
DefaultLayouts::TDefaultLayoutsContainer ParseJson(const json::JsonObject& json)
|
||||
{
|
||||
DefaultLayouts::TDefaultLayoutsContainer map{};
|
||||
auto layouts = json.GetNamedArray(NonLocalizable::DefaultLayoutsIds::DefaultLayoutsArrayID);
|
||||
|
||||
for (uint32_t i = 0; i < layouts.Size(); ++i)
|
||||
{
|
||||
if (auto obj = DefaultLayoutJSON::FromJson(layouts.GetObjectAt(i)); obj.has_value())
|
||||
{
|
||||
map[static_cast<MonitorConfiguraionType>(obj->monitorConfigurationType)] = std::move(obj->layout);
|
||||
}
|
||||
}
|
||||
|
||||
return std::move(map);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DefaultLayouts::DefaultLayouts()
|
||||
{
|
||||
const std::wstring& dataFileName = DefaultLayoutsFileName();
|
||||
m_fileWatcher = std::make_unique<FileWatcher>(dataFileName, [&]() {
|
||||
PostMessageW(HWND_BROADCAST, WM_PRIV_DEFAULT_LAYOUTS_FILE_UPDATE, NULL, NULL);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
DefaultLayouts& DefaultLayouts::instance()
|
||||
{
|
||||
static DefaultLayouts self;
|
||||
return self;
|
||||
}
|
||||
|
||||
void DefaultLayouts::LoadData()
|
||||
{
|
||||
auto data = json::from_file(DefaultLayoutsFileName());
|
||||
|
||||
try
|
||||
{
|
||||
if (data)
|
||||
{
|
||||
m_layouts = DefaultLayoutsJsonUtils::ParseJson(data.value());
|
||||
}
|
||||
else
|
||||
{
|
||||
m_layouts.clear();
|
||||
Logger::info(L"default-layouts.json file is missing or malformed");
|
||||
}
|
||||
}
|
||||
catch (const winrt::hresult_error& e)
|
||||
{
|
||||
Logger::error(L"Parsing default-layouts error: {}", e.message());
|
||||
}
|
||||
}
|
||||
|
||||
Layout DefaultLayouts::GetDefaultLayout(MonitorConfiguraionType type) const noexcept
|
||||
{
|
||||
auto iter = m_layouts.find(type);
|
||||
if (iter != m_layouts.end())
|
||||
{
|
||||
return iter->second;
|
||||
}
|
||||
|
||||
return Layout{};
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
#pragma once
|
||||
|
||||
#include <FancyZonesLib/FancyZonesData/Layout.h>
|
||||
#include <FancyZonesLib/ModuleConstants.h>
|
||||
|
||||
#include <common/SettingsAPI/FileWatcher.h>
|
||||
#include <common/SettingsAPI/settings_helpers.h>
|
||||
|
||||
namespace NonLocalizable
|
||||
{
|
||||
namespace DefaultLayoutsIds
|
||||
{
|
||||
const static wchar_t* DefaultLayoutsArrayID = L"default-layouts";
|
||||
const static wchar_t* MonitorConfigurationTypeID = L"monitor-configuration";
|
||||
const static wchar_t* LayoutID = L"layout";
|
||||
const static wchar_t* UuidID = L"uuid";
|
||||
const static wchar_t* TypeID = L"type";
|
||||
const static wchar_t* ShowSpacingID = L"show-spacing";
|
||||
const static wchar_t* SpacingID = L"spacing";
|
||||
const static wchar_t* ZoneCountID = L"zone-count";
|
||||
const static wchar_t* SensitivityRadiusID = L"sensitivity-radius";
|
||||
}
|
||||
}
|
||||
|
||||
enum class MonitorConfiguraionType
|
||||
{
|
||||
Horizontal = 0,
|
||||
Vertical
|
||||
};
|
||||
|
||||
class DefaultLayouts
|
||||
{
|
||||
public:
|
||||
using TDefaultLayoutsContainer = std::map<MonitorConfiguraionType, Layout>;
|
||||
|
||||
static DefaultLayouts& instance();
|
||||
|
||||
inline static std::wstring DefaultLayoutsFileName()
|
||||
{
|
||||
std::wstring saveFolderPath = PTSettingsHelper::get_module_save_folder_location(NonLocalizable::ModuleKey);
|
||||
#if defined(UNIT_TESTS)
|
||||
return saveFolderPath + L"\\test-default-layouts.json";
|
||||
#endif
|
||||
return saveFolderPath + L"\\default-layouts.json";
|
||||
}
|
||||
|
||||
void LoadData();
|
||||
|
||||
Layout GetDefaultLayout(MonitorConfiguraionType type = MonitorConfiguraionType::Horizontal) const noexcept;
|
||||
|
||||
private:
|
||||
DefaultLayouts();
|
||||
~DefaultLayouts() = default;
|
||||
|
||||
TDefaultLayoutsContainer m_layouts;
|
||||
std::unique_ptr<FileWatcher> m_fileWatcher;
|
||||
};
|
||||
@@ -2,14 +2,25 @@
|
||||
|
||||
#include <guiddef.h>
|
||||
|
||||
#include <FancyZonesLib/FancyZonesData/LayoutDefaults.h>
|
||||
#include <FancyZonesLib/FancyZonesDataTypes.h>
|
||||
|
||||
struct Layout
|
||||
{
|
||||
GUID uuid;
|
||||
FancyZonesDataTypes::ZoneSetLayoutType type;
|
||||
bool showSpacing;
|
||||
int spacing;
|
||||
int zoneCount;
|
||||
int sensitivityRadius;
|
||||
};
|
||||
GUID uuid = GUID_NULL;
|
||||
FancyZonesDataTypes::ZoneSetLayoutType type = FancyZonesDataTypes::ZoneSetLayoutType::PriorityGrid;
|
||||
bool showSpacing = DefaultValues::ShowSpacing;
|
||||
int spacing = DefaultValues::Spacing;
|
||||
int zoneCount = DefaultValues::ZoneCount;
|
||||
int sensitivityRadius = DefaultValues::SensitivityRadius;
|
||||
};
|
||||
|
||||
inline bool operator==(const Layout& lhs, const Layout& rhs)
|
||||
{
|
||||
return lhs.uuid == rhs.uuid &&
|
||||
lhs.type == rhs.type &&
|
||||
lhs.showSpacing == rhs.showSpacing &&
|
||||
lhs.spacing == rhs.spacing &&
|
||||
lhs.zoneCount == rhs.zoneCount &&
|
||||
lhs.sensitivityRadius == rhs.sensitivityRadius;
|
||||
}
|
||||
@@ -41,6 +41,7 @@
|
||||
<ClInclude Include="FancyZonesData\AppZoneHistory.h" />
|
||||
<ClInclude Include="FancyZones.h" />
|
||||
<ClInclude Include="FancyZonesDataTypes.h" />
|
||||
<ClInclude Include="FancyZonesData\DefaultLayouts.h" />
|
||||
<ClInclude Include="FancyZonesData\Layout.h" />
|
||||
<ClInclude Include="FancyZonesData\LayoutDefaults.h" />
|
||||
<ClInclude Include="FancyZonesData\LayoutTemplates.h" />
|
||||
@@ -90,6 +91,9 @@
|
||||
<ClCompile Include="FancyZonesData\AppliedLayouts.cpp">
|
||||
<PrecompiledHeaderFile>../pch.h</PrecompiledHeaderFile>
|
||||
</ClCompile>
|
||||
<ClCompile Include="FancyZonesData\DefaultLayouts.cpp">
|
||||
<PrecompiledHeaderFile>../pch.h</PrecompiledHeaderFile>
|
||||
</ClCompile>
|
||||
<ClCompile Include="FancyZonesData\LayoutTemplates.cpp">
|
||||
<PrecompiledHeaderFile>../pch.h</PrecompiledHeaderFile>
|
||||
</ClCompile>
|
||||
|
||||
@@ -16,6 +16,12 @@
|
||||
<Filter Include="Generated Files">
|
||||
<UniqueIdentifier>{093625ff-2415-4c2c-842c-0ee7fcb1d203}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Header Files\FancyZonesData">
|
||||
<UniqueIdentifier>{dcbd2932-a3b2-400a-ad0d-6315f9795b13}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\FancyZonesData">
|
||||
<UniqueIdentifier>{5b35a312-b878-49e9-92c0-e098c2b97deb}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="pch.h">
|
||||
@@ -90,30 +96,9 @@
|
||||
<ClInclude Include="GuidUtils.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FancyZonesData\AppZoneHistory.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FancyZonesData\AppliedLayouts.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FancyZonesData\CustomLayouts.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FancyZonesData\LayoutHotkeys.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="ModuleConstants.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FancyZonesData\LayoutTemplates.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FancyZonesData\LayoutDefaults.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FancyZonesData\Layout.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="ZoneIndexSetBitmask.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
@@ -132,6 +117,30 @@
|
||||
<ClInclude Include="FancyZonesWindowProcessing.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FancyZonesData\AppliedLayouts.h">
|
||||
<Filter>Header Files\FancyZonesData</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FancyZonesData\AppZoneHistory.h">
|
||||
<Filter>Header Files\FancyZonesData</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FancyZonesData\CustomLayouts.h">
|
||||
<Filter>Header Files\FancyZonesData</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FancyZonesData\DefaultLayouts.h">
|
||||
<Filter>Header Files\FancyZonesData</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FancyZonesData\Layout.h">
|
||||
<Filter>Header Files\FancyZonesData</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FancyZonesData\LayoutDefaults.h">
|
||||
<Filter>Header Files\FancyZonesData</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FancyZonesData\LayoutHotkeys.h">
|
||||
<Filter>Header Files\FancyZonesData</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FancyZonesData\LayoutTemplates.h">
|
||||
<Filter>Header Files\FancyZonesData</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="EditorParameters.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
@@ -194,21 +203,6 @@
|
||||
<ClCompile Include="MonitorUtils.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="FancyZonesData\CustomLayouts.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="FancyZonesData\LayoutHotkeys.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="FancyZonesData\AppZoneHistory.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="FancyZonesData\AppliedLayouts.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="FancyZonesData\LayoutTemplates.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="FancyZonesWindowProperties.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
@@ -224,6 +218,24 @@
|
||||
<ClCompile Include="EditorParameters.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="FancyZonesData\AppliedLayouts.cpp">
|
||||
<Filter>Source Files\FancyZonesData</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="FancyZonesData\AppZoneHistory.cpp">
|
||||
<Filter>Source Files\FancyZonesData</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="FancyZonesData\CustomLayouts.cpp">
|
||||
<Filter>Source Files\FancyZonesData</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="FancyZonesData\DefaultLayouts.cpp">
|
||||
<Filter>Source Files\FancyZonesData</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="FancyZonesData\LayoutHotkeys.cpp">
|
||||
<Filter>Source Files\FancyZonesData</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="FancyZonesData\LayoutTemplates.cpp">
|
||||
<Filter>Source Files\FancyZonesData</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
|
||||
@@ -15,6 +15,7 @@ UINT WM_PRIV_LAYOUT_HOTKEYS_FILE_UPDATE;
|
||||
UINT WM_PRIV_LAYOUT_TEMPLATES_FILE_UPDATE;
|
||||
UINT WM_PRIV_CUSTOM_LAYOUTS_FILE_UPDATE;
|
||||
UINT WM_PRIV_APPLIED_LAYOUTS_FILE_UPDATE;
|
||||
UINT WM_PRIV_DEFAULT_LAYOUTS_FILE_UPDATE;
|
||||
UINT WM_PRIV_SNAP_HOTKEY;
|
||||
UINT WM_PRIV_QUICK_LAYOUT_KEY;
|
||||
UINT WM_PRIV_SETTINGS_CHANGED;
|
||||
@@ -37,6 +38,7 @@ void InitializeWinhookEventIds()
|
||||
WM_PRIV_LAYOUT_TEMPLATES_FILE_UPDATE = RegisterWindowMessage(L"{4686f019-5d3d-4c5c-9051-b7cbbccca77d}");
|
||||
WM_PRIV_CUSTOM_LAYOUTS_FILE_UPDATE = RegisterWindowMessage(L"{0972787e-cdab-4e16-b228-91acdc38f40f}");
|
||||
WM_PRIV_APPLIED_LAYOUTS_FILE_UPDATE = RegisterWindowMessage(L"{2ef2c8a7-e0d5-4f31-9ede-52aade2d284d}");
|
||||
WM_PRIV_DEFAULT_LAYOUTS_FILE_UPDATE = RegisterWindowMessage(L"{61fd2afb-e909-41b2-b6f3-b9f546f2ae3f}");
|
||||
WM_PRIV_SNAP_HOTKEY = RegisterWindowMessage(L"{72f4fd8e-23f1-43ab-bbbc-029363df9a84}");
|
||||
WM_PRIV_QUICK_LAYOUT_KEY = RegisterWindowMessage(L"{15baab3d-c67b-4a15-aFF0-13610e05e947}");
|
||||
WM_PRIV_SETTINGS_CHANGED = RegisterWindowMessage(L"{89ca3Daa-bf2d-4e73-9f3f-c60716364e27}");
|
||||
|
||||
@@ -13,6 +13,7 @@ extern UINT WM_PRIV_LAYOUT_HOTKEYS_FILE_UPDATE; // Scheduled when the watched la
|
||||
extern UINT WM_PRIV_LAYOUT_TEMPLATES_FILE_UPDATE; // Scheduled when the watched layout-templates.json file is updated
|
||||
extern UINT WM_PRIV_CUSTOM_LAYOUTS_FILE_UPDATE; // Scheduled when the watched custom-layouts.json file is updated
|
||||
extern UINT WM_PRIV_APPLIED_LAYOUTS_FILE_UPDATE; // Scheduled when the watched applied-layouts.json file is updated
|
||||
extern UINT WM_PRIV_DEFAULT_LAYOUTS_FILE_UPDATE; // Scheduled when the watched default-layouts.json file is updated
|
||||
extern UINT WM_PRIV_SNAP_HOTKEY; // Scheduled when we receive a snap hotkey key down press
|
||||
extern UINT WM_PRIV_QUICK_LAYOUT_KEY; // Scheduled when we receive a key down press to quickly apply a layout
|
||||
extern UINT WM_PRIV_SETTINGS_CHANGED; // Scheduled when the a watched settings file is updated
|
||||
|
||||
Reference in New Issue
Block a user