{
SessionHandlePtr::set_session (s);
+ if (!_session) {
+ return;
+ }
+
if (location_ui) {
location_ui->set_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);
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));
{
SessionHandlePtr::set_session (t);
+ if (!_session) {
+ return;
+ }
+
zoom_range_clock.set_session (_session);
_playlist_selector->set_session (_session);
nudge_clock.set_session (_session);
sfbrowser->set_session (_session);
}
- if (!_session) {
- return;
- }
-
compute_fixed_ruler_scale ();
/* there are never any selected regions at startup */
_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.
{
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.
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 ();
}
}
+
/*
Copyright (C) 2009 Paul Davis
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);
StreamView::~StreamView ()
{
- cerr << "Streamview " << _trackview.name() << " deleted\n";
-
undisplay_diskstream ();
delete canvas_rect;
FreezeRecord _freeze_record;
XMLNode* pending_state;
- boost::signals2::scoped_connection recenable_connection;
bool _destructive;
boost::shared_ptr<RecEnableControllable> _rec_enable_control;
ControlProtocol*
ControlProtocolManager::instantiate (ControlProtocolInfo& cpi)
{
+ /* CALLER MUST HOLD LOCK */
+
if (_session == 0) {
return 0;
}
return 0;
}
-
- Glib::Mutex::Lock lm (protocols_lock);
control_protocols.push_back (cpi.protocol);
return cpi.protocol;
return;
}
+ Glib::Mutex::Lock lm (protocols_lock);
+
for (list<ControlProtocolInfo*>::iterator i = control_protocol_info.begin(); i != control_protocol_info.end(); ++i) {
if ((*i)->mandatory && ((*i)->protocol == 0)) {
info << string_compose (_("Instantiating mandatory control protocol %1"), (*i)->name) << endmsg;
XMLNodeConstIterator citer;
XMLProperty* prop;
+ Glib::Mutex::Lock lm (protocols_lock);
+
clist = node.children();
for (citer = clist.begin(); citer != clist.end(); ++citer) {