Skip to content

Commit

Permalink
[FancyZones] Snap out of maximized window into zones with win + left/…
Browse files Browse the repository at this point in the history
…right arrow (#3097)

* Snap out of maximized window into zones with win + left/right arrow.

* Determine if there is anything to process before swallowing keypress.
  • Loading branch information
vldmr11080 committed May 25, 2020
1 parent c923e96 commit 7870a66
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 1 deletion.
21 changes: 20 additions & 1 deletion src/modules/fancyzones/lib/FancyZones.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,7 @@ struct FancyZones : public winrt::implements<FancyZones, IFancyZones, IFancyZone
bool IsNewWorkArea(GUID virtualDesktopId, HMONITOR monitor) noexcept;

void OnEditorExitEvent() noexcept;
bool ProcessSnapHotkey() noexcept;

std::vector<std::pair<HMONITOR, RECT>> GetRawMonitorData() noexcept;
std::vector<HMONITOR> GetMonitorsSorted() noexcept;
Expand Down Expand Up @@ -397,7 +398,7 @@ FancyZones::OnKeyDown(PKBDLLHOOKSTRUCT info) noexcept
}
else if ((info->vkCode == VK_RIGHT) || (info->vkCode == VK_LEFT))
{
if (m_settings->GetSettings()->overrideSnapHotkeys)
if (ProcessSnapHotkey())
{
Trace::FancyZones::OnKeyDown(info->vkCode, win, ctrl, false /*inMoveSize*/);
// Win+Left, Win+Right will cycle through Zones in the active ZoneSet when WM_PRIV_LOWLEVELKB's handled
Expand Down Expand Up @@ -948,6 +949,24 @@ void FancyZones::OnEditorExitEvent() noexcept
}
}

bool FancyZones::ProcessSnapHotkey() noexcept
{
if (m_settings->GetSettings()->overrideSnapHotkeys)
{
const HMONITOR monitor = MonitorFromWindow(GetForegroundWindow(), MONITOR_DEFAULTTONULL);
if (monitor)
{
auto zoneWindow = m_zoneWindowMap.find(monitor);
if (zoneWindow != m_zoneWindowMap.end() &&
zoneWindow->second->ActiveZoneSet())
{
return true;
}
}
}
return false;
}

std::vector<HMONITOR> FancyZones::GetMonitorsSorted() noexcept
{
std::shared_lock readLock(m_lock);
Expand Down
7 changes: 7 additions & 0 deletions src/modules/fancyzones/lib/util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,13 @@ void SizeWindowToRect(HWND window, RECT rect) noexcept
placement.showCmd = SW_RESTORE | SW_SHOWNA;
}

// Remove maximized show command to make sure window is moved to the correct zone.
if (placement.showCmd & SW_SHOWMAXIMIZED)
{
placement.showCmd = SW_RESTORE;
placement.flags &= ~WPF_RESTORETOMAXIMIZED;
}

placement.rcNormalPosition = rect;
placement.flags |= WPF_ASYNCWINDOWPLACEMENT;

Expand Down

0 comments on commit 7870a66

Please sign in to comment.