I’m experiencing unexpected and annoying behaviour of non-latched buttons when handling automation in Ableton Live and Reaper. A test example is below. It basically only has some latched and some non-latched buttons. I export vst instrument and try to expose the automation lane/envelope for any button.
Ableton Live: click on a non-latched button, envelope is exposed, hover mouse over (without clicking) any non-latched button, envelope is exposed - this is not happening for any other widget (test with latched buttons).
Reaper: use “Show/hide track envelope for last touched FX parameter” to expose the envelope. In Trim/Read automation mode non-latched buttons can become “latched” - even after clearing automation. I’m not quite a Reaper power user, but something seems strange.
The problem with this seems minor at first, but when you have a lot of widgets and you accidentally pass the mouse over a non-latched button it will expose its envelope instead of the intended one. It makes it difficult to map (learn) MIDI controllers and I suspect something else is amiss in the guts.
Something seems wrong with how communication between the non-latched buttons and the host is handled or am I missing something? Tested with Cabbage 2.8.120
And I though I’d mention another strange behaviour, which might be related or not: having a radio group of non-automatable buttons (B) and a slider (S) updating B - not in the example below. Reaper automation of S resulted in situations when multiple B remained ON. I could restore normal radio group behaviour by clicking on the buttons. It seems this happens when the plugin is not visible (its GUI is not open).
<Cabbage>
form caption("latched vs non-latched buttons") size(400, 100), colour(58, 110, 182), pluginId("tlvn")
button bounds(76, 24, 80, 20) channel("NL1") latched(0) text("nonLatch1", "nonLatch1") colour:0(100, 80, 0, 255) colour:1(255, 255, 0, 255) fontColour:1(0, 0, 0, 255)
button bounds(166, 24, 80, 20) channel("NL2") latched(0) text("nonLatch2", "nonLatch2") colour:0(100, 80, 0, 255) colour:1(255, 255, 0, 255) fontColour:1(0, 0, 0, 255)
button bounds(254, 24, 80, 20) channel("NL3") latched(0) text("nonLatch3", "nonLatch3") colour:0(100, 80, 0, 255) colour:1(255, 255, 0, 255) fontColour:1(0, 0, 0, 255)
button bounds(76, 56, 80, 20) channel("L1") latched(1) text("latch1", "latch1") colour:0(100, 80, 0, 255) colour:1(255, 255, 0, 255) fontColour:1(0, 0, 0, 255)
button bounds(166, 56, 80, 20) channel("L2") latched(1) text("latch2", "latch2") colour:0(100, 80, 0, 255) colour:1(255, 255, 0, 255) fontColour:1(0, 0, 0, 255)
button bounds(254, 56, 80, 20) channel("L3") latched(1) text("latch3", "latch3") colour:0(100, 80, 0, 255) colour:1(255, 255, 0, 255) fontColour:1(0, 0, 0, 255)
</Cabbage>
<CsoundSynthesizer>
<CsOptions>
-n -d -+rtmidi=NULL -M0
</CsOptions>
<CsInstruments>
ksmps = 32
nchnls = 2
0dbfs = 1
instr 1
endin
</CsInstruments>
<CsScore>
i1 0 z
</CsScore>
</CsoundSynthesizer>