diff options
| author | Virt <41426325+VirtCode@users.noreply.github.com> | 2025-10-15 14:37:39 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-15 14:37:39 +0200 |
| commit | ab11af9664a80df70fe3398810b79c4298312a33 (patch) | |
| tree | 6b4d6177facd5744252ccec0485b1123b8c04e60 /src/protocols/ForeignToplevel.cpp | |
| parent | e40873be51c2e2cac2f2631105ac0b0b19603b4f (diff) | |
ext-foreign-toplevel: remove stale entries when remapping (#12037)
Diffstat (limited to 'src/protocols/ForeignToplevel.cpp')
| -rw-r--r-- | src/protocols/ForeignToplevel.cpp | 9 |
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)); |
