13
0

OSC: Further fixes so multiple controls can touch at once.

This commit is contained in:
Len Ovens 2017-05-20 10:17:31 -07:00
parent ab069b1372
commit b3fb75fead

View File

@ -2343,11 +2343,9 @@ OSC::touch_detect (const char *path, lo_arg **argv, int argc, lo_message msg)
control->stop_touch (true, control->session().transport_frame()); control->stop_touch (true, control->session().transport_frame());
} }
// just in case some crazy surface starts sending control values before touch // just in case some crazy surface starts sending control values before touch
for (FakeTouchMap::iterator x = _touch_timeout.begin(); x != _touch_timeout.end(); x++) { FakeTouchMap::iterator x = _touch_timeout.find(control);
if ((*x).first == control) { if (x != _touch_timeout.end()) {
_touch_timeout.erase (x); _touch_timeout.erase (x);
break;
}
} }
} }
} }
@ -3975,14 +3973,15 @@ OSC::periodic (void)
co->tick(); co->tick();
} }
} }
for (FakeTouchMap::iterator x = _touch_timeout.begin(); x != _touch_timeout.end(); x++) { for (FakeTouchMap::iterator x = _touch_timeout.begin(); x != _touch_timeout.end();) {
_touch_timeout[(*x).first] = (*x).second - 1; _touch_timeout[(*x).first] = (*x).second - 1;
if (!(*x).second) { if (!(*x).second) {
boost::shared_ptr<ARDOUR::AutomationControl> ctrl = (*x).first; boost::shared_ptr<ARDOUR::AutomationControl> ctrl = (*x).first;
// turn touch off // turn touch off
ctrl->stop_touch (true, ctrl->session().transport_frame()); ctrl->stop_touch (true, ctrl->session().transport_frame());
_touch_timeout.erase (x); _touch_timeout.erase (x++);
break; } else {
x++;
} }
} }
return true; return true;