mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-06-11 03:32:46 +08:00
Fancy zones: show active layouts on all monitors (#1553)
Added option to show fancy zones on all monitors with layouts simultaneously Co-authored-by: Ivan Stošić <ivan100sic@gmail.com>
This commit is contained in:
parent
0ac6c01d65
commit
0af6348913
@ -883,11 +883,30 @@ void FancyZones::MoveSizeStartInternal(HWND window, HMONITOR monitor, POINT cons
|
|||||||
{
|
{
|
||||||
m_zoneWindowMoveSize = iter->second;
|
m_zoneWindowMoveSize = iter->second;
|
||||||
m_zoneWindowMoveSize->MoveSizeEnter(window, m_dragEnabled);
|
m_zoneWindowMoveSize->MoveSizeEnter(window, m_dragEnabled);
|
||||||
|
if (m_settings->GetSettings().showZonesOnAllMonitors)
|
||||||
|
{
|
||||||
|
for (auto [keyMonitor, zoneWindow] : m_zoneWindowMap)
|
||||||
|
{
|
||||||
|
// Skip calling ShowZoneWindow for iter->second (m_zoneWindowMoveSize) since it
|
||||||
|
// was already called in MoveSizeEnter
|
||||||
|
const bool moveSizeEnterCalled = zoneWindow == m_zoneWindowMoveSize;
|
||||||
|
if (zoneWindow && !moveSizeEnterCalled)
|
||||||
|
{
|
||||||
|
zoneWindow->ShowZoneWindow();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (m_zoneWindowMoveSize)
|
else if (m_zoneWindowMoveSize)
|
||||||
{
|
{
|
||||||
m_zoneWindowMoveSize->MoveSizeCancel();
|
|
||||||
m_zoneWindowMoveSize = nullptr;
|
m_zoneWindowMoveSize = nullptr;
|
||||||
|
for (auto [keyMonitor, zoneWindow] : m_zoneWindowMap)
|
||||||
|
{
|
||||||
|
if (zoneWindow)
|
||||||
|
{
|
||||||
|
zoneWindow->HideZoneWindow();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -924,6 +943,15 @@ void FancyZones::MoveSizeEndInternal(HWND window, POINT const& ptScreen, require
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Also, hide all windows (regardless of settings)
|
||||||
|
for (auto [keyMonitor, zoneWindow] : m_zoneWindowMap)
|
||||||
|
{
|
||||||
|
if (zoneWindow)
|
||||||
|
{
|
||||||
|
zoneWindow->HideZoneWindow();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FancyZones::MoveSizeUpdateInternal(HMONITOR monitor, POINT const& ptScreen, require_write_lock writeLock) noexcept
|
void FancyZones::MoveSizeUpdateInternal(HMONITOR monitor, POINT const& ptScreen, require_write_lock writeLock) noexcept
|
||||||
@ -938,9 +966,15 @@ void FancyZones::MoveSizeUpdateInternal(HMONITOR monitor, POINT const& ptScreen,
|
|||||||
// Update the ZoneWindow already handling move/size
|
// Update the ZoneWindow already handling move/size
|
||||||
if (!m_dragEnabled)
|
if (!m_dragEnabled)
|
||||||
{
|
{
|
||||||
// Drag got disabled, tell it to cancel and clear out m_zoneWindowMoveSize
|
// Drag got disabled, tell it to cancel and hide all windows
|
||||||
auto zoneWindow = std::move(m_zoneWindowMoveSize);
|
m_zoneWindowMoveSize = nullptr;
|
||||||
zoneWindow->MoveSizeCancel();
|
for (auto [keyMonitor, zoneWindow] : m_zoneWindowMap)
|
||||||
|
{
|
||||||
|
if (zoneWindow)
|
||||||
|
{
|
||||||
|
zoneWindow->HideZoneWindow();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -951,7 +985,11 @@ void FancyZones::MoveSizeUpdateInternal(HMONITOR monitor, POINT const& ptScreen,
|
|||||||
{
|
{
|
||||||
// The drag has moved to a different monitor.
|
// The drag has moved to a different monitor.
|
||||||
auto const isDragEnabled = m_zoneWindowMoveSize->IsDragEnabled();
|
auto const isDragEnabled = m_zoneWindowMoveSize->IsDragEnabled();
|
||||||
m_zoneWindowMoveSize->MoveSizeCancel();
|
// only hide if the option to show all zones is off
|
||||||
|
if (!m_settings->GetSettings().showZonesOnAllMonitors)
|
||||||
|
{
|
||||||
|
m_zoneWindowMoveSize->HideZoneWindow();
|
||||||
|
}
|
||||||
m_zoneWindowMoveSize = iter->second;
|
m_zoneWindowMoveSize = iter->second;
|
||||||
m_zoneWindowMoveSize->MoveSizeEnter(m_windowMoveSize, isDragEnabled);
|
m_zoneWindowMoveSize->MoveSizeEnter(m_windowMoveSize, isDragEnabled);
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@ private:
|
|||||||
PCWSTR name;
|
PCWSTR name;
|
||||||
bool* value;
|
bool* value;
|
||||||
int resourceId;
|
int resourceId;
|
||||||
} m_configBools[8] = {
|
} m_configBools[9] = {
|
||||||
{ L"fancyzones_shiftDrag", &m_settings.shiftDrag, IDS_SETTING_DESCRIPTION_SHIFTDRAG },
|
{ L"fancyzones_shiftDrag", &m_settings.shiftDrag, IDS_SETTING_DESCRIPTION_SHIFTDRAG },
|
||||||
{ L"fancyzones_overrideSnapHotkeys", &m_settings.overrideSnapHotkeys, IDS_SETTING_DESCRIPTION_OVERRIDE_SNAP_HOTKEYS },
|
{ L"fancyzones_overrideSnapHotkeys", &m_settings.overrideSnapHotkeys, IDS_SETTING_DESCRIPTION_OVERRIDE_SNAP_HOTKEYS },
|
||||||
{ L"fancyzones_zoneSetChange_flashZones", &m_settings.zoneSetChange_flashZones, IDS_SETTING_DESCRIPTION_ZONESETCHANGE_FLASHZONES },
|
{ L"fancyzones_zoneSetChange_flashZones", &m_settings.zoneSetChange_flashZones, IDS_SETTING_DESCRIPTION_ZONESETCHANGE_FLASHZONES },
|
||||||
@ -45,6 +45,7 @@ private:
|
|||||||
{ L"fancyzones_virtualDesktopChange_moveWindows", &m_settings.virtualDesktopChange_moveWindows, IDS_SETTING_DESCRIPTION_VIRTUALDESKTOPCHANGE_MOVEWINDOWS },
|
{ L"fancyzones_virtualDesktopChange_moveWindows", &m_settings.virtualDesktopChange_moveWindows, IDS_SETTING_DESCRIPTION_VIRTUALDESKTOPCHANGE_MOVEWINDOWS },
|
||||||
{ L"fancyzones_appLastZone_moveWindows", &m_settings.appLastZone_moveWindows, IDS_SETTING_DESCRIPTION_APPLASTZONE_MOVEWINDOWS },
|
{ L"fancyzones_appLastZone_moveWindows", &m_settings.appLastZone_moveWindows, IDS_SETTING_DESCRIPTION_APPLASTZONE_MOVEWINDOWS },
|
||||||
{ L"use_cursorpos_editor_startupscreen", &m_settings.use_cursorpos_editor_startupscreen, IDS_SETTING_DESCRIPTION_USE_CURSORPOS_EDITOR_STARTUPSCREEN },
|
{ L"use_cursorpos_editor_startupscreen", &m_settings.use_cursorpos_editor_startupscreen, IDS_SETTING_DESCRIPTION_USE_CURSORPOS_EDITOR_STARTUPSCREEN },
|
||||||
|
{ L"fancyzones_show_on_all_monitors", &m_settings.showZonesOnAllMonitors, IDS_SETTING_DESCRIPTION_SHOW_FANCY_ZONES_ON_ALL_MONITORS},
|
||||||
};
|
};
|
||||||
|
|
||||||
const std::wstring m_zoneHiglightName = L"fancyzones_zoneHighlightColor";
|
const std::wstring m_zoneHiglightName = L"fancyzones_zoneHighlightColor";
|
||||||
|
@ -14,6 +14,7 @@ struct Settings
|
|||||||
bool overrideSnapHotkeys = false;
|
bool overrideSnapHotkeys = false;
|
||||||
bool appLastZone_moveWindows = false;
|
bool appLastZone_moveWindows = false;
|
||||||
bool use_cursorpos_editor_startupscreen = true;
|
bool use_cursorpos_editor_startupscreen = true;
|
||||||
|
bool showZonesOnAllMonitors = false;
|
||||||
std::wstring zoneHightlightColor = L"#0078D7";
|
std::wstring zoneHightlightColor = L"#0078D7";
|
||||||
int zoneHighlightOpacity = 90;
|
int zoneHighlightOpacity = 90;
|
||||||
PowerToysSettings::HotkeyObject editorHotkey = PowerToysSettings::HotkeyObject::from_settings(true, false, false, false, VK_OEM_3);
|
PowerToysSettings::HotkeyObject editorHotkey = PowerToysSettings::HotkeyObject::from_settings(true, false, false, false, VK_OEM_3);
|
||||||
|
@ -279,7 +279,6 @@ public:
|
|||||||
IFACEMETHODIMP MoveSizeEnter(HWND window, bool dragEnabled) noexcept;
|
IFACEMETHODIMP MoveSizeEnter(HWND window, bool dragEnabled) noexcept;
|
||||||
IFACEMETHODIMP MoveSizeUpdate(POINT const& ptScreen, bool dragEnabled) noexcept;
|
IFACEMETHODIMP MoveSizeUpdate(POINT const& ptScreen, bool dragEnabled) noexcept;
|
||||||
IFACEMETHODIMP MoveSizeEnd(HWND window, POINT const& ptScreen) noexcept;
|
IFACEMETHODIMP MoveSizeEnd(HWND window, POINT const& ptScreen) noexcept;
|
||||||
IFACEMETHODIMP MoveSizeCancel() noexcept;
|
|
||||||
IFACEMETHODIMP_(bool)
|
IFACEMETHODIMP_(bool)
|
||||||
IsDragEnabled() noexcept { return m_dragEnabled; }
|
IsDragEnabled() noexcept { return m_dragEnabled; }
|
||||||
IFACEMETHODIMP_(void)
|
IFACEMETHODIMP_(void)
|
||||||
@ -296,13 +295,16 @@ public:
|
|||||||
SaveWindowProcessToZoneIndex(HWND window) noexcept;
|
SaveWindowProcessToZoneIndex(HWND window) noexcept;
|
||||||
IFACEMETHODIMP_(IZoneSet*)
|
IFACEMETHODIMP_(IZoneSet*)
|
||||||
ActiveZoneSet() noexcept { return m_activeZoneSet.get(); }
|
ActiveZoneSet() noexcept { return m_activeZoneSet.get(); }
|
||||||
|
IFACEMETHODIMP_(void)
|
||||||
|
ShowZoneWindow() noexcept;
|
||||||
|
IFACEMETHODIMP_(void)
|
||||||
|
HideZoneWindow() noexcept;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
static LRESULT CALLBACK s_WndProc(HWND window, UINT message, WPARAM wparam, LPARAM lparam) noexcept;
|
static LRESULT CALLBACK s_WndProc(HWND window, UINT message, WPARAM wparam, LPARAM lparam) noexcept;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void ShowZoneWindow() noexcept;
|
|
||||||
void HideZoneWindow() noexcept;
|
|
||||||
void LoadSettings() noexcept;
|
void LoadSettings() noexcept;
|
||||||
void InitializeZoneSets(MONITORINFO const& mi) noexcept;
|
void InitializeZoneSets(MONITORINFO const& mi) noexcept;
|
||||||
void CalculateZoneSet() noexcept;
|
void CalculateZoneSet() noexcept;
|
||||||
@ -455,12 +457,6 @@ IFACEMETHODIMP ZoneWindow::MoveSizeEnd(HWND window, POINT const& ptScreen) noexc
|
|||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
IFACEMETHODIMP ZoneWindow::MoveSizeCancel() noexcept
|
|
||||||
{
|
|
||||||
HideZoneWindow();
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
IFACEMETHODIMP_(void)
|
IFACEMETHODIMP_(void)
|
||||||
ZoneWindow::MoveWindowIntoZoneByIndex(HWND window, int index) noexcept
|
ZoneWindow::MoveWindowIntoZoneByIndex(HWND window, int index) noexcept
|
||||||
{
|
{
|
||||||
@ -514,8 +510,8 @@ ZoneWindow::SaveWindowProcessToZoneIndex(HWND window) noexcept
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma region private
|
IFACEMETHODIMP_(void)
|
||||||
void ZoneWindow::ShowZoneWindow() noexcept
|
ZoneWindow::ShowZoneWindow() noexcept
|
||||||
{
|
{
|
||||||
if (m_window)
|
if (m_window)
|
||||||
{
|
{
|
||||||
@ -536,7 +532,8 @@ void ZoneWindow::ShowZoneWindow() noexcept
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZoneWindow::HideZoneWindow() noexcept
|
IFACEMETHODIMP_(void)
|
||||||
|
ZoneWindow::HideZoneWindow() noexcept
|
||||||
{
|
{
|
||||||
if (m_window)
|
if (m_window)
|
||||||
{
|
{
|
||||||
@ -548,6 +545,8 @@ void ZoneWindow::HideZoneWindow() noexcept
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma region private
|
||||||
|
|
||||||
void ZoneWindow::LoadSettings() noexcept
|
void ZoneWindow::LoadSettings() noexcept
|
||||||
{
|
{
|
||||||
JSONHelpers::FancyZonesDataInstance().AddDevice(m_uniqueId);
|
JSONHelpers::FancyZonesDataInstance().AddDevice(m_uniqueId);
|
||||||
|
@ -41,10 +41,6 @@ interface __declspec(uuid("{7F017528-8110-4FB3-BE41-F472969C2560}")) IZoneWindow
|
|||||||
* @param ptScreen Cursor coordinates where window is droped.
|
* @param ptScreen Cursor coordinates where window is droped.
|
||||||
*/
|
*/
|
||||||
IFACEMETHOD(MoveSizeEnd)(HWND window, POINT const& ptScreen) = 0;
|
IFACEMETHOD(MoveSizeEnd)(HWND window, POINT const& ptScreen) = 0;
|
||||||
/**
|
|
||||||
* Abort tracking down of window position and giving zone layout hints (if dragging functionality is enabled).
|
|
||||||
*/
|
|
||||||
IFACEMETHOD(MoveSizeCancel)() = 0;
|
|
||||||
/**
|
/**
|
||||||
* @returns Boolean indicating is giving hints about active zone layout enabled. Hints are
|
* @returns Boolean indicating is giving hints about active zone layout enabled. Hints are
|
||||||
* given while dragging window while holding SHIFT key.
|
* given while dragging window while holding SHIFT key.
|
||||||
@ -89,6 +85,8 @@ interface __declspec(uuid("{7F017528-8110-4FB3-BE41-F472969C2560}")) IZoneWindow
|
|||||||
* @returns Active zone layout for this work area.
|
* @returns Active zone layout for this work area.
|
||||||
*/
|
*/
|
||||||
IFACEMETHOD_(IZoneSet*, ActiveZoneSet)() = 0;
|
IFACEMETHOD_(IZoneSet*, ActiveZoneSet)() = 0;
|
||||||
|
IFACEMETHOD_(void, ShowZoneWindow)() = 0;
|
||||||
|
IFACEMETHOD_(void, HideZoneWindow)() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
winrt::com_ptr<IZoneWindow> MakeZoneWindow(IZoneWindowHost* host, HINSTANCE hinstance, HMONITOR monitor,
|
winrt::com_ptr<IZoneWindow> MakeZoneWindow(IZoneWindowHost* host, HINSTANCE hinstance, HMONITOR monitor,
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
|