fix: popup cleanup

This commit is contained in:
Ashley Wulber 2026-07-06 18:44:30 -04:00
parent c781ff6199
commit b5b2b2fcc3
2 changed files with 7 additions and 1 deletions

View file

@ -1392,7 +1392,7 @@ impl SctkState {
}, },
}; };
let mut to_destroy = vec![sctk_popup]; let mut to_destroy = vec![sctk_popup];
// TODO optionally destroy parents if they request to be destroyed with children
while let Some(popup_to_destroy_last) = to_destroy.last().and_then(|popup| self while let Some(popup_to_destroy_last) = to_destroy.last().and_then(|popup| self
.popups .popups
.iter() .iter()
@ -1839,6 +1839,7 @@ impl SctkState {
s: &WlSurface, s: &WlSurface,
) { ) {
let existing_blur = self.blur_surfaces.entry(id); let existing_blur = self.blur_surfaces.entry(id);
match (existing_blur, rectangles) { match (existing_blur, rectangles) {
(Entry::Occupied(occupied_entry), None) => { (Entry::Occupied(occupied_entry), None) => {
let blur_surface = occupied_entry.remove(); let blur_surface = occupied_entry.remove();

View file

@ -84,6 +84,11 @@ impl PopupHandler for SctkState {
for popup in to_destroy.into_iter().rev() { for popup in to_destroy.into_iter().rev() {
if let Some(id) = self.id_map.remove(&popup.popup.wl_surface().id()) if let Some(id) = self.id_map.remove(&popup.popup.wl_surface().id())
{ {
if let Some(blurred) = self.blur_surfaces.remove(&id) {
blurred.destroy();
}
_ = self.corner_radii.remove(&id);
_ = self.destroyed.insert(id); _ = self.destroyed.insert(id);
} }