From b3fb75feadf28e35c302149778b544172f808a09 Mon Sep 17 00:00:00 2001 From: Len Ovens Date: Sat, 20 May 2017 10:17:31 -0700 Subject: OSC: Further fixes so multiple controls can touch at once. --- libs/surfaces/osc/osc.cc | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc index 05eeab5b0c..70b02a7501 100644 --- a/libs/surfaces/osc/osc.cc +++ b/libs/surfaces/osc/osc.cc @@ -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()); } // just in case some crazy surface starts sending control values before touch - for (FakeTouchMap::iterator x = _touch_timeout.begin(); x != _touch_timeout.end(); x++) { - if ((*x).first == control) { - _touch_timeout.erase (x); - break; - } + FakeTouchMap::iterator x = _touch_timeout.find(control); + if (x != _touch_timeout.end()) { + _touch_timeout.erase (x); } } } @@ -3975,14 +3973,15 @@ OSC::periodic (void) 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; if (!(*x).second) { boost::shared_ptr ctrl = (*x).first; // turn touch off ctrl->stop_touch (true, ctrl->session().transport_frame()); - _touch_timeout.erase (x); - break; + _touch_timeout.erase (x++); + } else { + x++; } } return true; -- cgit v1.2.3