I got a report from someone using xmonad about the juce FileChooserDialog not showing up , and this is something that I could reproduce with the latest juce demo:
- disable the native file chooser with JUCE_DISABLE_NATIVE_FILECHOOSERS
- start xmonad
- launch the juce demo, select the code editor demo, click on the "..." button to browser for files:
semi-randomly (on my config, it certainly depend on the timing and ordering of events) , the dialogs shows up, or not.
I traced it to the following issue: in Component::enterModalState, you have:
ModalComponentManager* const mcm = ModalComponentManager::getInstance(); mcm->startModal (this, deleteWhenDismissed); mcm->attachCallback (this, callback); flags.currentlyModalFlag = true; setVisible (true);
If I trace the calls to ModalComponentManager::ModalItem::componentPeerChanged and ModalItem::componentVisibilityChanged, I get various results -- they can get called in any order before the FileChooser dialog gets displayed, and their component->isShowing() test can return either true or false.
When the last component->isShowing() call returns false, the file chooser dialog is dismissed before it shows up.
The issue is fixed if I move the setVisible(true) call before the mcm->startModal but I'm not sure if that is a correct fix .