review pass 4
This commit is contained in:
@@ -201,12 +201,13 @@ impl Drop for ObjcStrong {
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct NativeWindow {
|
struct NativeWindow {
|
||||||
window: ObjcStrong,
|
// Renderer/surface must drop before the AppKit objects whose raw handles it
|
||||||
#[allow(dead_code)]
|
// was created from.
|
||||||
view: *mut AnyObject,
|
|
||||||
delegate: Option<ObjcStrong>,
|
|
||||||
_metal_layer: Retained<CAMetalLayer>,
|
|
||||||
renderer: Option<WgpuSceneRenderer>,
|
renderer: Option<WgpuSceneRenderer>,
|
||||||
|
_metal_layer: Retained<CAMetalLayer>,
|
||||||
|
view: ObjcStrong,
|
||||||
|
delegate: Option<ObjcStrong>,
|
||||||
|
window: ObjcStrong,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl NativeWindow {
|
impl NativeWindow {
|
||||||
@@ -219,7 +220,7 @@ impl NativeWindow {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn view_object(&self) -> *mut AnyObject {
|
fn view_object(&self) -> *mut AnyObject {
|
||||||
self.view
|
self.view.as_ptr()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_title(&self, title: &str) {
|
fn set_title(&self, title: &str) {
|
||||||
@@ -256,12 +257,12 @@ impl NativeWindow {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn in_live_resize(&self) -> bool {
|
fn in_live_resize(&self) -> bool {
|
||||||
unsafe { objc2::msg_send![self.view, inLiveResize] }
|
unsafe { objc2::msg_send![self.view_object(), inLiveResize] }
|
||||||
}
|
}
|
||||||
|
|
||||||
fn display_if_needed(&self) {
|
fn display_if_needed(&self) {
|
||||||
unsafe {
|
unsafe {
|
||||||
let _: () = objc2::msg_send![self.view, displayIfNeeded];
|
let _: () = objc2::msg_send![self.view_object(), displayIfNeeded];
|
||||||
let _: () = objc2::msg_send![self.window_object(), displayIfNeeded];
|
let _: () = objc2::msg_send![self.window_object(), displayIfNeeded];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1172,10 +1173,10 @@ fn drain_platform_commands(state: &Rc<RefCell<MacosState>>) -> bool {
|
|||||||
unsafe {
|
unsafe {
|
||||||
let _: () = objc2::msg_send![app, stop: std::ptr::null_mut::<AnyObject>()];
|
let _: () = objc2::msg_send![app, stop: std::ptr::null_mut::<AnyObject>()];
|
||||||
}
|
}
|
||||||
|
set_command_wake_hook(None);
|
||||||
if let Ok(mut slot) = run_loop_wake_handle().lock() {
|
if let Ok(mut slot) = run_loop_wake_handle().lock() {
|
||||||
*slot = None;
|
*slot = None;
|
||||||
}
|
}
|
||||||
set_command_wake_hook(None);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1588,7 +1589,7 @@ fn create_native_window(window: &MacosWindow, app: *mut AnyObject) -> Option<Nat
|
|||||||
let view_class = content_view_class();
|
let view_class = content_view_class();
|
||||||
let view_obj: *mut AnyObject = unsafe { objc2::msg_send![view_class, alloc] };
|
let view_obj: *mut AnyObject = unsafe { objc2::msg_send![view_class, alloc] };
|
||||||
let view_obj: *mut AnyObject = unsafe { objc2::msg_send![view_obj, initWithFrame: rect] };
|
let view_obj: *mut AnyObject = unsafe { objc2::msg_send![view_obj, initWithFrame: rect] };
|
||||||
let mut view_owner = unsafe { ObjcStrong::from_owned(view_obj) }?;
|
let view_owner = unsafe { ObjcStrong::from_owned(view_obj) }?;
|
||||||
let view_obj = view_owner.as_ptr();
|
let view_obj = view_owner.as_ptr();
|
||||||
let delegate_class = window_delegate_class();
|
let delegate_class = window_delegate_class();
|
||||||
let delegate_obj: *mut AnyObject = unsafe { objc2::msg_send![delegate_class, new] };
|
let delegate_obj: *mut AnyObject = unsafe { objc2::msg_send![delegate_class, new] };
|
||||||
@@ -1609,10 +1610,6 @@ fn create_native_window(window: &MacosWindow, app: *mut AnyObject) -> Option<Nat
|
|||||||
objc2::msg_send![window_obj, makeKeyAndOrderFront: std::ptr::null_mut::<AnyObject>()];
|
objc2::msg_send![window_obj, makeKeyAndOrderFront: std::ptr::null_mut::<AnyObject>()];
|
||||||
let _: () = objc2::msg_send![app, activateIgnoringOtherApps: true];
|
let _: () = objc2::msg_send![app, activateIgnoringOtherApps: true];
|
||||||
}
|
}
|
||||||
// NSWindow retains its content view. Drop our construction-time ownership so
|
|
||||||
// the window is the single owner from here.
|
|
||||||
view_owner.release_now();
|
|
||||||
|
|
||||||
let metal_layer = configure_metal_surface_layer(view_obj)?;
|
let metal_layer = configure_metal_surface_layer(view_obj)?;
|
||||||
|
|
||||||
let scale_factor: f64 = unsafe { objc2::msg_send![window_obj, backingScaleFactor] };
|
let scale_factor: f64 = unsafe { objc2::msg_send![window_obj, backingScaleFactor] };
|
||||||
@@ -1630,11 +1627,11 @@ fn create_native_window(window: &MacosWindow, app: *mut AnyObject) -> Option<Nat
|
|||||||
}
|
}
|
||||||
|
|
||||||
Some(NativeWindow {
|
Some(NativeWindow {
|
||||||
window: window_owner,
|
|
||||||
view: view_obj,
|
|
||||||
delegate: Some(delegate_owner),
|
|
||||||
_metal_layer: metal_layer,
|
|
||||||
renderer,
|
renderer,
|
||||||
|
_metal_layer: metal_layer,
|
||||||
|
view: view_owner,
|
||||||
|
delegate: Some(delegate_owner),
|
||||||
|
window: window_owner,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user