diff --git a/Cargo.lock b/Cargo.lock index 7a9d0d0..a4bc1cd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -452,7 +452,7 @@ checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] name = "ranma-cli" -version = "0.1.8" +version = "0.1.9" dependencies = [ "argh", "libc", @@ -462,7 +462,7 @@ dependencies = [ [[package]] name = "ranma-core" -version = "0.1.8" +version = "0.1.9" dependencies = [ "parking_lot", "serde", @@ -737,7 +737,7 @@ dependencies = [ [[package]] name = "uniffi-bindgen" -version = "0.1.8" +version = "0.1.9" dependencies = [ "uniffi", ] diff --git a/crates/ranma-core/src/lib.rs b/crates/ranma-core/src/lib.rs index 414c132..e02b0df 100644 --- a/crates/ranma-core/src/lib.rs +++ b/crates/ranma-core/src/lib.rs @@ -64,10 +64,6 @@ pub fn set_displays(displays: Vec) { .filter(|id| !new_ids.contains(id)) .collect(); - if removed.is_empty() { - return; - } - let new_main = main_display_id(); if new_main == 0 { return; @@ -76,6 +72,7 @@ pub fn set_displays(displays: Vec) { let mut events = Vec::new(); { let mut state = get_state().lock(); + for &old_display in &removed { for node in state.migrate_nodes(old_display, new_main) { events.push(StateChangeEvent::NodeMoved { @@ -85,6 +82,21 @@ pub fn set_displays(displays: Vec) { }); } } + + let non_main: Vec = new_ids + .iter() + .copied() + .filter(|&id| id != new_main) + .collect(); + for display in non_main { + for node in state.migrate_nodes(display, new_main) { + events.push(StateChangeEvent::NodeMoved { + old_display: display, + new_display: new_main, + node, + }); + } + } } for event in events {