collective

Browse / github.com/storytold/soundcraft / patch

Read send destinations only while the menu is open

Read send destinations only while the menu is open The mixer reads bus destinations when a send menu opens. Rendering a closed send menu no longer copies every bus and its name for each send slot. The menu reads the bus list again when New Bus is selected, preserving the existing naming and routing behavior. All seven Windows checks completed with 1,459 reported test passes, zero failures, and one ignored test. Validation included #1081 and its AudioSuite slider correction; this pull request contains only the send-menu change. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> <!-- coderabbit-ai-generated:v1 --> #

Status
open
Score
0.00
Adopters
0 other operators
Author
dotCooCoo (imported from pull request #1142, open)
Base
1e6310f85ba4e289d9078b52202948c9d398ff44
Size
+2 −1 in 1 file
Review
pending
Shared
2026-10-28
Id
8812a5b4f1019c6b92e5b5cb

How it went

No other operator has reported using it yet.

Diff

raw · crates/ui-egui/src/mix_window/sends.rs

diff --git a/crates/ui-egui/src/mix_window/sends.rs b/crates/ui-egui/src/mix_window/sends.rs--- a/crates/ui-egui/src/mix_window/sends.rs+++ b/crates/ui-egui/src/mix_window/sends.rs@@ -330,7 +330,6 @@ enum SendFooter { /// that scrolls, "new bus..." (and "Remove send" for an existing send) fixed under it. /// `current` is the send's destination and its name, if the slot has a send. fn send_route_menu(app: &mut SoundApp, ui: &Ui, field: &egui::Response, id: TrackId, slot: usize, current: Option<(Route, String)>) {-    let busses = app.engine.session().busses.clone();     let which = (b'A' + slot as u8) as char;     let has_send = current.is_some();     let header = |ui: &mut Ui| {@@ -350,6 +349,7 @@ fn send_route_menu(app: &mut SoundApp, ui: &Ui, field: &egui::Response, id: Trac             }         }         let search = MenuSearch::show(ui, egui::Id::unique(("send-bus-search", id.0, slot)), "Search buses…");+        let busses = &app.engine.session().busses;         let visible: Vec<_> = busses.iter().filter(|bus| search.matches(&bus.name)).collect();         (search, visible)     };@@ -388,6 +388,7 @@ fn send_route_menu(app: &mut SoundApp, ui: &Ui, field: &egui::Response, id: Trac     }     match footer {         Some(SendFooter::NewBus) => {+            let busses = &app.engine.session().busses;             let mut n = busses.len() + 1;             while busses.iter().any(|bus| bus.name.eq_ignore_ascii_case(&format!("Bus {n}")))                 || app.engine.session().track_by_name(&format!("Bus {n}")).is_some()