[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_MINIMIZEEND,
EVENT_SYSTEM_MOVESIZEEND,
EVENT_OBJECT_NAMECHANGE,
EVENT_SYSTEM_FOREGROUND,
EVENT_OBJECT_DESTROY
};
@@ -479,14 +479,9 @@ void AlwaysOnTop::HandleWinHookEvent(WinHookEvent* data) noexcept
}
}
break;
case EVENT_OBJECT_NAMECHANGE:
case EVENT_SYSTEM_FOREGROUND:
{
// The accessibility name of the desktop window changes whenever the user
// switches virtual desktops.
if (data->hwnd == GetDesktopWindow())
{
VirtualDesktopSwitchedHandle();
}
RefreshBorders();
}
break;
default:
@@ -494,17 +489,23 @@ void AlwaysOnTop::HandleWinHookEvent(WinHookEvent* data) noexcept
}
}
void AlwaysOnTop::VirtualDesktopSwitchedHandle()
void AlwaysOnTop::RefreshBorders()
{
for (const auto& [window, border] : m_topmostWindows)
{
if (m_virtualDesktopUtils.IsWindowOnCurrentDesktop(window))
{
AssignBorder(window);
if (!border)
{
AssignBorder(window);
}
}
else
{
m_topmostWindows[window] = nullptr;
if (border)
{
m_topmostWindows[window] = nullptr;
}
}
}
}

View File

@@ -65,8 +65,6 @@ private:
void UnpinAll();
void CleanUp();
void VirtualDesktopSwitchedHandle();
bool IsTracked(HWND window) const noexcept;
bool IsTopmost(HWND window) const noexcept;
bool IsPinned(HWND window) const noexcept;
@@ -74,6 +72,7 @@ private:
bool PinTopmostWindow(HWND window) const noexcept;
bool UnpinTopmostWindow(HWND window) const noexcept;
bool AssignBorder(HWND window);
void RefreshBorders();
virtual void SettingsUpdate(SettingId type) override;