gint
GainMeterBase::start_gain_touch (GdkEventButton* ev)
{
- _io->gain_control()->alist()->start_touch ();
+ _io->gain_control()->start_touch ();
return FALSE;
}
gint
GainMeterBase::end_gain_touch (GdkEventButton* ev)
{
- _io->gain_control()->alist()->stop_touch ();
+ _io->gain_control()->stop_touch ();
return FALSE;
}
}
inline void start_touch() {
+ set_touching (true);
return ((ARDOUR::AutomationList*)_list.get())->start_touch();
}
inline void stop_touch() {
+ set_touching (false);
return ((ARDOUR::AutomationList*)_list.get())->stop_touch();
}
Controllable::Controllable (std::string name)
: _name (name)
+ , _touching (false)
{
if (registry_lock == 0) {
registry_lock = new Glib::Mutex;
int set_state (const XMLNode&);
XMLNode& get_state ();
- std::string name() const { return _name; }
+ std::string name() const { return _name; }
+ bool touching () const { return _touching; }
+
+ void set_touching (bool yn) { _touching = yn; }
static Controllable* by_id (const PBD::ID&);
static Controllable* by_name (const std::string&);
private:
std::string _name;
+ bool _touching;
void add ();
void remove ();
void
MIDIControllable::midi_sense_controller (Parser &, EventTwoBytes *msg)
{
+ if (controllable.touching()) {
+ return; // to prevent feedback fights when e.g. dragging a UI slider
+ }
+
if (control_additional == msg->controller_number) {
if (!bistate) {
controllable.set_value (midi_to_control(msg->value));