partial patch/partial by-hand merge of 2.X commits 3169&3170 to 3.X codebase
[ardour.git] / gtk2_ardour / level_meter.cc
index 8a05d8da5629c925cf69f2055241e84bd5d93696..cd7308cfa26111205f4bbdf39167dacc3ef1e9b8 100644 (file)
@@ -58,9 +58,8 @@ using namespace std;
 //sigc::signal<void,RouteGroup*> LevelMeter::ResetGroupPeakDisplays;
 
 
-LevelMeter::LevelMeter (boost::shared_ptr<IO> io, Session& s)
-       : _io (io),
-         _session (s)
+LevelMeter::LevelMeter (Session& s)
+       : _session (s)
        
 {
        set_spacing (1);
@@ -85,6 +84,12 @@ LevelMeter::~LevelMeter ()
        }
 }
 
+void
+LevelMeter::set_io (boost::shared_ptr<IO> io)
+{
+       _io = io;
+}
+
 float
 LevelMeter::update_meters ()
 {
@@ -100,6 +105,9 @@ LevelMeter::update_meters ()
                        if (mpeak > max_peak) {
                                max_peak = mpeak;
                        }
+                       if (mpeak > max_peak) {
+                               max_peak = mpeak;
+                       }
                }
        }
        return max_peak;
@@ -141,8 +149,13 @@ LevelMeter::hide_all_meters ()
 void
 LevelMeter::setup_meters (int len, int initial_width)
 {
+       if (!_io) {
+               return; /* do it later */
+       }
        uint32_t nmeters = _io->n_outputs().n_total();
        regular_meter_width = initial_width;
+
        guint16 width;
 
        hide_all_meters ();