diff --git a/crates/gpui/src/elements/anchored.rs b/crates/gpui/src/elements/anchored.rs index 2e33f138b9..05aa22c15e 100644 --- a/crates/gpui/src/elements/anchored.rs +++ b/crates/gpui/src/elements/anchored.rs @@ -3,7 +3,7 @@ use taffy::style::{Display, Position}; use crate::{ AnyElement, App, Axis, Bounds, Corner, Edges, Element, GlobalElementId, IntoElement, LayoutId, - ParentElement, Pixels, Point, Size, Style, Window, point, + ParentElement, Pixels, Point, Size, Style, Window, point, px, }; /// The state that the anchored element element uses to track its children. @@ -175,10 +175,12 @@ impl Element for Anchored { } } + let client_inset = window.client_inset.unwrap_or(px(0.)); let edges = match self.fit_mode { AnchoredFitMode::SnapToWindowWithMargin(edges) => edges, _ => Edges::default(), - }; + } + .map(|edge| *edge + client_inset); // Snap the horizontal edges of the anchored element to the horizontal edges of the window if // its horizontal bounds overflow, aligning to the left if it is wider than the limits. diff --git a/crates/gpui/src/window.rs b/crates/gpui/src/window.rs index de044ea9df..bfb0f46161 100644 --- a/crates/gpui/src/window.rs +++ b/crates/gpui/src/window.rs @@ -646,6 +646,7 @@ pub struct Window { pending_modifier: ModifierState, pub(crate) pending_input_observers: SubscriberSet<(), AnyObserver>, prompt: Option, + pub(crate) client_inset: Option, } #[derive(Clone, Debug, Default)] @@ -931,6 +932,7 @@ impl Window { pending_modifier: ModifierState::default(), pending_input_observers: SubscriberSet::new(), prompt: None, + client_inset: None, }) } @@ -1387,10 +1389,16 @@ impl Window { } /// When using client side decorations, set this to the width of the invisible decorations (Wayland and X11) - pub fn set_client_inset(&self, inset: Pixels) { + pub fn set_client_inset(&mut self, inset: Pixels) { + self.client_inset = Some(inset); self.platform_window.set_client_inset(inset); } + /// Returns the client_inset value by [`Self::set_client_inset`]. + pub fn client_inset(&self) -> Option { + self.client_inset + } + /// Returns whether the title bar window controls need to be rendered by the application (Wayland and X11) pub fn window_decorations(&self) -> Decorations { self.platform_window.window_decorations()