+void
+AutomationControl::set_value (double val, PBD::Controllable::GroupControlDisposition gcd)
+{
+ if (!writable()) {
+ return;
+ }
+
+ /* enforce strict double/boolean value mapping */
+
+ if (_desc.toggled) {
+ if (val != 0.0) {
+ val = 1.0;
+ }
+ }
+
+ if (check_rt (val, gcd)) {
+ /* change has been queued to take place in an RT context */
+ return;
+ }
+
+ if (_group && _group->use_me (gcd)) {
+ _group->set_group_value (shared_from_this(), val);
+ } else {
+ actually_set_value (val, gcd);
+ }
+}
+