From bab88ebe9ccc53b20bd8a8643f54746ede3bbb52 Mon Sep 17 00:00:00 2001 From: GZharun Date: Fri, 23 Jan 2015 14:49:30 +0200 Subject: [PATCH] [Summary] Fixed bug 45124: Tracks crashes if record was started while trimming region [Details] Drags should be aborted when record starts [Reviewed by QA] MKosharniy --- gtk2_ardour/editor.cc | 9 +++++++++ gtk2_ardour/editor.h | 2 ++ gtk2_ardour/editor_drag.cc | 4 ++-- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index e5e834dea4..2d25dc30ce 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -1234,6 +1234,14 @@ Editor::start_session_auto_save_event_timing () _session_auto_save_timeout_connection = Glib::signal_timeout().connect (sigc::mem_fun (*this, &Editor::session_auto_save_timeout_callback), 1 * 1000); } +void +Editor::on_record_state_changed () +{ + if (_session->actively_recording() ) { + _drags->abort (); + } +} + bool Editor::session_auto_save_timeout_callback () { @@ -1478,6 +1486,7 @@ Editor::set_session (Session *t) _session->history().Changed.connect (_session_connections, invalidator (*this), boost::bind (&Editor::history_changed, this), gui_context()); _session->RecordStateChanged.connect (_session_connections, MISSING_INVALIDATOR, boost::bind (&Editor::start_lock_event_timing, this), gui_context()); _session->RecordStateChanged.connect (_session_connections, invalidator (*this), boost::bind (&Editor::start_session_auto_save_event_timing, this), gui_context()); + _session->RecordStateChanged.connect (_session_connections, invalidator (*this), boost::bind (&Editor::on_record_state_changed, this), gui_context()); _session->locations()->session_range_location()->StartChanged.connect(_session_connections, invalidator (*this), boost::bind (&Editor::update_horizontal_adjustment_limits, this), gui_context() ); _session->locations()->session_range_location()->EndChanged.connect(_session_connections, invalidator (*this), boost::bind (&Editor::update_horizontal_adjustment_limits, this), gui_context() ); diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 3415435aad..9b1ffb30b8 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -2016,6 +2016,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD bool on_key_press_event (GdkEventKey*); bool on_key_release_event (GdkEventKey*); + void on_record_state_changed (); + void session_state_saved (std::string); void set_session_dirty (); diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index 1b04f60e73..b991e453bf 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -390,7 +390,7 @@ Drag::motion_handler (GdkEvent* event, bool from_autoscroll) motion (event, first_move && !_starting_point_passed); _starting_point_passed = first_move; - + _last_pointer_x = _drags->current_pointer_x (); _last_pointer_y = current_pointer_y (); _last_pointer_frame = adjusted_current_frame (event); @@ -2500,7 +2500,7 @@ TrimDrag::aborted (bool movement_occurred) finished (0, true); if (movement_occurred) { - _editor->undo (); + _editor->session()->undo (1); } for (list::const_iterator i = _views.begin(); i != _views.end(); ++i) {