diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2009-12-17 23:36:52 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2009-12-17 23:36:52 +0000 |
commit | 67460c2af45d0455e64623572480c064445c2e5b (patch) | |
tree | 90b001525f712a1523ae853e9d37660634c89a17 /gtk2_ardour | |
parent | cbb272af44b6a3e3cb807d70a46b5f6d0d7ed109 (diff) |
fix deadlock in protocol manager startup; fix some other ::set_session() SNAFUs; remove last boost::signals2::connection member from libardour
git-svn-id: svn://localhost/ardour2/branches/3.0@6375 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/ardour_ui_dialogs.cc | 8 | ||||
-rw-r--r-- | gtk2_ardour/editor.cc | 10 | ||||
-rw-r--r-- | gtk2_ardour/editor_summary.cc | 11 | ||||
-rw-r--r-- | gtk2_ardour/editor_summary.h | 1 | ||||
-rw-r--r-- | gtk2_ardour/route_ui.cc | 5 | ||||
-rw-r--r-- | gtk2_ardour/streamview.cc | 2 |
6 files changed, 19 insertions, 18 deletions
diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc index 9db664199c..87a8dede29 100644 --- a/gtk2_ardour/ardour_ui_dialogs.cc +++ b/gtk2_ardour/ardour_ui_dialogs.cc @@ -51,6 +51,10 @@ ARDOUR_UI::set_session (Session *s) { SessionHandlePtr::set_session (s); + if (!_session) { + return; + } + if (location_ui) { location_ui->set_session(s); } @@ -65,10 +69,6 @@ ARDOUR_UI::set_session (Session *s) preroll_clock.set_session (s); postroll_clock.set_session (s); - if (!_session) { - return; - } - /* sensitize menu bar options that are now valid */ ActionManager::set_sensitive (ActionManager::session_sensitive_actions, true); diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index bf0b2124bb..7cc9e26339 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -436,8 +436,8 @@ Editor::Editor () transport_mark_label.set_no_show_all(); initialize_rulers (); - _summary = new EditorSummary (this); initialize_canvas (); + _summary = new EditorSummary (this); selection->TimeChanged.connect (sigc::mem_fun(*this, &Editor::time_selection_changed)); selection->TracksChanged.connect (sigc::mem_fun(*this, &Editor::track_selection_changed)); @@ -1033,6 +1033,10 @@ Editor::set_session (Session *t) { SessionHandlePtr::set_session (t); + if (!_session) { + return; + } + zoom_range_clock.set_session (_session); _playlist_selector->set_session (_session); nudge_clock.set_session (_session); @@ -1056,10 +1060,6 @@ Editor::set_session (Session *t) sfbrowser->set_session (_session); } - if (!_session) { - return; - } - compute_fixed_ruler_scale (); /* there are never any selected regions at startup */ diff --git a/gtk2_ardour/editor_summary.cc b/gtk2_ardour/editor_summary.cc index b002150622..8a62156a19 100644 --- a/gtk2_ardour/editor_summary.cc +++ b/gtk2_ardour/editor_summary.cc @@ -47,7 +47,8 @@ EditorSummary::EditorSummary (Editor* e) _zoom_dragging (false) { - + Region::RegionPropertyChanged.connect (sigc::hide (sigc::mem_fun (*this, &EditorSummary::set_dirty))); + _editor->playhead_cursor->PositionChanged.connect (sigc::mem_fun (*this, &EditorSummary::playhead_position_changed)); } /** Connect to a session. @@ -58,17 +59,13 @@ EditorSummary::set_session (Session* s) { EditorComponent::set_session (s); - Region::RegionPropertyChanged.connect (sigc::hide (sigc::mem_fun (*this, &EditorSummary::set_dirty))); + set_dirty (); if (_session) { _session_connections.add_connection (_session->RegionRemoved.connect (boost::bind (&EditorSummary::set_dirty, this))); _session_connections.add_connection (_session->StartTimeChanged.connect (boost::bind (&EditorSummary::set_dirty, this))); _session_connections.add_connection (_session->EndTimeChanged.connect (boost::bind (&EditorSummary::set_dirty, this))); } - - _editor->playhead_cursor->PositionChanged.connect (sigc::mem_fun (*this, &EditorSummary::playhead_position_changed)); - - set_dirty (); } /** Handle an expose event. @@ -504,7 +501,7 @@ EditorSummary::set_editor (pair<double,double> const & x, pair<double, double> c void EditorSummary::playhead_position_changed (nframes64_t p) { - if (int (p * _x_scale) != int (_last_playhead)) { + if (_session && int (p * _x_scale) != int (_last_playhead)) { set_overlays_dirty (); } } diff --git a/gtk2_ardour/editor_summary.h b/gtk2_ardour/editor_summary.h index 9d9763996e..e311b47ebd 100644 --- a/gtk2_ardour/editor_summary.h +++ b/gtk2_ardour/editor_summary.h @@ -1,3 +1,4 @@ + /* Copyright (C) 2009 Paul Davis diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index 31841c97ba..c4fe713f58 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -167,6 +167,11 @@ RouteUI::reset () void RouteUI::self_delete () { + /* This may be called from a non-GUI thread. Keep it safe */ + + cerr << "\n\nExpect to see route " << _route->name() << " be deleted\n"; + _route.reset (); /* drop reference to route, so that it can be cleaned up */ + route_going_away_connection.disconnect (); connections.drop_connections (); delete_when_idle (this); diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc index 626e2bf537..4190116294 100644 --- a/gtk2_ardour/streamview.cc +++ b/gtk2_ardour/streamview.cc @@ -92,8 +92,6 @@ StreamView::StreamView (RouteTimeAxisView& tv, ArdourCanvas::Group* group) StreamView::~StreamView () { - cerr << "Streamview " << _trackview.name() << " deleted\n"; - undisplay_diskstream (); delete canvas_rect; |