Ah, it seems a problem already discussed.
Surely what I’m going to say you know, but just in case …
Tracing the code:
void sendMouseUp (Component* const comp, const Point<int>& screenPos, const Time& time)
//DBG ("Mouse " + String (source.getIndex()) + " up: " + comp->getLocalPoint (nullptr, screenPos).toString() + " - Comp: " + String::toHexString ((int) comp));
comp->internalMouseUp (source, comp->getLocalPoint (nullptr, screenPos), time, getCurrentModifiers());
Here always arrives, then goto:
void Component::internalMouseUp (MouseInputSource& source, const Point<int>& relativePos, const Time& time, const ModifierKeys& oldModifiers)
flags.mouseDownFlag = false;
The first time, “flags.mouseDownFlag” is “true”, and the routine continues, and send the “mouseUp”. The second time is “false”, so no execute MouseUp.