your recent (Nov 15 2014) modifications to ComboBox broke the virtual showPopup() behaviour.
Since the private member menuActive is set to 'true' inside the private method showPopupIfNotActive() before it calls showPopup() and reset to 'false' inside the private popupMenuFinishedCallback() method that is only accessible to the default showPopup() method, if I override showPopup() I can only open the menu once.
I assumed you must be calling it directly because internally, everything calls showPopupIfNotActive(), which will set the flags correctly. Only a direct call to shopPopup would fail to set the flags AFAICT, and that doesn't happen anywhere in the juce codebase.
showPopupIfNotActive() only sets the menuActive flag to true.
As I tried to explain in my initial post, the problem is that the menuActive flag is only reset to false if you use the default showPopup() method, that does that through the popupMenuFinishedCallback().
If showPopup() is redefined, since menuActive is not directly or indirectly accessible outside of the ComboBox class, there is no way to reset it and thus showPopup() won't be called the next time showPopupIfNotActive() is called.
Ah.. sorry, I misread your original post. Ok, that's a valid point, but this is why I added the virtual method addItemsToMenu() - if you're creating a custom menu it's much better to just override that method rather than showPopup
No, since I'm using the redefined showPopup() method to display a popover based upon a CallOutBox. I'm using an entirely different widget and this is why I asked you to make showPopup() virtual.
Adding hacky single-purpose protected methods is not the kind of thing I was looking for! ..but I just had a quick look and found a different way to refactor it that should do the trick for you and keep the interface clean!