diff --git a/Cargo.lock b/Cargo.lock index 6fd8caf95d3..05a2536b4ef 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -398,6 +398,7 @@ dependencies = [ "parking_lot", "paths", "picker", + "platform_title_bar", "postage", "pretty_assertions", "project", diff --git a/crates/agent_ui/Cargo.toml b/crates/agent_ui/Cargo.toml index a48f3a79e80..65be660ed07 100644 --- a/crates/agent_ui/Cargo.toml +++ b/crates/agent_ui/Cargo.toml @@ -77,6 +77,7 @@ ordered-float.workspace = true parking_lot.workspace = true paths.workspace = true picker.workspace = true +platform_title_bar.workspace = true postage.workspace = true project.workspace = true prompt_store.workspace = true diff --git a/crates/agent_ui/src/threads_archive_view.rs b/crates/agent_ui/src/threads_archive_view.rs index 72b03692761..6204552fe6c 100644 --- a/crates/agent_ui/src/threads_archive_view.rs +++ b/crates/agent_ui/src/threads_archive_view.rs @@ -39,8 +39,8 @@ use ui_input::ErasedEditor; use util::ResultExt; use util::paths::PathExt; use workspace::{ - ModalView, PathList, SerializedWorkspaceLocation, Workspace, WorkspaceDb, WorkspaceId, - resolve_worktree_workspaces, + CloseWindow, ModalView, PathList, SerializedWorkspaceLocation, Workspace, WorkspaceDb, + WorkspaceId, resolve_worktree_workspaces, }; use zed_actions::agents_sidebar::FocusSidebarFilter; @@ -828,8 +828,12 @@ impl ThreadsArchiveView { AgentSettings::get_global(cx).sidebar_side(), settings::SidebarSide::Left ); - let traffic_lights = - cfg!(target_os = "macos") && !window.is_fullscreen() && sidebar_on_left; + let sidebar_on_right = !sidebar_on_left; + let not_fullscreen = !window.is_fullscreen(); + let traffic_lights = cfg!(target_os = "macos") && not_fullscreen && sidebar_on_left; + let left_window_controls = !cfg!(target_os = "macos") && not_fullscreen && sidebar_on_left; + let right_window_controls = + !cfg!(target_os = "macos") && not_fullscreen && sidebar_on_right; let header_height = platform_title_bar_height(window); let show_focus_keybinding = self.selection.is_some() && !self.filter_editor.focus_handle(cx).is_focused(window); @@ -838,14 +842,19 @@ impl ThreadsArchiveView { .h(header_height) .mt_px() .pb_px() + .when(left_window_controls, |this| { + this.children(Self::render_left_window_controls(window, cx)) + }) .map(|this| { if traffic_lights { this.pl(px(ui::utils::TRAFFIC_LIGHT_PADDING)) - } else { + } else if !left_window_controls { this.pl_1p5() + } else { + this } }) - .pr_1p5() + .when(!right_window_controls, |this| this.pr_1p5()) .gap_1() .justify_between() .border_b_1() @@ -880,6 +889,25 @@ impl ThreadsArchiveView { })), ) }) + .when(right_window_controls, |this| { + this.children(Self::render_right_window_controls(window, cx)) + }) + } + + fn render_left_window_controls(window: &Window, cx: &mut App) -> Option { + platform_title_bar::render_left_window_controls( + cx.button_layout(), + Box::new(CloseWindow), + window, + ) + } + + fn render_right_window_controls(window: &Window, cx: &mut App) -> Option { + platform_title_bar::render_right_window_controls( + cx.button_layout(), + Box::new(CloseWindow), + window, + ) } fn render_toolbar(&self, cx: &mut Context) -> impl IntoElement {