From bfb749b74f3b46ffb3751f6d8cfaaeff7ebfdecb Mon Sep 17 00:00:00 2001 From: Igor Baranov Date: Fri, 11 Sep 2026 02:42:06 -0700 Subject: [PATCH] fix: preserve channel select LEDs across bank changes --- src/ctrl-client.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/ctrl-client.cpp b/src/ctrl-client.cpp index 426c92d..01fd93b 100644 --- a/src/ctrl-client.cpp +++ b/src/ctrl-client.cpp @@ -509,6 +509,8 @@ void CtrlClient::syncSurface(bool fullSync) if (config->IsModelX32FullOrCompactOrProducerOrM32OrM32R()) { + bool faderBankChanged = false; + if (config->HasParameterChanged(BANKING_INPUT)) { OMCBankId bankToSwitchTo = (OMCBankId)(config->GetUint(BANKING_INPUT)); @@ -564,6 +566,7 @@ void CtrlClient::syncSurface(bool fullSync) { surface->LoadBank(OMCBankTarget::InputSection, (OMCBankId)(config->GetUint(BANKING_INPUT))); } + faderBankChanged = true; } if (config->HasParameterChanged(BANKING_BUS)) @@ -584,6 +587,15 @@ void CtrlClient::syncSurface(bool fullSync) } surface->LoadBank(OMCBankTarget::BusSection, bank); + faderBankChanged = true; + } + + // Some surface firmwares assert the main Select LED while changing + // layers. Re-evaluate every Select binding after the new bank is loaded + // so the LEDs continue to represent SELECTED_CHANNEL. + if (faderBankChanged) + { + config->Refresh(SELECTED_CHANNEL); } if (config->HasParameterChanged(BANKING_ASSIGN))