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: