mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2025-01-11 21:31:29 +11:00
Make views explicitly layer-backed on macOS Mojave. (#685)
On Mojave, views automatically become layer-backed shortly after being added to a window. Changing the layer-backedness of a view breaks the association between the view and its associated OpenGL context. To work around this, on Mojave we explicitly make the view layer-backed up front so that AppKit doesn't do it itself and break the association with its context. This was breaking the `window` example in `glutin`.
This commit is contained in:
parent
0fca8e8cb5
commit
d2d127a4c4
|
@ -24,6 +24,7 @@
|
||||||
- Add optional `serde` feature with implementations of `Serialize`/`Deserialize` for DPI types and various event types.
|
- Add optional `serde` feature with implementations of `Serialize`/`Deserialize` for DPI types and various event types.
|
||||||
- Add `PartialEq`, `Eq`, and `Hash` implementations on public types that could have them but were missing them.
|
- Add `PartialEq`, `Eq`, and `Hash` implementations on public types that could have them but were missing them.
|
||||||
- On X11, drag-and-drop receiving an unsupported drop type can no longer cause the WM to freeze.
|
- On X11, drag-and-drop receiving an unsupported drop type can no longer cause the WM to freeze.
|
||||||
|
- Fix issue whereby the OpenGL context would not appear at startup on macOS Mojave (#1069).
|
||||||
|
|
||||||
# Version 0.17.2 (2018-08-19)
|
# Version 0.17.2 (2018-08-19)
|
||||||
|
|
||||||
|
|
|
@ -31,9 +31,9 @@ objc = "0.2.3"
|
||||||
|
|
||||||
[target.'cfg(target_os = "macos")'.dependencies]
|
[target.'cfg(target_os = "macos")'.dependencies]
|
||||||
objc = "0.2.3"
|
objc = "0.2.3"
|
||||||
cocoa = "0.17"
|
cocoa = "0.18.4"
|
||||||
core-foundation = "0.6"
|
core-foundation = "0.6"
|
||||||
core-graphics = "0.16"
|
core-graphics = "0.17.3"
|
||||||
|
|
||||||
[target.'cfg(target_os = "windows")'.dependencies.winapi]
|
[target.'cfg(target_os = "windows")'.dependencies.winapi]
|
||||||
version = "0.3.6"
|
version = "0.3.6"
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
use std;
|
use std;
|
||||||
use std::cell::{Cell, RefCell};
|
use std::cell::{Cell, RefCell};
|
||||||
|
use std::f64;
|
||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
use std::os::raw::c_void;
|
use std::os::raw::c_void;
|
||||||
use std::sync::Weak;
|
use std::sync::Weak;
|
||||||
|
@ -850,6 +851,16 @@ impl Window2 {
|
||||||
let view = new_view(window, shared);
|
let view = new_view(window, shared);
|
||||||
view.non_nil().map(|view| {
|
view.non_nil().map(|view| {
|
||||||
view.setWantsBestResolutionOpenGLSurface_(YES);
|
view.setWantsBestResolutionOpenGLSurface_(YES);
|
||||||
|
|
||||||
|
// On Mojave, views automatically become layer-backed shortly after being added to
|
||||||
|
// a window. Changing the layer-backedness of a view breaks the association between
|
||||||
|
// the view and its associated OpenGL context. To work around this, on Mojave we
|
||||||
|
// explicitly make the view layer-backed up front so that AppKit doesn't do it
|
||||||
|
// itself and break the association with its context.
|
||||||
|
if f64::floor(appkit::NSAppKitVersionNumber) > appkit::NSAppKitVersionNumber10_12 {
|
||||||
|
view.setWantsLayer(YES);
|
||||||
|
}
|
||||||
|
|
||||||
window.setContentView_(*view);
|
window.setContentView_(*view);
|
||||||
window.makeFirstResponder_(*view);
|
window.makeFirstResponder_(*view);
|
||||||
view
|
view
|
||||||
|
|
Loading…
Reference in a new issue