diff --git a/src/surge-xt/gui/SurgeGUIEditorValueCallbacks.cpp b/src/surge-xt/gui/SurgeGUIEditorValueCallbacks.cpp index 879ea3187b8..dcb882f220f 100644 --- a/src/surge-xt/gui/SurgeGUIEditorValueCallbacks.cpp +++ b/src/surge-xt/gui/SurgeGUIEditorValueCallbacks.cpp @@ -631,8 +631,18 @@ int32_t SurgeGUIEditor::controlModifierClicked(Surge::GUI::IComponentTagValue *c { if (lfoDisplay->isMSEG() || lfoDisplay->isFormula()) { - auto tag = lfoDisplay->isMSEG() ? MSEG_EDITOR : FORMULA_EDITOR; - lfoDisplay->showLFODisplayPopupMenu(tag); + std::string olname = lfoDisplay->isMSEG() ? "MSEG Editor" : "Formula Editor"; + std::string helpname = lfoDisplay->isMSEG() ? "mseg-editor" : "formula-editor"; + + auto msurl = SurgeGUIEditor::helpURLForSpecial(&(synth->storage), helpname); + auto hurl = SurgeGUIEditor::fullyResolvedHelpURL(msurl); + + auto hmen = std::make_unique(olname, hurl); + hmen->setSkin(currentSkin, bitmapStore); + auto contextMenu = juce::PopupMenu(); + contextMenu.addCustomItem(-1, std::move(hmen)); + contextMenu.showMenuAsync(popupMenuOptions(control->asJuceComponent(), false), + Surge::GUI::makeEndHoverCallback(control)); } } diff --git a/src/surge-xt/gui/overlays/LuaEditors.cpp b/src/surge-xt/gui/overlays/LuaEditors.cpp index 5e552a55c14..c6b9a6ee2b4 100644 --- a/src/surge-xt/gui/overlays/LuaEditors.cpp +++ b/src/surge-xt/gui/overlays/LuaEditors.cpp @@ -494,7 +494,8 @@ struct FormulaControlArea : public juce::Component, editor->addHelpHeaderTo("Formula Editor", hurl, contextMenu); - contextMenu.showMenuAsync(editor->popupMenuOptions(this, false)); + contextMenu.showMenuAsync(editor->popupMenuOptions(this, false), + Surge::GUI::makeEndHoverCallback(c)); } break; default: diff --git a/src/surge-xt/gui/overlays/MSEGEditor.cpp b/src/surge-xt/gui/overlays/MSEGEditor.cpp index bc5076aecff..c41f9938abf 100644 --- a/src/surge-xt/gui/overlays/MSEGEditor.cpp +++ b/src/surge-xt/gui/overlays/MSEGEditor.cpp @@ -3038,7 +3038,8 @@ int32_t MSEGControlRegion::controlModifierClicked(Surge::GUI::IComponentTagValue showTypein); } - contextMenu.showMenuAsync(sge->popupMenuOptions()); + contextMenu.showMenuAsync(sge->popupMenuOptions(), + Surge::GUI::makeEndHoverCallback(pControl)); } return 1; } diff --git a/src/surge-xt/gui/widgets/LFOAndStepDisplay.cpp b/src/surge-xt/gui/widgets/LFOAndStepDisplay.cpp index f91b8f06ab6..7e96dd972b6 100644 --- a/src/surge-xt/gui/widgets/LFOAndStepDisplay.cpp +++ b/src/surge-xt/gui/widgets/LFOAndStepDisplay.cpp @@ -1752,9 +1752,6 @@ void LFOAndStepDisplay::shiftRight() void LFOAndStepDisplay::mouseExit(const juce::MouseEvent &event) { - lfoTypeHover = -1; - stepSeqShiftHover = -1; - if (overWaveform) { enterExitWaveform(false); diff --git a/src/surge-xt/gui/widgets/XMLConfiguredMenus.h b/src/surge-xt/gui/widgets/XMLConfiguredMenus.h index b35fea767a0..b177f113342 100644 --- a/src/surge-xt/gui/widgets/XMLConfiguredMenus.h +++ b/src/surge-xt/gui/widgets/XMLConfiguredMenus.h @@ -156,6 +156,9 @@ struct OscillatorMenu : public juce::Component, } void endHover() override { + if (stuckHover) + return; + isHovered = false; repaint(); }