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:
parent
bb79071038
commit
11f51497f3
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user