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
|
true
|
||||||
}
|
}
|
||||||
AppListEvent::Remove(top_level) => {
|
AppListEvent::Remove(top_level) => {
|
||||||
|
dbg!(cached_results.len());
|
||||||
if let Some(i) = cached_results.iter().position(|t| t.toplevel_handle == top_level.toplevel_handle) {
|
if let Some(i) = cached_results.iter().position(|t| t.toplevel_handle == top_level.toplevel_handle) {
|
||||||
cached_results.swap_remove(i);
|
cached_results.swap_remove(i);
|
||||||
}
|
}
|
||||||
|
dbg!(cached_results.len());
|
||||||
|
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
AppListEvent::Add(top_level) => {
|
AppListEvent::Add(top_level) => {
|
||||||
|
|
@ -233,6 +236,13 @@ fn main() {
|
||||||
let mut saved_i: u32 = 0;
|
let mut saved_i: u32 = 0;
|
||||||
while let Some(item) = saved_app_model.item(saved_i) {
|
while let Some(item) = saved_app_model.item(saved_i) {
|
||||||
if let Ok(dock_obj) = item.downcast::<DockObject>() {
|
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) =
|
if let Some(cur_app_info) =
|
||||||
dock_obj.property::<Option<DesktopAppInfo>>("appinfo")
|
dock_obj.property::<Option<DesktopAppInfo>>("appinfo")
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -303,7 +303,32 @@ impl Dispatch<ZcosmicToplevelHandleV1, ()> for State {
|
||||||
match event {
|
match event {
|
||||||
zcosmic_toplevel_handle_v1::Event::Closed => {
|
zcosmic_toplevel_handle_v1::Event::Closed => {
|
||||||
if let Some(i) = state.toplevels.iter().position(|t| &t.toplevel_handle == p) {
|
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 => {
|
zcosmic_toplevel_handle_v1::Event::Done => {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue