diff --git a/src/protocols/ForeignToplevel.cpp b/src/protocols/ForeignToplevel.cpp index 95bc7a2e8..22bef314f 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));