pane: Add tooltips to close/unpin buttons (#17521)

These tooltips also showcase keybinds when the tab is an active one. /cc
@danilo-leal

Release Notes:

- N/A
This commit is contained in:
Piotr Osiewicz 2024-09-07 03:02:34 +02:00 committed by GitHub
parent a7da16d192
commit b401f6951b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1789,6 +1789,7 @@ impl Pane {
ix: usize, ix: usize,
item: &dyn ItemHandle, item: &dyn ItemHandle,
detail: usize, detail: usize,
focus_handle: &FocusHandle,
cx: &mut ViewContext<'_, Pane>, cx: &mut ViewContext<'_, Pane>,
) -> impl IntoElement { ) -> impl IntoElement {
let project_path = item.project_path(cx); let project_path = item.project_path(cx);
@ -1899,7 +1900,11 @@ impl Pane {
}) })
.start_slot::<Indicator>(indicator) .start_slot::<Indicator>(indicator)
.map(|this| { .map(|this| {
let end_slot_action: &'static dyn Action;
let end_slot_tooltip_text: &'static str;
let end_slot = if is_pinned { let end_slot = if is_pinned {
end_slot_action = &TogglePinTab;
end_slot_tooltip_text = "Unpin Tab";
IconButton::new("unpin tab", IconName::Pin) IconButton::new("unpin tab", IconName::Pin)
.shape(IconButtonShape::Square) .shape(IconButtonShape::Square)
.icon_color(Color::Muted) .icon_color(Color::Muted)
@ -1908,8 +1913,9 @@ impl Pane {
.on_click(cx.listener(move |pane, _, cx| { .on_click(cx.listener(move |pane, _, cx| {
pane.unpin_tab_at(ix, cx); pane.unpin_tab_at(ix, cx);
})) }))
.tooltip(|cx| Tooltip::text("Unpin Tab", cx))
} else { } else {
end_slot_action = &CloseActiveItem { save_intent: None };
end_slot_tooltip_text = "Close Tab";
IconButton::new("close tab", IconName::Close) IconButton::new("close tab", IconName::Close)
.visible_on_hover("") .visible_on_hover("")
.shape(IconButtonShape::Square) .shape(IconButtonShape::Square)
@ -1920,7 +1926,22 @@ impl Pane {
pane.close_item_by_id(item_id, SaveIntent::Close, cx) pane.close_item_by_id(item_id, SaveIntent::Close, cx)
.detach_and_log_err(cx); .detach_and_log_err(cx);
})) }))
}; }
.map(|this| {
if is_active {
let focus_handle = focus_handle.clone();
this.tooltip(move |cx| {
Tooltip::for_action_in(
end_slot_tooltip_text,
end_slot_action,
&focus_handle,
cx,
)
})
} else {
this.tooltip(move |cx| Tooltip::text(end_slot_tooltip_text, cx))
}
});
this.end_slot(end_slot) this.end_slot(end_slot)
}) })
.child( .child(
@ -2121,7 +2142,7 @@ impl Pane {
.iter() .iter()
.enumerate() .enumerate()
.zip(tab_details(&self.items, cx)) .zip(tab_details(&self.items, cx))
.map(|((ix, item), detail)| self.render_tab(ix, &**item, detail, cx)) .map(|((ix, item), detail)| self.render_tab(ix, &**item, detail, &focus_handle, cx))
.collect::<Vec<_>>(); .collect::<Vec<_>>();
let unpinned_tabs = tab_items.split_off(self.pinned_tab_count); let unpinned_tabs = tab_items.split_off(self.pinned_tab_count);