diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2014-06-30 11:02:23 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2014-06-30 11:02:23 -0400 |
commit | 1f695014b49da3748c253f7d982978b5cfdf4cec (patch) | |
tree | 07b640730605bf8f41509921fb6b898ad379e819 /gtk2_ardour/track_selection.h | |
parent | 890ea91920f7e3e233dab966b0516d3d0e3d3378 (diff) |
protect use of iterators across routeUI selection when operations change the selection (e.g. deletion)
Diffstat (limited to 'gtk2_ardour/track_selection.h')
-rw-r--r-- | gtk2_ardour/track_selection.h | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/gtk2_ardour/track_selection.h b/gtk2_ardour/track_selection.h index d94ec3c8c1..2e9927ab42 100644 --- a/gtk2_ardour/track_selection.h +++ b/gtk2_ardour/track_selection.h @@ -46,41 +46,54 @@ public: template <typename Function> void foreach_route_ui (Function f) { - for (iterator i = begin(); i != end(); ++i) { + for (iterator i = begin(); i != end(); ) { + iterator tmp = i; + ++tmp; + RouteUI* t = dynamic_cast<RouteUI*> (*i); if (t) { f (t); } + i = tmp; } } template <typename Function> void foreach_route_time_axis (Function f) { - for (iterator i = begin(); i != end(); ++i) { + for (iterator i = begin(); i != end(); ) { + iterator tmp = i; + ++tmp; RouteTimeAxisView* t = dynamic_cast<RouteTimeAxisView*> (*i); if (t) { f (t); } + i = tmp; } } template <typename Function> void foreach_audio_time_axis (Function f) { - for (iterator i = begin(); i != end(); ++i) { + for (iterator i = begin(); i != end(); ) { + iterator tmp = i; + ++tmp; AudioTimeAxisView* t = dynamic_cast<AudioTimeAxisView*> (*i); if (t) { f (t); } + i = tmp; } } template <typename Function> void foreach_midi_time_axis (Function f) { - for (iterator i = begin(); i != end(); ++i) { + for (iterator i = begin(); i != end(); ) { + iterator tmp = i; + ++tmp; MidiTimeAxisView* t = dynamic_cast<MidiTimeAxisView*> (*i); if (t) { f (t); } + i = tmp; } } |