From 5f08e01f906eb3ec930e1503c46d5d867a542143 Mon Sep 17 00:00:00 2001 From: Ryan Zimmerman Date: Mon, 24 Jun 2024 23:15:19 -0700 Subject: [PATCH] Adding an option (disabled by default) to disable the notch avoidance so you can use the full screen if your terminal config already handles the notch. --- config/src/config.rs | 3 ++ window/src/os/macos/window.rs | 68 ++++++++++++++++++----------------- 2 files changed, 38 insertions(+), 33 deletions(-) diff --git a/config/src/config.rs b/config/src/config.rs index 5b099edc7..fc77a4543 100644 --- a/config/src/config.rs +++ b/config/src/config.rs @@ -715,6 +715,9 @@ pub struct Config { #[dynamic(default)] pub native_macos_fullscreen_mode: bool, + #[dynamic(default)] + pub macos_fullscreen_avoid_notch: bool, + #[dynamic(default = "default_word_boundary")] pub selection_word_boundary: String, diff --git a/window/src/os/macos/window.rs b/window/src/os/macos/window.rs index 7576e72b6..5137961ae 100644 --- a/window/src/os/macos/window.rs +++ b/window/src/os/macos/window.rs @@ -879,42 +879,44 @@ impl WindowOps for Window { _ => false, }; - let border_dimensions = - if window_state.contains(WindowState::FULL_SCREEN) && !native_full_screen { - let main_screen = unsafe { NSScreen::mainScreen(nil) }; - let has_safe_area_insets: BOOL = - unsafe { msg_send![main_screen, respondsToSelector: sel!(safeAreaInsets)] }; - if has_safe_area_insets == YES { - #[derive(Debug)] - struct NSEdgeInsets { - top: CGFloat, - left: CGFloat, - bottom: CGFloat, - right: CGFloat, - } - let insets: NSEdgeInsets = unsafe { msg_send![main_screen, safeAreaInsets] }; - log::trace!("{:?}", insets); - - let scale = unsafe { - let frame = NSScreen::frame(main_screen); - let backing_frame = NSScreen::convertRectToBacking_(main_screen, frame); - backing_frame.size.height / frame.size.height - }; - - let top = (insets.top.ceil() * scale) as usize; - Some(Border { - top: ULength::new(top), - left: ULength::new(insets.left.ceil() as usize), - right: ULength::new(insets.right.ceil() as usize), - bottom: ULength::new(insets.bottom.ceil() as usize), - color: crate::color::LinearRgba::with_components(0., 0., 0., 1.), - }) - } else { - None + let border_dimensions = if window_state.contains(WindowState::FULL_SCREEN) + && !native_full_screen + && !_config.macos_fullscreen_avoid_notch + { + let main_screen = unsafe { NSScreen::mainScreen(nil) }; + let has_safe_area_insets: BOOL = + unsafe { msg_send![main_screen, respondsToSelector: sel!(safeAreaInsets)] }; + if has_safe_area_insets == YES { + #[derive(Debug)] + struct NSEdgeInsets { + top: CGFloat, + left: CGFloat, + bottom: CGFloat, + right: CGFloat, } + let insets: NSEdgeInsets = unsafe { msg_send![main_screen, safeAreaInsets] }; + log::trace!("{:?}", insets); + + let scale = unsafe { + let frame = NSScreen::frame(main_screen); + let backing_frame = NSScreen::convertRectToBacking_(main_screen, frame); + backing_frame.size.height / frame.size.height + }; + + let top = (insets.top.ceil() * scale) as usize; + Some(Border { + top: ULength::new(top), + left: ULength::new(insets.left.ceil() as usize), + right: ULength::new(insets.right.ceil() as usize), + bottom: ULength::new(insets.bottom.ceil() as usize), + color: crate::color::LinearRgba::with_components(0., 0., 0., 1.), + }) } else { None - }; + } + } else { + None + }; Ok(Some(Parameters { title_bar: TitleBar {