diff --git a/crates/ui-egui/src/edit_window/rulers.rs b/crates/ui-egui/src/edit_window/rulers.rs index c665f907..5d47fca7 100644 --- a/crates/ui-egui/src/edit_window/rulers.rs +++ b/crates/ui-egui/src/edit_window/rulers.rs @@ -222,7 +222,8 @@ pub(super) fn draw_rulers(app: &mut SoundApp, ui: &mut Ui, area: Rect, tl: Rect, } else if resp.clicked() && let Some(m) = hit { - let _ = app.run("markers.recall", json!({"number": m.number})); + let command = if ui.input(|i| i.modifiers.alt) { "markers.delete" } else { "markers.recall" }; + let _ = app.run(command, json!({"number": m.number})); } } } diff --git a/crates/ui-egui/src/edit_window/tests.rs b/crates/ui-egui/src/edit_window/tests.rs index 99d7dc45..3e6705ef 100644 --- a/crates/ui-egui/src/edit_window/tests.rs +++ b/crates/ui-egui/src/edit_window/tests.rs @@ -1508,3 +1508,20 @@ fn alt_click_on_a_breakpoint_deletes_it() { assert_eq!(h.state().engine.session().track(track).unwrap().clips(), clips.as_slice(), "{tool}"); } } + +#[test] +fn alt_click_on_a_marker_deletes_it() { + let mut engine = soundcraft_engine::demo::demo_engine(); + engine.session_mut().edit.rulers = vec!["markers".into()]; + engine.execute("markers.add", &json!({"at": 48_000, "name": "Alt-delete me"})).unwrap(); + let mut h = harness_with(engine); + let s = h.state().engine.session_arc(); + let marker = s.markers.iter().find(|m| m.name == "Alt-delete me").unwrap(); + let at = pos2(x_of(&s, timeline(&h), marker.start), timeline(&h).min.y - 11.5); + let before = s.markers.len(); + + click_with(&mut h, at, egui::Modifiers::ALT); + + assert_eq!(h.state().engine.session().markers.len(), before - 1); + assert!(!h.state().engine.session().markers.iter().any(|m| m.name == "Alt-delete me")); +}