Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

macOS: don't implicitly activate background apps #3997

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

lunixbochs
Copy link
Contributor

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:

builder.with_activation_policy(ActivationPolicy::Prohibited)

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)

Copy link
Member

@madsmtm madsmtm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ugh, I really dislike the way we do activations, I kinda feel like the proper thing to do would be to only call activateIgnoringOtherApps in unbundled applications. Would that work for your use-case?

I also just merged #3961, could you rebase on top of that?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

2 participants