[AlwaysOnTop] Fix: Border stays after moving window to another desktop (#20006)

This commit is contained in:
Seraphima Zykova
2022-09-07 17:24:35 +02:00
committed by GitHub
parent e33e23909f
commit 7f8c5c9f0c
2 changed files with 13 additions and 13 deletions

View File

@@ -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;
}
} }
} }
} }

View File

@@ -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;