13
0

provisional processor control-box tweaks - possible fix for #6519

ControlBoxes are created/destroyed regularly (plugin re-order,
track selection -> Editor Mixer,...).

Properly disconnect the timer signal in the dtor and skip updateing the
tooltip unnecessarily (duplicate calls, Changed & Timer).

This should really be undone, the timer needs to be removed and Changed() used throughout.
This commit is contained in:
Robin Gareus 2015-08-19 13:49:30 +02:00
parent bb79071038
commit 11f51497f3
2 changed files with 21 additions and 6 deletions

View File

@ -529,7 +529,8 @@ ProcessorEntry::Control::Control (boost::shared_ptr<AutomationControl> c, string
_button.signal_clicked.connect (sigc::mem_fun (*this, &Control::button_clicked));
_button.signal_led_clicked.connect (sigc::mem_fun (*this, &Control::button_clicked));
c->Changed.connect (_connection, MISSING_INVALIDATOR, boost::bind (&Control::control_changed, this), gui_context ());
// dup. currently timers are used :(
//c->Changed.connect (_connection, MISSING_INVALIDATOR, boost::bind (&Control::control_changed, this), gui_context ());
} else {
@ -565,10 +566,13 @@ ProcessorEntry::Control::Control (boost::shared_ptr<AutomationControl> c, string
_slider.set_default_value (normal);
_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &Control::slider_adjusted));
c->Changed.connect (_connection, MISSING_INVALIDATOR, boost::bind (&Control::control_changed, this), gui_context ());
// dup. currently timers are used :(
//c->Changed.connect (_connection, MISSING_INVALIDATOR, boost::bind (&Control::control_changed, this), gui_context ());
}
Timers::rapid_connect (sigc::mem_fun (*this, &Control::control_changed));
// yuck, do we really need to do this?
// according to c404374 this is only needed for send automation
timer_connection = Timers::rapid_connect (sigc::mem_fun (*this, &Control::control_changed));
control_changed ();
set_tooltip ();
@ -577,6 +581,11 @@ ProcessorEntry::Control::Control (boost::shared_ptr<AutomationControl> c, string
set_no_tooltip_whatsoever (_slider);
}
ProcessorEntry::Control::~Control ()
{
timer_connection.disconnect ();
}
void
ProcessorEntry::Control::set_tooltip ()
{
@ -645,9 +654,13 @@ ProcessorEntry::Control::control_changed ()
_button.set_active (c->get_value() > 0.5);
} else {
_adjustment.set_value (c->internal_to_interface(c->get_value ()));
set_tooltip ();
// as long as rapid timers are used, only update the tooltip
// if the value has changed.
const double nval = c->internal_to_interface (c->get_value ());
if (_adjustment.get_value() != nval) {
_adjustment.set_value (nval);
set_tooltip ();
}
}
_ignore_ui_adjustment = false;

View File

@ -169,6 +169,7 @@ private:
class Control : public sigc::trackable {
public:
Control (boost::shared_ptr<ARDOUR::AutomationControl>, std::string const &);
~Control ();
void set_visible (bool);
void add_state (XMLNode *) const;
@ -203,6 +204,7 @@ private:
PBD::ScopedConnection _connection;
bool _visible;
std::string _name;
sigc::connection timer_connection;
};
std::list<Control*> _controls;