merge fix
[ardour.git] / libs / ardour / playlist.cc
index d121ee04ff0c0d0bd8deb5bd5debe948c5ea2639..8862c633ab62fbe6578b5d5b3ed36605a174101a 100644 (file)
@@ -1642,6 +1642,8 @@ Playlist::region_bounds_changed (const PropertyChange& what_changed, boost::shar
                 save = true;
         }
 
+        mark_session_dirty ();
+     
         return save;
  }
 
@@ -2333,7 +2335,10 @@ struct RelayerSort {
 void
 Playlist::set_layer (boost::shared_ptr<Region> region, double new_layer)
 {
-       /* Remove the layer we are setting from our region list, and sort it */
+       /* Remove the layer we are setting from our region list, and sort it
+       *  using the layer indeces.
+       */
+
        RegionList copy = regions.rlist();
        copy.remove (region);
        copy.sort (RelayerSort ());
@@ -2362,6 +2367,12 @@ Playlist::setup_layering_indices (RegionList const & regions)
        }
 }
 
+struct LaterHigherSort {
+       bool operator () (boost::shared_ptr<Region> a, boost::shared_ptr<Region> b) {
+               return a->position() < b->position();
+       }
+};
+
 /** Take the layering indices of each of our regions, compute the layers
  *  that they should be on, and write the layers back to the regions.
  */
@@ -2396,9 +2407,16 @@ Playlist::relayer ()
        vector<vector<RegionList> > layers;
        layers.push_back (vector<RegionList> (divisions));
 
-       /* Sort our regions into layering index order */
+       /* Sort our regions into layering index order (for manual layering) or position order (for later is higher)*/
        RegionList copy = regions.rlist();
-       copy.sort (RelayerSort ());
+       switch (Config->get_layer_model()) {
+               case LaterHigher:
+                       copy.sort (LaterHigherSort ());
+                       break;
+               case Manual:
+                       copy.sort (RelayerSort ());
+                       break;
+       }
 
        DEBUG_TRACE (DEBUG::Layering, "relayer() using:\n");
        for (RegionList::iterator i = copy.begin(); i != copy.end(); ++i) {