review pass 4

This commit is contained in:
Will Temple
2026-05-16 15:23:43 -04:00
parent 056f356065
commit d9ac6bfeb8

View File

@@ -201,12 +201,13 @@ impl Drop for ObjcStrong {
}
struct NativeWindow {
window: ObjcStrong,
#[allow(dead_code)]
view: *mut AnyObject,
delegate: Option<ObjcStrong>,
_metal_layer: Retained<CAMetalLayer>,
// Renderer/surface must drop before the AppKit objects whose raw handles it
// was created from.
renderer: Option<WgpuSceneRenderer>,
_metal_layer: Retained<CAMetalLayer>,
view: ObjcStrong,
delegate: Option<ObjcStrong>,
window: ObjcStrong,
}
impl NativeWindow {
@@ -219,7 +220,7 @@ impl NativeWindow {
}
fn view_object(&self) -> *mut AnyObject {
self.view
self.view.as_ptr()
}
fn set_title(&self, title: &str) {
@@ -256,12 +257,12 @@ impl NativeWindow {
}
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) {
unsafe {
let _: () = objc2::msg_send![self.view, displayIfNeeded];
let _: () = objc2::msg_send![self.view_object(), displayIfNeeded];
let _: () = objc2::msg_send![self.window_object(), displayIfNeeded];
}
}
@@ -1172,10 +1173,10 @@ fn drain_platform_commands(state: &Rc<RefCell<MacosState>>) -> bool {
unsafe {
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() {
*slot = None;
}
set_command_wake_hook(None);
break;
}
}
@@ -1588,7 +1589,7 @@ fn create_native_window(window: &MacosWindow, app: *mut AnyObject) -> Option<Nat
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_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 delegate_class = window_delegate_class();
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>()];
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 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 {
window: window_owner,
view: view_obj,
delegate: Some(delegate_owner),
_metal_layer: metal_layer,
renderer,
_metal_layer: metal_layer,
view: view_owner,
delegate: Some(delegate_owner),
window: window_owner,
})
}