From 29e2c982d49a78ecfa37595c115b18dcc9ba2579 Mon Sep 17 00:00:00 2001
From: vldmr11080 <57061786+vldmr11080@users.noreply.github.com>
Date: Mon, 20 Jul 2020 11:55:19 +0200
Subject: [PATCH] Handle desktop switch and open on active monitor
functionality (#5065)
---
.../Strings/en-us/Resources.resw | 2 +-
src/modules/fancyzones/lib/FancyZones.cpp | 7 +++++++
src/modules/fancyzones/lib/fancyzones.rc | 2 +-
3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/src/core/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw b/src/core/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw
index 4c4bb4f4f..3d3e242ad 100644
--- a/src/core/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw
+++ b/src/core/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw
@@ -334,7 +334,7 @@
Move newly created windows to their last known zone
- Move newly created windows to the current active monitor
+ Move newly created windows to the current active monitor [EXPERIMENTAL]
Follow mouse cursor instead of focus when launching editor in a multi screen environment
diff --git a/src/modules/fancyzones/lib/FancyZones.cpp b/src/modules/fancyzones/lib/FancyZones.cpp
index 5c90b6516..b25ffe804 100644
--- a/src/modules/fancyzones/lib/FancyZones.cpp
+++ b/src/modules/fancyzones/lib/FancyZones.cpp
@@ -499,6 +499,13 @@ IFACEMETHODIMP_(void)
FancyZones::WindowCreated(HWND window) noexcept
{
std::shared_lock readLock(m_lock);
+ GUID desktopId{};
+ if (VirtualDesktopUtils::GetWindowDesktopId(window, &desktopId) && desktopId != m_currentDesktopId)
+ {
+ // Switch between virtual desktops results with posting same windows messages that also indicate
+ // creation of new window. We need to check if window being processed is on currently active desktop.
+ return;
+ }
const bool moveToAppLastZone = m_settings->GetSettings()->appLastZone_moveWindows;
const bool openOnActiveMonitor = m_settings->GetSettings()->openWindowOnActiveMonitor;
if ((moveToAppLastZone || openOnActiveMonitor) && ShouldProcessNewWindow(window))
diff --git a/src/modules/fancyzones/lib/fancyzones.rc b/src/modules/fancyzones/lib/fancyzones.rc
index ddbe6097a..dc144ca5c 100644
--- a/src/modules/fancyzones/lib/fancyzones.rc
+++ b/src/modules/fancyzones/lib/fancyzones.rc
@@ -19,7 +19,7 @@ BEGIN
IDS_SETTING_DESCRIPTION_ZONEHIGHLIGHTCOLOR "Zone highlight color (Default #008CFF)"
IDS_SETTING_DESCRIPTION_USE_CURSORPOS_EDITOR_STARTUPSCREEN "Follow mouse cursor instead of focus when launching editor in a multi screen environment"
IDS_SETTING_DESCRIPTION_APPLASTZONE_MOVEWINDOWS "Move newly created windows to their last known zone"
- IDS_SETTING_DESCRIPTION_OPEN_WINDOW_ON_ACTIVE_MONITOR "Move newly created windows to the current active monitor"
+ IDS_SETTING_DESCRIPTION_OPEN_WINDOW_ON_ACTIVE_MONITOR "Move newly created windows to the current active monitor [EXPERIMENTAL]"
IDS_SETTING_DESCRIPTION_RESTORESIZE "Restore the original size of windows when unsnapping"
IDS_SETTING_LAUNCH_EDITOR_LABEL "Zone configuration"
IDS_SETTING_LAUNCH_EDITOR_BUTTON "Edit zones"