-
Notifications
You must be signed in to change notification settings - Fork 876
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
Allow the user to register the application delegate on macOS and iOS #3758
base: master
Are you sure you want to change the base?
Conversation
ae4da6c
to
33670a2
Compare
33670a2
to
5b45632
Compare
979795a
to
39b651e
Compare
This is a breaking change, although unlikely to matter in practice, since the return value of `application:didFinishLaunchingWithOptions:` is seldom used by the system.
This allows the user to override the application delegate themselves, which opens several doors for customization that were previously closed.
39b651e
to
4a53350
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm starting to understand the MacOS backend quite a bit now, the cleanup you have done so far is pretty amazing.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not that familiar with observers, but it looks ok-ish? I know that it works by appkit basically signalling you when something happens and you can register a lot of observers.
Also does it affect performance/input latency in any aspect or it's all the same because macOS is just giant message passing infra already and dispatching observer is not slower than dispatching regular methods?
); | ||
// TODO(madsmtm): Use `MainThreadBound` once that is possible in `static`s. | ||
thread_local! { | ||
static GLOBAL: OnceCell<Rc<AppState>> = const { OnceCell::new() }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What's the reason to Rc
thread local global? I'd assume the main reason is that the user creates it in Rc
and shares the pointer with winit, thus it's correctly ref-counted.
And you're using global here just for simplicity?
Register for event-loop lifecycle events using the
NSNotification
API instead of application delegates. This gives the user full control over the application delegate, which opens several doors for customization that were previously closed.In particular, this fixes #1751, closes #3713, fixes #2674, fixes #3499, fixes #3650 and fixes #2141, all by allowing the user to override
[NS|UI]ApplicationDelegate
themselves outside Winit.Also fixes #1281 by listening on notifications instead of using the application delegate.
Resolves part of the macOS side of #2120.
changelog
module if knowledge of this change could be valuable to users