diff --git a/src/app/mod.rs b/src/app/mod.rs index 80243ca..9722277 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -1775,6 +1775,27 @@ fn view(state: &AppState) -> Element<'_, AppMessage> { column![] }, vertical_space(20.0), + // Echo cancellation — same flag + message as the Settings checkbox, so + // toggling here and there stay in sync automatically (single source of + // truth: config.echo_cancellation_enabled). Tooltip is explicit that it + // applies on the NEXT join (the PipeWire-module AEC is wired at join + // time, not hot-swappable mid-call). + tooltip( + checkbox(state.config.echo_cancellation_enabled) + .label("Echo cancellation") + .on_toggle(AppMessage::ToggleEchoCancellation), + container( + text("Cancels speaker echo + suppresses noise. Applies on your next room join.") + .size(11) + .color(color_text), + ) + .padding(8) + .max_width(260.0) + .style(c_style(color_crust, color_surface, 6.0)), + iced::widget::tooltip::Position::Top, + ) + .gap(8), + vertical_space(20.0), { let (rec_kind, rec_label, rec_bg, rec_hover, rec_fg) = if state.recording { (IconKind::Stop, "Stop Recording", color_red, color_maroon, color_crust)