fix: handle removed toplevels
This commit is contained in:
parent
0e7baf704b
commit
eba19a7482
2 changed files with 36 additions and 1 deletions
|
|
@ -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")
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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 => {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue