OSC: Catch case of surface sending fader move before touch
This commit is contained in:
parent
84e1a216bc
commit
6926b7eb75
@ -2335,14 +2335,21 @@ OSC::touch_detect (const char *path, lo_arg **argv, int argc, lo_message msg)
|
|||||||
if (control) {
|
if (control) {
|
||||||
if (touch) {
|
if (touch) {
|
||||||
//start touch
|
//start touch
|
||||||
if (!control->touching ()) {
|
if (control->automation_state() == Touch && !control->touching ()) {
|
||||||
control->start_touch (control->session().transport_frame());
|
control->start_touch (control->session().transport_frame());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// end touch
|
// end touch
|
||||||
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
|
||||||
|
for (FakeTouchMap::iterator x = _touch_timeout.begin(); x != _touch_timeout.end();) {
|
||||||
|
if ((*x).first == control) {
|
||||||
|
x = _touch_timeout.erase (x);
|
||||||
|
} else {
|
||||||
|
++x;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2354,10 +2361,10 @@ OSC::fake_touch (boost::shared_ptr<ARDOUR::AutomationControl> ctrl)
|
|||||||
{
|
{
|
||||||
if (ctrl) {
|
if (ctrl) {
|
||||||
//start touch
|
//start touch
|
||||||
if (!ctrl->touching ()) {
|
if (ctrl->automation_state() == Touch && !ctrl->touching ()) {
|
||||||
ctrl->start_touch (ctrl->session().transport_frame());
|
ctrl->start_touch (ctrl->session().transport_frame());
|
||||||
}
|
|
||||||
_touch_timeout[ctrl] = 10;
|
_touch_timeout[ctrl] = 10;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user