mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-08 20:27:36 +02:00
[AlwaysOnTop] Fix: Border stays after moving window to another desktop (#20006)
This commit is contained in:
@@ -317,7 +317,7 @@ void AlwaysOnTop::SubscribeToEvents()
|
|||||||
EVENT_SYSTEM_MINIMIZESTART,
|
EVENT_SYSTEM_MINIMIZESTART,
|
||||||
EVENT_SYSTEM_MINIMIZEEND,
|
EVENT_SYSTEM_MINIMIZEEND,
|
||||||
EVENT_SYSTEM_MOVESIZEEND,
|
EVENT_SYSTEM_MOVESIZEEND,
|
||||||
EVENT_OBJECT_NAMECHANGE,
|
EVENT_SYSTEM_FOREGROUND,
|
||||||
EVENT_OBJECT_DESTROY
|
EVENT_OBJECT_DESTROY
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -479,14 +479,9 @@ void AlwaysOnTop::HandleWinHookEvent(WinHookEvent* data) noexcept
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EVENT_OBJECT_NAMECHANGE:
|
case EVENT_SYSTEM_FOREGROUND:
|
||||||
{
|
{
|
||||||
// The accessibility name of the desktop window changes whenever the user
|
RefreshBorders();
|
||||||
// switches virtual desktops.
|
|
||||||
if (data->hwnd == GetDesktopWindow())
|
|
||||||
{
|
|
||||||
VirtualDesktopSwitchedHandle();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -494,17 +489,23 @@ void AlwaysOnTop::HandleWinHookEvent(WinHookEvent* data) noexcept
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AlwaysOnTop::VirtualDesktopSwitchedHandle()
|
void AlwaysOnTop::RefreshBorders()
|
||||||
{
|
{
|
||||||
for (const auto& [window, border] : m_topmostWindows)
|
for (const auto& [window, border] : m_topmostWindows)
|
||||||
{
|
{
|
||||||
if (m_virtualDesktopUtils.IsWindowOnCurrentDesktop(window))
|
if (m_virtualDesktopUtils.IsWindowOnCurrentDesktop(window))
|
||||||
{
|
{
|
||||||
AssignBorder(window);
|
if (!border)
|
||||||
|
{
|
||||||
|
AssignBorder(window);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_topmostWindows[window] = nullptr;
|
if (border)
|
||||||
|
{
|
||||||
|
m_topmostWindows[window] = nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -65,8 +65,6 @@ private:
|
|||||||
void UnpinAll();
|
void UnpinAll();
|
||||||
void CleanUp();
|
void CleanUp();
|
||||||
|
|
||||||
void VirtualDesktopSwitchedHandle();
|
|
||||||
|
|
||||||
bool IsTracked(HWND window) const noexcept;
|
bool IsTracked(HWND window) const noexcept;
|
||||||
bool IsTopmost(HWND window) const noexcept;
|
bool IsTopmost(HWND window) const noexcept;
|
||||||
bool IsPinned(HWND window) const noexcept;
|
bool IsPinned(HWND window) const noexcept;
|
||||||
@@ -74,6 +72,7 @@ private:
|
|||||||
bool PinTopmostWindow(HWND window) const noexcept;
|
bool PinTopmostWindow(HWND window) const noexcept;
|
||||||
bool UnpinTopmostWindow(HWND window) const noexcept;
|
bool UnpinTopmostWindow(HWND window) const noexcept;
|
||||||
bool AssignBorder(HWND window);
|
bool AssignBorder(HWND window);
|
||||||
|
void RefreshBorders();
|
||||||
|
|
||||||
virtual void SettingsUpdate(SettingId type) override;
|
virtual void SettingsUpdate(SettingId type) override;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user