From ab11af9664a80df70fe3398810b79c4298312a33 Mon Sep 17 00:00:00 2001 From: Virt <41426325+VirtCode@users.noreply.github.com> Date: Wed, 15 Oct 2025 14:37:39 +0200 Subject: [PATCH] ext-foreign-toplevel: remove stale entries when remapping (#12037) --- src/protocols/ForeignToplevel.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) 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(makeShared(m_resource->client(), m_resource->version(), 0), pWindow));