I create a CallOutBox
to handle color selection in a preferences window as usual:
void mouseDown (const juce::MouseEvent&) override
{
auto t = std::make_unique<MyGreatColourSelector> (getColour());
juce::CallOutBox::launchAsynchronously (std::move (t), getScreenBounds(), nullptr);
}
But when the preferences window is closed, the CallOutBox
remains.
What is the best strategy to force the dismiss in that case?
Have you tried passing a pointer to the window to the third argument of launchAsynchronously
? It takes a pointer to a component to be the box’s parent - I’d assume that the box would then be removed when the parent is removed.
I’ve just tried quickly. It works but it can’t be drawn outside the parent’s window now. I would prefer the other behavior. And the arrow position is a bit strange (but it think i could solve that).
I resolved the problem by creating a global tracker of CallOutBox
.
Registered CallOutBox
are auto-magically dismissed when the owner is destructed.
WIP /
CallOutBoxRegister.cpp (1.5 KB)
CallOutBoxRegister.hpp (4.3 KB)