diff options
author | Carl Hetherington <carl@carlh.net> | 2011-11-17 22:15:50 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2011-11-17 22:15:50 +0000 |
commit | fecf120f1e778f1a2344e0adcaf3aed0b0c4e5e3 (patch) | |
tree | 449dbba02447dd9d4031df532bd47fdc6d19859e /gtk2_ardour/ghostregion.cc | |
parent | 597a65641869b113f02b73f6bcf41a9757164953 (diff) |
Remove ghost notes when actual notes are deleted, and ensure the _optimization_iterator is valid even after things have been removed from the list (should fix #4483).
git-svn-id: svn://localhost/ardour2/branches/3.0@10659 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/ghostregion.cc')
-rw-r--r-- | gtk2_ardour/ghostregion.cc | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/gtk2_ardour/ghostregion.cc b/gtk2_ardour/ghostregion.cc index cb4a0d95d3..61f0ffcbff 100644 --- a/gtk2_ardour/ghostregion.cc +++ b/gtk2_ardour/ghostregion.cc @@ -306,6 +306,7 @@ MidiGhostRegion::clear_events() } events.clear(); + _optimization_iterator = events.end (); } /** Update the x positions of our representation of a parent's note. @@ -328,13 +329,26 @@ MidiGhostRegion::update_note (ArdourCanvas::CanvasNote* parent) } } +void +MidiGhostRegion::remove_note (ArdourCanvas::CanvasNoteEvent* note) +{ + Event* ev = find_event (note); + if (!ev) { + return; + } + + events.remove (ev); + delete ev; + _optimization_iterator = events.end (); +} + /** Given a note in our parent region (ie the actual MidiRegionView), find our * representation of it. * @return Our Event, or 0 if not found. */ MidiGhostRegion::Event * -MidiGhostRegion::find_event (ArdourCanvas::CanvasNote* parent) +MidiGhostRegion::find_event (ArdourCanvas::CanvasNoteEvent* parent) { /* we are using _optimization_iterator to speed up the common case where a caller is going through our notes in order. |