Cleanup of region drag code to be a bit more efficient and shorter. Fixes crashes...
[ardour.git] / gtk2_ardour / region_selection.cc
index 696c14b14009ce2fa2237032a6d2b7df2e8381cb..1a5a556514eabc209fa7238511a001e0bceca5ee 100644 (file)
@@ -20,6 +20,7 @@
 
 #include "ardour/region.h"
 
+#include "gui_thread.h"
 #include "region_view.h"
 #include "region_selection.h"
 #include "time_axis_view.h"
 using namespace std;
 using namespace ARDOUR;
 using namespace PBD;
-using namespace sigc;
 
 /** Construct an empty RegionSelection.
  */
 RegionSelection::RegionSelection ()
 {
-       RegionView::RegionViewGoingAway.connect (sigc::mem_fun(*this, &RegionSelection::remove_it));
+       RegionView::RegionViewGoingAway.connect (death_connection, MISSING_INVALIDATOR, ui_bind (&RegionSelection::remove_it, this, _1), gui_context());
 
        _current_start = 0;
        _current_end = 0;
@@ -44,9 +44,8 @@ RegionSelection::RegionSelection ()
  */
 RegionSelection::RegionSelection (const RegionSelection& other)
        : std::list<RegionView*>()
-       , sigc::trackable(other)
 {
-       RegionView::RegionViewGoingAway.connect (sigc::mem_fun(*this, &RegionSelection::remove_it));
+       RegionView::RegionViewGoingAway.connect (death_connection, MISSING_INVALIDATOR, ui_bind (&RegionSelection::remove_it, this, _1), gui_context());
 
        _current_start = other._current_start;
        _current_end = other._current_end;
@@ -254,10 +253,10 @@ struct RegionSortByTrack {
 
            /* really, track and position */
 
-           if (a->get_trackview().order() == b->get_trackview().order()) {
+           if (a->get_time_axis_view().order() == b->get_time_axis_view().order()) {
                    return a->region()->position() < b->region()->position();
            } else {
-                   return a->get_trackview().order() < b->get_trackview().order();
+                   return a->get_time_axis_view().order() < b->get_time_axis_view().order();
            }
     }
 };
@@ -299,7 +298,7 @@ bool
 RegionSelection::involves (const TimeAxisView& tv) const
 {
        for (RegionSelection::const_iterator i = begin(); i != end(); ++i) {
-               if (&(*i)->get_trackview() == &tv) {
+               if (&(*i)->get_time_axis_view() == &tv) {
                        return true;
                }
        }