Fix tab switcher spacing bug (#41329)

The tab switcher render matches calls each workspace item's
`Item::tab_content` function that can return an element of variable
size. Because the tab switcher was using a uniform list under the hood,
this would cause spacing issues when tab_contents elements had different
sizes.

The fix is by changing the picker to use a material list under the hood.

Release Notes:

- N/A
This commit is contained in:
Anthony Eid
2025-10-28 03:00:55 -04:00
committed by GitHub
parent 4778d61bdd
commit 2163580b16
2 changed files with 11 additions and 2 deletions
+9
View File
@@ -275,6 +275,15 @@ impl<D: PickerDelegate> Picker<D> {
Self::new(delegate, ContainerKind::UniformList, head, window, cx)
}
/// A picker, which displays its matches using `gpui::list`, matches can have different heights.
/// The picker allows the user to perform search items by text.
/// If `PickerDelegate::render_match` only returns items with the same height, use `Picker::uniform_list` as its implementation is optimized for that.
pub fn nonsearchable_list(delegate: D, window: &mut Window, cx: &mut Context<Self>) -> Self {
let head = Head::empty(Self::on_empty_head_blur, window, cx);
Self::new(delegate, ContainerKind::List, head, window, cx)
}
/// A picker, which displays its matches using `gpui::list`, matches can have different heights.
/// The picker allows the user to perform search items by text.
/// If `PickerDelegate::render_match` only returns items with the same height, use `Picker::uniform_list` as its implementation is optimized for that.
+2 -2
View File
@@ -155,9 +155,9 @@ impl TabSwitcher {
Self {
picker: cx.new(|cx| {
if is_global {
Picker::uniform_list(delegate, window, cx)
Picker::list(delegate, window, cx)
} else {
Picker::nonsearchable_uniform_list(delegate, window, cx)
Picker::nonsearchable_list(delegate, window, cx)
}
}),
init_modifiers,