summaryrefslogtreecommitdiff
path: root/gtk2_ardour/ghostregion.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2011-11-17 22:15:50 +0000
committerCarl Hetherington <carl@carlh.net>2011-11-17 22:15:50 +0000
commitfecf120f1e778f1a2344e0adcaf3aed0b0c4e5e3 (patch)
tree449dbba02447dd9d4031df532bd47fdc6d19859e /gtk2_ardour/ghostregion.cc
parent597a65641869b113f02b73f6bcf41a9757164953 (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.cc16
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.