winit will still call app.activateIgnoringOtherApps on startup.
This usually has no effect, because winit won't be able to activate the app.
But it turns out winit can activate the app while the tray menu is open, so if you open the tray menu while the app is launching, macOS will close the menu and give focus to your background app.
The resulting experience is: user launches your app, opens the tray menu, then the menu quickly closes itself.
(Just adding .with_activate_ignoring_other_apps(false) is not enough to fully work around this, because it's possible to have no application active at this time, in which case your background app will still be activated and the menu will be closed)
This fixes a weird interaction with background-only tray applications on macOS.
If you build an event loop with
EventLoopBuilderExtMacOS
and set it to prohibited activation:winit will still call
app.activateIgnoringOtherApps
on startup. This usually has no effect, because winit won't be able to activate the app. But it turns out winit can activate the app while the tray menu is open, so if you open the tray menu while the app is launching, macOS will close the menu and give focus to your background app.The resulting experience is: user launches your app, opens the tray menu, then the menu quickly closes itself.
(Just adding
.with_activate_ignoring_other_apps(false)
is not enough to fully work around this, because it's possible to have no application active at this time, in which case your background app will still be activated and the menu will be closed)