diff --git a/CHANGELOG.md b/CHANGELOG.md index ff9f3f4b..f0d4574d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ Unreleased` header. - On X11, fix an issue where floating point data from the server is misinterpreted during a drag and drop operation. - On X11, fix a bug where focusing the window would panic. +- On macOS, fix `refresh_rate_millihertz`. # 0.29.4 diff --git a/src/platform_impl/macos/monitor.rs b/src/platform_impl/macos/monitor.rs index bc9992d4..16e92f3b 100644 --- a/src/platform_impl/macos/monitor.rs +++ b/src/platform_impl/macos/monitor.rs @@ -7,7 +7,9 @@ use core_foundation::{ base::{CFRelease, TCFType}, string::CFString, }; -use core_graphics::display::{CGDirectDisplayID, CGDisplay, CGDisplayBounds}; +use core_graphics::display::{ + CGDirectDisplayID, CGDisplay, CGDisplayBounds, CGDisplayCopyDisplayMode, +}; use objc2::rc::Id; use super::appkit::NSScreen; @@ -216,6 +218,12 @@ impl MonitorHandle { pub fn refresh_rate_millihertz(&self) -> Option { unsafe { + let current_display_mode = NativeDisplayMode(CGDisplayCopyDisplayMode(self.0) as _); + let refresh_rate = ffi::CGDisplayModeGetRefreshRate(current_display_mode.0); + if refresh_rate > 0.0 { + return Some((refresh_rate * 1000.0).round() as u32); + } + let mut display_link = std::ptr::null_mut(); if ffi::CVDisplayLinkCreateWithCGDisplay(self.0, &mut display_link) != ffi::kCVReturnSuccess