X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fautomation_controller.cc;h=c7860c53cb5f5e89179ea8cc96980cc4dbae5731;hb=a79fe239355b8c6f4e86da2eb1eec43c6c4dd052;hp=0b040a30d9f7d283224c7cd5c5cde0135045c135;hpb=1de68d791725ca80da08261676a4edbe96600ed4;p=ardour.git diff --git a/gtk2_ardour/automation_controller.cc b/gtk2_ardour/automation_controller.cc index 0b040a30d9..c7860c53cb 100644 --- a/gtk2_ardour/automation_controller.cc +++ b/gtk2_ardour/automation_controller.cc @@ -70,6 +70,7 @@ AutomationController::AutomationController(boost::shared_ptr , _controllable(ac) , _adjustment(adj) , _ignore_change(false) + , _grabbed(false) { if (ac->toggled()) { ArdourButton* but = manage(new ArdourButton()); @@ -165,6 +166,13 @@ AutomationController::display_effective_value () { double const interface_value = _controllable->internal_to_interface(_controllable->get_value()); + if (_grabbed) { + /* we cannot use _controllable->touching() here + * because that's only set in Write or Touch mode. + * Besides ctrl-surfaces may also set touching() + */ + return; + } if (_adjustment->get_value () != interface_value) { _ignore_change = true; _adjustment->set_value (interface_value); @@ -197,6 +205,7 @@ AutomationController::value_adjusted () void AutomationController::start_touch() { + _grabbed = true; _controllable->start_touch (_controllable->session().transport_sample()); } @@ -204,6 +213,10 @@ void AutomationController::end_touch () { _controllable->stop_touch (_controllable->session().transport_sample()); + if (_grabbed) { + _grabbed = false; + display_effective_value (); + } } bool