Skip to content

Commit

Permalink
Fix device description leak (#2758)
Browse files Browse the repository at this point in the history
* Fix device description leak

* Update CHANGELOG.md

---------

Co-authored-by: Xiaopeng Li <[email protected]>
  • Loading branch information
2 people authored and kchibisov committed May 14, 2023
1 parent 340202f commit 5278441
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 13 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ And please only add new entries to the top of this list, right below the `# Unre
- On macOS, fix empty marked text blocking regular input.
- On macOS, fixed potential panic when getting refresh rate.
- On macOS, fix crash when calling `Window::set_ime_position` from another thread.
- On macOS, fixed memory leak when getting monitor handle.

# 0.28.3

Expand Down
30 changes: 17 additions & 13 deletions src/platform_impl/macos/appkit/screen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,21 +39,25 @@ extern_methods!(
}

pub fn display_id(&self) -> u32 {
let device_description = self.deviceDescription();
let key = ns_string!("NSScreenNumber");

// Retrieve the CGDirectDisplayID associated with this screen
//
// SAFETY: The value from @"NSScreenNumber" in deviceDescription is guaranteed
// to be an NSNumber. See documentation for `deviceDescription` for details:
// <https://developer.apple.com/documentation/appkit/nsscreen/1388360-devicedescription?language=objc>
let obj = device_description
.get(ns_string!("NSScreenNumber"))
.expect("failed getting screen display id from device description");
let obj: *const Object = obj;
let obj: *const NSNumber = obj.cast();
let obj: &NSNumber = unsafe { &*obj };
objc2::rc::autoreleasepool(|_| {
let device_description = self.deviceDescription();

obj.as_u32()
// Retrieve the CGDirectDisplayID associated with this screen
//
// SAFETY: The value from @"NSScreenNumber" in deviceDescription is guaranteed
// to be an NSNumber. See documentation for `deviceDescription` for details:
// <https://developer.apple.com/documentation/appkit/nsscreen/1388360-devicedescription?language=objc>
let obj = device_description
.get(key)
.expect("failed getting screen display id from device description");
let obj: *const Object = obj;
let obj: *const NSNumber = obj.cast();
let obj: &NSNumber = unsafe { &*obj };

obj.as_u32()
})
}

#[sel(backingScaleFactor)]
Expand Down

0 comments on commit 5278441

Please sign in to comment.