From 2bb259f6cbef1686175a469a6007b0f2d0d69415 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sat, 3 Jan 2026 09:55:31 -0700 Subject: [PATCH] prevent drags on the tempo/meter markers representing a BBT marker --- gtk2_ardour/editor_drag.cc | 11 +++++++++++ gtk2_ardour/editor_mouse.cc | 11 ++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index 2a3e1af3d0..5e3b903f09 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -3078,6 +3078,12 @@ MeterMarkerDrag::MeterMarkerDrag (Editor& e, ArdourCanvas::Item* i, bool c) , _old_snap_mode (e.snap_mode ()) , before_state (0) { + Temporal::MeterPoint const & mp (_marker->meter()); + + if (dynamic_cast (&mp)) { + throw failed_constructor (); + } + DEBUG_TRACE (DEBUG::Drags, "New MeterMarkerDrag\n"); assert (_marker); _movable = !TempoMap::use ()->is_initial (_marker->meter ()); @@ -3280,6 +3286,11 @@ TempoMarkerDrag::TempoMarkerDrag (Editor& e, ArdourCanvas::Item* i) _marker = reinterpret_cast (_item->get_data ("marker")); _real_section = &_marker->tempo (); + + if (dynamic_cast (_real_section)) { + throw failed_constructor (); + } + _movable = !TempoMap::use ()->is_initial (_marker->tempo ()); _grab_bpm = _real_section->note_types_per_minute (); _grab_qn = _real_section->beats (); diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 88c729f6d5..f7d2465b3e 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -574,7 +574,10 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT if (ArdourKeyboard::indicates_constraint (event->button.state)) { _drags->set (new TempoEndDrag (*this, item), event); } else { - _drags->set (new TempoMarkerDrag (*this, item), event); + try { + _drags->set (new TempoMarkerDrag (*this, item), event); + } catch (...) { + } } return true; @@ -588,8 +591,10 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT return true; case MeterMarkerItem: - _drags->set ( - new MeterMarkerDrag (*this, item, ArdourKeyboard::indicates_copy (event->button.state)), event); + try { + _drags->set (new MeterMarkerDrag (*this, item, ArdourKeyboard::indicates_copy (event->button.state)), event); + } catch (...) { + } return true; case VideoBarItem: