summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-01-25 20:34:09 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-01-25 20:34:09 +0000
commit832aa18a813f5ed4cb8e1228c52d89ee6d8946c7 (patch)
tree7f6edd7d4cabb58ccddceac9aa18d38cc2987313 /gtk2_ardour
parent10395d2feeeac8949e9fd491173e467c9852879e (diff)
a boatload of minor and middle-sized changes to try to speed up undo. imperfect, unfinished, but probably right to commit now
git-svn-id: svn://localhost/ardour2/branches/3.0@6561 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/add_route_dialog.cc2
-rw-r--r--gtk2_ardour/audio_streamview.cc61
-rw-r--r--gtk2_ardour/audio_streamview.h9
-rw-r--r--gtk2_ardour/editor.cc7
-rw-r--r--gtk2_ardour/editor_actions.cc1
-rw-r--r--gtk2_ardour/editor_drag.cc11
-rw-r--r--gtk2_ardour/editor_mouse.cc7
-rw-r--r--gtk2_ardour/editor_regions.cc41
-rw-r--r--gtk2_ardour/editor_regions.h2
-rw-r--r--gtk2_ardour/editor_selection.cc2
-rw-r--r--gtk2_ardour/enums.cc13
-rw-r--r--gtk2_ardour/midi_tracer.h1
-rw-r--r--gtk2_ardour/processor_box.cc5
-rw-r--r--gtk2_ardour/streamview.cc56
-rw-r--r--gtk2_ardour/streamview.h11
15 files changed, 114 insertions, 115 deletions
diff --git a/gtk2_ardour/add_route_dialog.cc b/gtk2_ardour/add_route_dialog.cc
index a3d3deaea5..47eeb94320 100644
--- a/gtk2_ardour/add_route_dialog.cc
+++ b/gtk2_ardour/add_route_dialog.cc
@@ -366,7 +366,7 @@ AddRouteDialog::refill_channel_setups ()
chn.channels = 12;
channel_setups.push_back (chn);
- chn.name = X_("Custom");
+ chn.name = _("Custom");
chn.channels = 0;
channel_setups.push_back (chn);
}
diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc
index fe4d601e3f..b6abbb4b22 100644
--- a/gtk2_ardour/audio_streamview.cc
+++ b/gtk2_ardour/audio_streamview.cc
@@ -24,6 +24,8 @@
#include <gtkmm2ext/gtk_ui.h>
+#include "pbd/stacktrace.h"
+
#include "ardour/audioplaylist.h"
#include "ardour/audioregion.h"
#include "ardour/audiofilesource.h"
@@ -202,14 +204,14 @@ AudioStreamView::remove_region_view (boost::weak_ptr<Region> weak_r)
{
ENSURE_GUI_THREAD (*this, &AudioStreamView::remove_region_view, weak_r);
- cerr << "a region went way, it appears to be ours (" << this << ")\n";
-
boost::shared_ptr<Region> r (weak_r.lock());
if (!r) {
return;
}
+ cerr << "a region went way, it appears to be ours (" << this << ")\n";
+
if (!_trackview.session()->deletion_in_progress()) {
for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end();) {
@@ -244,46 +246,41 @@ AudioStreamView::undisplay_diskstream ()
}
void
-AudioStreamView::playlist_modified_weak (boost::weak_ptr<Diskstream> ds)
+AudioStreamView::playlist_layered (boost::weak_ptr<Diskstream> wds)
{
- boost::shared_ptr<Diskstream> sp (ds.lock());
- if (sp) {
- playlist_modified (sp);
+ boost::shared_ptr<Diskstream> ds (wds.lock());
+
+ if (!ds) {
+ return;
}
-}
-void
-AudioStreamView::playlist_modified (boost::shared_ptr<Diskstream> ds)
-{
- /* we do not allow shared_ptr<T> to be bound to slots */
- ENSURE_GUI_THREAD (*this, &AudioStreamView::playlist_modified_weak, ds)
+ cerr << "AS, call SV::modified @ " << get_microseconds() << endl;
+
+ StreamView::playlist_layered (wds);
- StreamView::playlist_modified (ds);
+ cerr << "AS, done with SV::modified @ " << get_microseconds() << endl;
/* make sure xfades are on top and all the regionviews are stacked correctly. */
+ cerr << "AS, raise xfades @ " << get_microseconds() << endl;
for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) {
i->second->get_canvas_group()->raise_to_top();
}
+ cerr << "AS, done with xfades @ " << get_microseconds() << endl;
}
void
-AudioStreamView::playlist_changed_weak (boost::weak_ptr<Diskstream> ds)
+AudioStreamView::playlist_switched (boost::weak_ptr<Diskstream> wds)
{
- boost::shared_ptr<Diskstream> sp (ds.lock());
- if (sp) {
- playlist_changed (sp);
- }
-}
+ boost::shared_ptr<Diskstream> ds (wds.lock());
-void
-AudioStreamView::playlist_changed (boost::shared_ptr<Diskstream> ds)
-{
- ENSURE_GUI_THREAD (*this, &AudioStreamView::playlist_changed_weak, boost::weak_ptr<Diskstream> (ds));
+ if (!ds) {
+ return;
+ }
playlist_connections.drop_connections ();
- StreamView::playlist_changed(ds);
+ StreamView::playlist_switched (ds);
boost::shared_ptr<AudioPlaylist> apl = boost::dynamic_pointer_cast<AudioPlaylist>(ds->playlist());
@@ -293,27 +290,17 @@ AudioStreamView::playlist_changed (boost::shared_ptr<Diskstream> ds)
}
void
-AudioStreamView::add_crossfade_weak (boost::weak_ptr<Crossfade> crossfade)
+AudioStreamView::add_crossfade (boost::weak_ptr<Crossfade> wc)
{
- boost::shared_ptr<Crossfade> sp (crossfade.lock());
+ boost::shared_ptr<Crossfade> crossfade (wc.lock());
- if (!sp) {
+ if (!crossfade) {
return;
}
- add_crossfade (sp);
-}
-
-void
-AudioStreamView::add_crossfade (boost::shared_ptr<Crossfade> crossfade)
-{
AudioRegionView* lview = 0;
AudioRegionView* rview = 0;
- /* we do not allow shared_ptr<T> to be bound to slots */
-
- ENSURE_GUI_THREAD (*this, &AudioStreamView::add_crossfade_weak, boost::weak_ptr<Crossfade> (crossfade));
-
/* first see if we already have a CrossfadeView for this Crossfade */
CrossfadeViewList::iterator i = crossfade_views.find (crossfade);
diff --git a/gtk2_ardour/audio_streamview.h b/gtk2_ardour/audio_streamview.h
index d17a67f23c..ce21c7dacb 100644
--- a/gtk2_ardour/audio_streamview.h
+++ b/gtk2_ardour/audio_streamview.h
@@ -88,13 +88,10 @@ class AudioStreamView : public StreamView
void undisplay_diskstream ();
void redisplay_diskstream ();
- void playlist_modified_weak (boost::weak_ptr<ARDOUR::Diskstream>);
- void playlist_modified (boost::shared_ptr<ARDOUR::Diskstream>);
- void playlist_changed_weak (boost::weak_ptr<ARDOUR::Diskstream>);
- void playlist_changed (boost::shared_ptr<ARDOUR::Diskstream>);
+ void playlist_layered (boost::weak_ptr<ARDOUR::Diskstream>);
+ void playlist_switched (boost::weak_ptr<ARDOUR::Diskstream>);
- void add_crossfade (boost::shared_ptr<ARDOUR::Crossfade>);
- void add_crossfade_weak (boost::weak_ptr<ARDOUR::Crossfade>);
+ void add_crossfade (boost::weak_ptr<ARDOUR::Crossfade>);
void remove_crossfade (boost::shared_ptr<ARDOUR::Region>);
void color_handler ();
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index 3c7bd3f37c..387c61ecc6 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -2198,6 +2198,8 @@ Editor::set_state (const XMLNode& node, int /*version*/)
int x, y, xoff, yoff;
Gdk::Geometry g;
+ // return 0;
+
if ((prop = node.property ("id")) != 0) {
_id = prop->value ();
}
@@ -2355,7 +2357,8 @@ Editor::set_state (const XMLNode& node, int /*version*/)
}
if ((prop = node.property ("region-list-sort-type"))) {
- _regions->reset_sort_type (str2regionlistsorttype(prop->value()), true);
+ RegionListSortType st;
+ _regions->reset_sort_type ((RegionListSortType) string_2_enum (prop->value(), st), true);
}
if ((prop = node.property ("xfades-visible"))) {
@@ -2458,7 +2461,7 @@ Editor::get_state ()
node->add_property ("show-measures", _show_measures ? "yes" : "no");
node->add_property ("follow-playhead", _follow_playhead ? "yes" : "no");
node->add_property ("xfades-visible", _xfade_visibility ? "yes" : "no");
- node->add_property ("region-list-sort-type", enum2str (_regions->sort_type ()));
+ node->add_property ("region-list-sort-type", enum_2_string (_regions->sort_type ()));
node->add_property ("mouse-mode", enum2str(mouse_mode));
node->add_property ("internal-edit", _internal_editing ? "yes" : "no");
node->add_property ("join-object-range", join_object_range_button.get_active () ? "yes" : "no");
diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc
index 1b2654561c..64495fb2ff 100644
--- a/gtk2_ardour/editor_actions.cc
+++ b/gtk2_ardour/editor_actions.cc
@@ -340,6 +340,7 @@ Editor::register_actions ()
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "set-punch-from-edit-range", _("Set Punch from Edit Range"), sigc::mem_fun(*this, &Editor::set_punch_from_edit_range));
ActionManager::session_sensitive_actions.push_back (act);
+ ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "set-punch-from-region", _("Set Punch From Region"), sigc::mem_fun(*this, &Editor::set_punch_from_region));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc
index ab5aa45cb3..8f59b9e699 100644
--- a/gtk2_ardour/editor_drag.cc
+++ b/gtk2_ardour/editor_drag.cc
@@ -1003,20 +1003,19 @@ RegionMoveDrag::finished (GdkEvent* /*event*/, bool movement_occurred)
rv->region()->set_layer (dest_layer);
rv->region()->set_pending_explicit_relayer (true);
}
+
+ /* freeze playlist to avoid lots of relayering in the case of a multi-region drag */
- insert_result = modified_playlists.insert (playlist);
-
- if (insert_result.second) {
- _editor->session()->add_command (new MementoCommand<Playlist>(*playlist, &playlist->get_state(), 0));
- }
- /* freeze to avoid lots of relayering in the case of a multi-region drag */
frozen_insert_result = frozen_playlists.insert(playlist);
if (frozen_insert_result.second) {
playlist->freeze();
}
+ XMLNode& before (rv->region()->get_state());
rv->region()->set_position (where, (void*) this);
+ _editor->session()->add_command (new MementoCommand<Region>(*rv->region(), &before, &playlist->get_state()));
+
}
if (changed_tracks && !_copy) {
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc
index c3b4528876..64d1bf39f7 100644
--- a/gtk2_ardour/editor_mouse.cc
+++ b/gtk2_ardour/editor_mouse.cc
@@ -2454,13 +2454,14 @@ Editor::mouse_brush_insert_region (RegionView* rv, nframes64_t pos)
double speed = rtv->get_diskstream()->speed();
XMLNode &before = playlist->get_state();
- playlist->add_region (RegionFactory::create (rv->region()), (nframes64_t) (pos * speed));
+ boost::shared_ptr<Region> new_region (RegionFactory::create (rv->region()));
+ playlist->add_region (new_region, (nframes64_t) (pos * speed));
XMLNode &after = playlist->get_state();
_session->add_command(new MementoCommand<Playlist>(*playlist.get(), &before, &after));
- // playlist is frozen, so we have to update manually
+ // playlist is frozen, so we have to update manually XXX this is disgusting
- playlist->Modified(); /* EMIT SIGNAL */
+ playlist->RegionAdded (new_region); /* EMIT SIGNAL */
}
gint
diff --git a/gtk2_ardour/editor_regions.cc b/gtk2_ardour/editor_regions.cc
index 490f6991e3..58a0a5d7e7 100644
--- a/gtk2_ardour/editor_regions.cc
+++ b/gtk2_ardour/editor_regions.cc
@@ -24,6 +24,7 @@
#include <sstream>
#include "pbd/basename.h"
+#include "pbd/enumwriter.h"
#include "ardour/audioregion.h"
#include "ardour/audiofilesource.h"
@@ -54,11 +55,13 @@ using namespace Editing;
using Gtkmm2ext::Keyboard;
EditorRegions::EditorRegions (Editor* e)
- : EditorComponent (e),
- _menu (0),
- _show_automatic_regions (true),
- _sort_type ((Editing::RegionListSortType) 0),
- _no_redisplay (false)
+ : EditorComponent (e)
+ , _menu (0)
+ , _show_automatic_regions (true)
+ , _sort_type ((Editing::RegionListSortType) 0)
+ , _no_redisplay (false)
+ , ignore_region_list_selection_change (false)
+ , ignore_selected_region_change (false)
{
_display.set_size_request (100, -1);
_display.set_name ("RegionListDisplay");
@@ -383,37 +386,42 @@ EditorRegions::region_changed (Change what_changed, boost::weak_ptr<Region> regi
void
EditorRegions::selection_changed ()
{
+ if (ignore_region_list_selection_change) {
+ return;
+ }
+
if (_display.get_selection()->count_selected_rows() > 0) {
TreeIter iter;
TreeView::Selection::ListHandle_Path rows = _display.get_selection()->get_selected_rows ();
- _editor->deselect_all ();
+ _editor->get_selection().clear_regions ();
for (TreeView::Selection::ListHandle_Path::iterator i = rows.begin(); i != rows.end(); ++i) {
- if (iter = _model->get_iter (*i)) { // they could have clicked on a row that is just a placeholder, like "Hidden"
+ if (iter = _model->get_iter (*i)) {
boost::shared_ptr<Region> region = (*iter)[_columns.region];
+ // they could have clicked on a row that is just a placeholder, like "Hidden"
+
if (region) {
if (region->automatic()) {
+
_display.get_selection()->unselect(*i);
} else {
_change_connection.block (true);
- //editor_regions_selection_changed_connection.block(true);
-
+ cerr << "\tpush to region selection\n";
_editor->set_selected_regionview_from_region_list (region, Selection::Add);
_change_connection.block (false);
- //editor_regions_selection_changed_connection.block(false);
}
}
}
}
} else {
- _editor->deselect_all ();
+ _editor->get_selection().clear_regions ();
}
}
@@ -431,11 +439,13 @@ EditorRegions::set_selected (RegionSelection& regions)
boost::shared_ptr<Region> compared_region = (*i)[_columns.region];
if (r == compared_region) {
+ cerr << "\tpush into region list\n";
_display.get_selection()->select(*i);
break;
}
if (!(*i).children().empty()) {
+ cerr << "\tlook for " << r->name() << " among children of " << (compared_region ? compared_region->name() : string ("NO REGION")) << endl;
if (set_selected_in_subrow(r, (*i), 2)) {
break;
}
@@ -524,6 +534,8 @@ EditorRegions::update_row (boost::shared_ptr<Region> region)
TreeModel::iterator i;
TreeModel::Children rows = _model->children();
+
+ return;
for (i = rows.begin(); i != rows.end(); ++i) {
@@ -543,6 +555,7 @@ EditorRegions::update_row (boost::shared_ptr<Region> region)
}
}
}
+
// cerr << "Returning - No match\n";
}
@@ -570,6 +583,7 @@ EditorRegions::update_subrows (boost::shared_ptr<Region> region, TreeModel::Row
}
}
}
+
return false;
}
@@ -579,7 +593,7 @@ EditorRegions::update_all_rows ()
if (!_session) {
return;
}
-
+
TreeModel::iterator i;
TreeModel::Children rows = _model->children();
@@ -1049,6 +1063,7 @@ EditorRegions::sorter (TreeModel::iterator a, TreeModel::iterator b)
break;
case ByEndInFile:
+ // cerr << "Compare " << (region1->start() + region1->length()) << " and " << (region2->start() + region2->length()) << endl;
cmp = (region1->start() + region1->length()) - (region2->start() + region2->length());
break;
@@ -1073,6 +1088,8 @@ EditorRegions::sorter (TreeModel::iterator a, TreeModel::iterator b)
break;
}
+ // cerr << "Comparison on " << enum_2_string (_sort_type) << " gives " << cmp << endl;
+
if (cmp < 0) {
return -1;
} else if (cmp > 0) {
diff --git a/gtk2_ardour/editor_regions.h b/gtk2_ardour/editor_regions.h
index 83fd91aaca..5a9c2aad5a 100644
--- a/gtk2_ardour/editor_regions.h
+++ b/gtk2_ardour/editor_regions.h
@@ -150,6 +150,8 @@ private:
bool _no_redisplay;
std::list<boost::shared_ptr<ARDOUR::Region> > tmp_region_list;
PBD::ScopedConnection region_property_connection;
+ bool ignore_region_list_selection_change;
+ bool ignore_selected_region_change;
};
#endif /* __gtk_ardour_editor_regions_h__ */
diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc
index 4c4b4f0c86..2b94a05619 100644
--- a/gtk2_ardour/editor_selection.cc
+++ b/gtk2_ardour/editor_selection.cc
@@ -870,6 +870,8 @@ Editor::region_selection_changed ()
_regions->block_change_connection (true);
editor_regions_selection_changed_connection.block(true);
+ _regions->unselect_all ();
+
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
(*i)->set_selected_regionviews (selection->regions);
}
diff --git a/gtk2_ardour/enums.cc b/gtk2_ardour/enums.cc
index 4820a930ac..4b20514175 100644
--- a/gtk2_ardour/enums.cc
+++ b/gtk2_ardour/enums.cc
@@ -40,6 +40,7 @@ setup_gtk_ardour_enums ()
ImportMode import_mode;
EditPoint edit_point;
LayerDisplay layer_display;
+ RegionListSortType region_list_sort_type;
#define REGISTER(e) enum_writer.register_distinct (typeid(e).name(), i, s); i.clear(); s.clear()
#define REGISTER_BITS(e) enum_writer.register_bits (typeid(e).name(), i, s); i.clear(); s.clear()
@@ -71,4 +72,16 @@ setup_gtk_ardour_enums ()
REGISTER_ENUM (Overlaid);
REGISTER_ENUM (Stacked);
REGISTER (layer_display);
+
+ REGISTER_ENUM (ByEndInFile);
+ REGISTER_ENUM (ByLength);
+ REGISTER_ENUM (ByName);
+ REGISTER_ENUM (ByPosition);
+ REGISTER_ENUM (BySourceFileCreationDate);
+ REGISTER_ENUM (BySourceFileFS);
+ REGISTER_ENUM (BySourceFileLength);
+ REGISTER_ENUM (BySourceFileName);
+ REGISTER_ENUM (ByStartInFile);
+ REGISTER_ENUM (ByTimestamp);
+ REGISTER (region_list_sort_type);
}
diff --git a/gtk2_ardour/midi_tracer.h b/gtk2_ardour/midi_tracer.h
index fc6abee15c..58cdd6776e 100644
--- a/gtk2_ardour/midi_tracer.h
+++ b/gtk2_ardour/midi_tracer.h
@@ -1,7 +1,6 @@
#ifndef __ardour_gtk_midi_tracer_h__
#define __ardour_gtk_midi_tracer_h__
-#include <types.h>
#include <gtkmm/textview.h>
#include <gtkmm/scrolledwindow.h>
#include <gtkmm/togglebutton.h>
diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc
index 07d2a4e6d4..7324541ae2 100644
--- a/gtk2_ardour/processor_box.cc
+++ b/gtk2_ardour/processor_box.cc
@@ -1019,10 +1019,11 @@ ProcessorBox::compute_processor_sort_keys ()
Label label;
label.set_text (_("\
-You cannot reorder this set of processors\n\
+You cannot reorder these plugins/sends/inserts\n\
in that way because the inputs and\n\
-outputs do not work correctly."));
+outputs will not work correctly."));
+ dialog.get_vbox()->set_border_width (12);
dialog.get_vbox()->pack_start (label);
dialog.add_button (Stock::OK, RESPONSE_ACCEPT);
diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc
index b93606fbe8..da773ea273 100644
--- a/gtk2_ardour/streamview.cc
+++ b/gtk2_ardour/streamview.cc
@@ -169,20 +169,12 @@ StreamView::set_samples_per_unit (gdouble spp)
}
void
-StreamView::add_region_view_weak (boost::weak_ptr<Region> r)
+StreamView::add_region_view (boost::weak_ptr<Region> wr)
{
- boost::shared_ptr<Region> sp (r.lock());
-
- if (sp) {
- add_region_view (sp);
+ boost::shared_ptr<Region> r (wr.lock());
+ if (!r) {
+ return;
}
-}
-
-
-void
-StreamView::add_region_view (boost::shared_ptr<Region> r)
-{
- ENSURE_GUI_THREAD (*this, &StreamView::add_region_view_weak, boost::weak_ptr<Region>(r));
add_region_view_internal (r, true);
@@ -229,9 +221,9 @@ StreamView::undisplay_diskstream ()
void
StreamView::display_diskstream (boost::shared_ptr<Diskstream> ds)
{
- playlist_change_connection.disconnect();
- playlist_changed (ds);
- ds->PlaylistChanged.connect (playlist_change_connection, boost::bind (&StreamView::playlist_changed_weak, this, boost::weak_ptr<Diskstream> (ds)), gui_context());
+ playlist_switched_connection.disconnect();
+ playlist_switched (ds);
+ ds->PlaylistChanged.connect (playlist_switched_connection, boost::bind (&StreamView::playlist_switched, this, boost::weak_ptr<Diskstream> (ds)), gui_context());
}
void
@@ -292,20 +284,13 @@ StreamView::layer_regions()
}
void
-StreamView::playlist_modified_weak (boost::weak_ptr<Diskstream> ds)
+StreamView::playlist_layered (boost::weak_ptr<Diskstream> wds)
{
- boost::shared_ptr<Diskstream> sp (ds.lock());
+ boost::shared_ptr<Diskstream> ds (wds.lock());
- if (sp) {
- playlist_modified (sp);
+ if (!ds) {
+ return;
}
-}
-
-void
-StreamView::playlist_modified (boost::shared_ptr<Diskstream> ds)
-{
- /* we do not allow shared_ptr<T> to be bound to slots */
- ENSURE_GUI_THREAD (*this, &StreamView::playlist_modified_weak, ds)
/* update layers count and the y positions and heights of our regions */
if (ds->playlist()) {
@@ -322,18 +307,13 @@ StreamView::playlist_modified (boost::shared_ptr<Diskstream> ds)
}
void
-StreamView::playlist_changed_weak (boost::weak_ptr<Diskstream> ds)
+StreamView::playlist_switched (boost::weak_ptr<Diskstream> wds)
{
- boost::shared_ptr<Diskstream> sp (ds.lock());
- if (sp) {
- playlist_changed (sp);
- }
-}
+ boost::shared_ptr<Diskstream> ds (wds.lock());
-void
-StreamView::playlist_changed (boost::shared_ptr<Diskstream> ds)
-{
- ENSURE_GUI_THREAD (*this, &StreamView::playlist_changed_weak, boost::weak_ptr<Diskstream> (ds));
+ if (!ds) {
+ return;
+ }
/* disconnect from old playlist */
@@ -353,8 +333,8 @@ StreamView::playlist_changed (boost::shared_ptr<Diskstream> ds)
/* catch changes */
- ds->playlist()->Modified.connect (playlist_connections, boost::bind (&StreamView::playlist_modified_weak, this, ds), gui_context());
- ds->playlist()->RegionAdded.connect (playlist_connections, ui_bind (&StreamView::add_region_view_weak, this, _1), gui_context());
+ ds->playlist()->LayeringChanged.connect (playlist_connections, boost::bind (&StreamView::playlist_layered, this, boost::weak_ptr<Diskstream>(ds)), gui_context());
+ ds->playlist()->RegionAdded.connect (playlist_connections, ui_bind (&StreamView::add_region_view, this, _1), gui_context());
ds->playlist()->RegionRemoved.connect (playlist_connections, ui_bind (&StreamView::remove_region_view, this, _1), gui_context());
}
diff --git a/gtk2_ardour/streamview.h b/gtk2_ardour/streamview.h
index b32d75d5ac..a1ebe2cc2a 100644
--- a/gtk2_ardour/streamview.h
+++ b/gtk2_ardour/streamview.h
@@ -99,8 +99,7 @@ public:
virtual void update_contents_metrics(boost::shared_ptr<ARDOUR::Region>) {}
- void add_region_view_weak (boost::weak_ptr<ARDOUR::Region> r);
- void add_region_view (boost::shared_ptr<ARDOUR::Region>);
+ void add_region_view (boost::weak_ptr<ARDOUR::Region>);
void region_layered (RegionView*);
virtual void update_contents_height ();
@@ -135,10 +134,8 @@ protected:
void diskstream_changed ();
void layer_regions ();
- virtual void playlist_changed_weak (boost::weak_ptr<ARDOUR::Diskstream>);
- virtual void playlist_changed (boost::shared_ptr<ARDOUR::Diskstream>);
- virtual void playlist_modified_weak (boost::weak_ptr<ARDOUR::Diskstream>);
- virtual void playlist_modified (boost::shared_ptr<ARDOUR::Diskstream>);
+ virtual void playlist_switched (boost::weak_ptr<ARDOUR::Diskstream>);
+ virtual void playlist_layered (boost::weak_ptr<ARDOUR::Diskstream>);
virtual void color_handler () = 0;
@@ -164,7 +161,7 @@ protected:
uint32_t stream_base_color; ///< Background color
PBD::ScopedConnectionList playlist_connections;
- PBD::ScopedConnection playlist_change_connection;
+ PBD::ScopedConnection playlist_switched_connection;
ARDOUR::layer_t _layers;
LayerDisplay _layer_display;