fix: handle removed toplevels

This commit is contained in:
Ashley Wulber 2022-07-26 14:15:24 -04:00
parent 0e7baf704b
commit eba19a7482
No known key found for this signature in database
GPG key ID: 5216D4F46A90A820
2 changed files with 36 additions and 1 deletions

View file

@ -191,9 +191,12 @@ fn main() {
true
}
AppListEvent::Remove(top_level) => {
dbg!(cached_results.len());
if let Some(i) = cached_results.iter().position(|t| t.toplevel_handle == top_level.toplevel_handle) {
cached_results.swap_remove(i);
}
dbg!(cached_results.len());
true
}
AppListEvent::Add(top_level) => {
@ -233,6 +236,13 @@ fn main() {
let mut saved_i: u32 = 0;
while let Some(item) = saved_app_model.item(saved_i) {
if let Ok(dock_obj) = item.downcast::<DockObject>() {
// clear active if it has some, they will be updated back if they still exist
let prev_active: BoxedWindowList = dock_obj.property("active");
if !prev_active.0.is_empty() {
dock_obj.set_property("active", BoxedWindowList::default().to_value());
saved_app_model.items_changed(saved_i, 0, 0);
}
if let Some(cur_app_info) =
dock_obj.property::<Option<DesktopAppInfo>>("appinfo")
{

View file

@ -303,7 +303,32 @@ impl Dispatch<ZcosmicToplevelHandleV1, ()> for State {
match event {
zcosmic_toplevel_handle_v1::Event::Closed => {
if let Some(i) = state.toplevels.iter().position(|t| &t.toplevel_handle == p) {
state.toplevels.remove(i);
let removed_toplevel = state.toplevels.remove(i);
if match state.config.filter_top_levels {
Some(TopLevelFilter::ActiveWorkspace) => {
state
.workspace_groups
.iter()
.find(|g| {
g.workspaces
.iter()
.find(|w| {
w.states.contains(
&zcosmic_workspace_handle_v1::State::Active,
) && Some(&w.workspace_handle) == removed_toplevel.workspace.as_ref()
})
.is_some()
})
.is_some()
},
Some(TopLevelFilter::ConfiguredOutput) => {
state.expected_output == removed_toplevel.output
}
_ => true
} {
let tx = TX.get().unwrap().clone();
let _ = tx.send(AppListEvent::Remove(removed_toplevel));
}
}
}
zcosmic_toplevel_handle_v1::Event::Done => {