tab: Add setting to hide the close button entirely (#23880)

Closes #23744

Release Notes:

- Changed the `always_show_close_button` key to `show_close_button` and
introduced a new `hidden` value, that allows never displaying the close
button.

---------

Co-authored-by: Peter Tripp <peter@zed.dev>
Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
Co-authored-by: smit <0xtimsb@gmail.com>
This commit is contained in:
Morgan Metz 2025-03-02 19:01:48 -08:00 committed by GitHub
parent ae6d350334
commit 0a4ff2f475
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 149 additions and 28 deletions

View file

@ -1,7 +1,7 @@
use crate::{
item::{
ActivateOnClose, ClosePosition, Item, ItemHandle, ItemSettings, PreviewTabsSettings,
ShowDiagnostics, TabContentParams, TabTooltipContent, WeakItemHandle,
ShowCloseButton, ShowDiagnostics, TabContentParams, TabTooltipContent, WeakItemHandle,
},
move_item,
notifications::NotifyResultExt,
@ -2269,7 +2269,7 @@ impl Pane {
let settings = ItemSettings::get_global(cx);
let close_side = &settings.close_position;
let always_show_close_button = settings.always_show_close_button;
let show_close_button = &settings.show_close_button;
let indicator = render_item_indicator(item.boxed_clone(), cx);
let item_id = item.item_id();
let is_first_item = ix == 0;
@ -2373,18 +2373,21 @@ impl Pane {
close_pinned: false,
};
end_slot_tooltip_text = "Close Tab";
IconButton::new("close tab", IconName::Close)
.when(!always_show_close_button, |button| {
button.visible_on_hover("")
})
.shape(IconButtonShape::Square)
.icon_color(Color::Muted)
.size(ButtonSize::None)
.icon_size(IconSize::XSmall)
.on_click(cx.listener(move |pane, _, window, cx| {
pane.close_item_by_id(item_id, SaveIntent::Close, window, cx)
.detach_and_log_err(cx);
}))
match show_close_button {
ShowCloseButton::Always => IconButton::new("close tab", IconName::Close),
ShowCloseButton::Hover => {
IconButton::new("close tab", IconName::Close).visible_on_hover("")
}
ShowCloseButton::Hidden => return this,
}
.shape(IconButtonShape::Square)
.icon_color(Color::Muted)
.size(ButtonSize::None)
.icon_size(IconSize::XSmall)
.on_click(cx.listener(move |pane, _, window, cx| {
pane.close_item_by_id(item_id, SaveIntent::Close, window, cx)
.detach_and_log_err(cx);
}))
}
.map(|this| {
if is_active {