summaryrefslogtreecommitdiff
path: root/src/protocols/ForeignToplevel.cpp
diff options
context:
space:
mode:
authorVirt <41426325+VirtCode@users.noreply.github.com>2025-10-15 14:37:39 +0200
committerGitHub <noreply@github.com>2025-10-15 14:37:39 +0200
commitab11af9664a80df70fe3398810b79c4298312a33 (patch)
tree6b4d6177facd5744252ccec0485b1123b8c04e60 /src/protocols/ForeignToplevel.cpp
parente40873be51c2e2cac2f2631105ac0b0b19603b4f (diff)
ext-foreign-toplevel: remove stale entries when remapping (#12037)
Diffstat (limited to 'src/protocols/ForeignToplevel.cpp')
-rw-r--r--src/protocols/ForeignToplevel.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/protocols/ForeignToplevel.cpp b/src/protocols/ForeignToplevel.cpp
index 95bc7a2e..22bef314 100644
--- a/src/protocols/ForeignToplevel.cpp
+++ b/src/protocols/ForeignToplevel.cpp
@@ -45,6 +45,15 @@ void CForeignToplevelList::onMap(PHLWINDOW pWindow) {
if UNLIKELY (m_finished)
return;
+ // check if the window already had a handle in the past
+ const auto OLDHANDLE = handleForWindow(pWindow);
+ if (OLDHANDLE) {
+ if (!OLDHANDLE->m_closed)
+ OLDHANDLE->m_resource->sendClosed();
+
+ std::erase_if(m_handles, [&](const auto& other) { return other.get() == OLDHANDLE.get(); });
+ }
+
const auto NEWHANDLE = PROTO::foreignToplevel->m_handles.emplace_back(
makeShared<CForeignToplevelHandle>(makeShared<CExtForeignToplevelHandleV1>(m_resource->client(), m_resource->version(), 0), pWindow));