From 293326cd94197158e35b08a039bdc7003ab5a807 Mon Sep 17 00:00:00 2001 From: Len Ovens Date: Sat, 7 Apr 2018 10:42:11 -0700 Subject: [PATCH] OSC do not recalc select if still valid --- libs/surfaces/osc/osc.cc | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc index fdbdf206f6..3e1e8c4c0b 100644 --- a/libs/surfaces/osc/osc.cc +++ b/libs/surfaces/osc/osc.cc @@ -4437,17 +4437,23 @@ OSC::_strip_select (boost::shared_ptr s, lo_address addr) return -1; } OSCSurface *sur = get_surface(addr, true); - boost::shared_ptr old_sel = sur->select; + boost::weak_ptr o_sel = sur->select; + boost::shared_ptr old_sel= o_sel.lock (); + if (!s) { - // expand doesn't point to a stripable, turn it off and use select - sur->expand = 0; - sur->expand_enable = false; - if (ControlProtocol::first_selected_stripable()) { - s = ControlProtocol::first_selected_stripable(); + // we got a null strip check that old strip is valid + if (old_sel && sur->expand_enable) { + s = old_sel; } else { - s = session->master_out (); - } + sur->expand = 0; + sur->expand_enable = false; + if (ControlProtocol::first_selected_stripable()) { + s = ControlProtocol::first_selected_stripable(); + } else { + s = session->master_out (); + } _select = s; + } } if (s != old_sel) { sur->select = s;