From 7235ece8986f335d52d8b76f5135ddb3d794de35 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 9 Jan 2015 03:18:43 +0100 Subject: Revert "don't unpack and repack meters unnecessarily during LevelMeterBase::setup_meters()" This reverts commit d00e035fe0618c8e3f4c87c6386fc87efb58cd62. ..which introduced a bug. Meter count and type may change when switching the meter point or simply when selecting a different track in the editor-mixer. Additional meters were not unpacked and remained on canvas. Ideally we'd just remove the excess meters or meters where the type changed, but that's far more complex than just repacking them all. --- gtk2_ardour/level_meter.cc | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) (limited to 'gtk2_ardour/level_meter.cc') diff --git a/gtk2_ardour/level_meter.cc b/gtk2_ardour/level_meter.cc index 04a7c77cf1..efa98bb434 100644 --- a/gtk2_ardour/level_meter.cc +++ b/gtk2_ardour/level_meter.cc @@ -234,6 +234,8 @@ LevelMeterBase::hide_all_meters () void LevelMeterBase::setup_meters (int len, int initial_width, int thin_width) { + hide_all_meters (); + if (!_meter) { return; /* do it later or never */ } @@ -393,13 +395,8 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width) } if (meters[n].width != width || meters[n].length != len || color_changed || meter_type != visible_meter_type) { bool hl = meters[n].meter ? meters[n].meter->get_highlight() : false; - - if (meters[n].meter && meters[n].meter->get_parent()) { - mtr_remove (*meters[n].meter); - meters[n].packed = false; - delete meters[n].meter; - } - + meters[n].packed = false; + delete meters[n].meter; meters[n].meter = new FastMeter ((uint32_t) floor (ARDOUR_UI::config()->get_meter_hold()), width, _meter_orientation, len, c[0], c[1], c[2], c[3], c[4], c[5], c[6], c[7], c[8], c[9], @@ -413,13 +410,14 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width) meters[n].meter->add_events (Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK); meters[n].meter->signal_button_press_event().connect (sigc::mem_fun (*this, &LevelMeterBase::meter_button_press), false); meters[n].meter->signal_button_release_event().connect (sigc::mem_fun (*this, &LevelMeterBase::meter_button_release), false); - - mtr_pack (*meters[n].meter); - meters[n].meter->show_all (); - meters[n].packed = true; } - } + //pack_end (*meters[n].meter, false, false); + mtr_pack (*meters[n].meter); + meters[n].meter->show_all (); + meters[n].packed = true; + } + //show(); color_changed = false; visible_meter_type = meter_type; } -- cgit v1.2.3