Add chevron icons to the dropdown menus in the LSP log pane (#34149)

A bunch of dropdown menus in this pane that weren't clear that were
menus without chevrons in it. :)

<img
src="https://github.com/user-attachments/assets/fc701a5d-ed89-4de3-a76e-06d22ad9e366"
width="600"/>

Release Notes:

- N/A
This commit is contained in:
Danilo Leal 2025-07-09 16:33:07 -03:00 committed by GitHub
parent de627ba04d
commit e30e4381de
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1331,6 +1331,7 @@ impl Render for LspLogToolbarItemView {
let Some(log_view) = self.log_view.clone() else { let Some(log_view) = self.log_view.clone() else {
return div(); return div();
}; };
let (menu_rows, current_server_id) = log_view.update(cx, |log_view, cx| { let (menu_rows, current_server_id) = log_view.update(cx, |log_view, cx| {
let menu_rows = log_view.menu_items(cx).unwrap_or_default(); let menu_rows = log_view.menu_items(cx).unwrap_or_default();
let current_server_id = log_view.current_server_id; let current_server_id = log_view.current_server_id;
@ -1344,6 +1345,7 @@ impl Render for LspLogToolbarItemView {
None None
} }
}); });
let available_language_servers: Vec<_> = menu_rows let available_language_servers: Vec<_> = menu_rows
.into_iter() .into_iter()
.map(|row| { .map(|row| {
@ -1355,21 +1357,28 @@ impl Render for LspLogToolbarItemView {
) )
}) })
.collect(); .collect();
let log_toolbar_view = cx.entity().clone(); let log_toolbar_view = cx.entity().clone();
let lsp_menu = PopoverMenu::new("LspLogView") let lsp_menu = PopoverMenu::new("LspLogView")
.anchor(Corner::TopLeft) .anchor(Corner::TopLeft)
.trigger(Button::new( .trigger(
"language_server_menu_header", Button::new(
current_server "language_server_menu_header",
.as_ref() current_server
.map(|row| { .as_ref()
Cow::Owned(format!( .map(|row| {
"{} ({})", Cow::Owned(format!(
row.server_name.0, row.worktree_root_name, "{} ({})",
)) row.server_name.0, row.worktree_root_name,
}) ))
.unwrap_or_else(|| "No server selected".into()), })
)) .unwrap_or_else(|| "No server selected".into()),
)
.icon(IconName::ChevronDown)
.icon_size(IconSize::Small)
.icon_color(Color::Muted),
)
.menu({ .menu({
let log_view = log_view.clone(); let log_view = log_view.clone();
move |window, cx| { move |window, cx| {
@ -1413,6 +1422,7 @@ impl Render for LspLogToolbarItemView {
.into() .into()
} }
}); });
let view_selector = current_server.map(|server| { let view_selector = current_server.map(|server| {
let server_id = server.server_id; let server_id = server.server_id;
let is_remote = server.server_kind.is_remote(); let is_remote = server.server_kind.is_remote();
@ -1420,10 +1430,12 @@ impl Render for LspLogToolbarItemView {
let log_view = log_view.clone(); let log_view = log_view.clone();
PopoverMenu::new("LspViewSelector") PopoverMenu::new("LspViewSelector")
.anchor(Corner::TopLeft) .anchor(Corner::TopLeft)
.trigger(Button::new( .trigger(
"language_server_menu_header", Button::new("language_server_menu_header", server.selected_entry.label())
server.selected_entry.label(), .icon(IconName::ChevronDown)
)) .icon_size(IconSize::Small)
.icon_color(Color::Muted),
)
.menu(move |window, cx| { .menu(move |window, cx| {
let log_toolbar_view = log_toolbar_view.clone(); let log_toolbar_view = log_toolbar_view.clone();
let log_view = log_view.clone(); let log_view = log_view.clone();
@ -1494,11 +1506,14 @@ impl Render for LspLogToolbarItemView {
})) }))
}) })
}); });
h_flex() h_flex()
.size_full() .size_full()
.gap_1()
.justify_between() .justify_between()
.child( .child(
h_flex() h_flex()
.gap_0p5()
.child(lsp_menu) .child(lsp_menu)
.children(view_selector) .children(view_selector)
.child( .child(
@ -1508,10 +1523,15 @@ impl Render for LspLogToolbarItemView {
div().child( div().child(
PopoverMenu::new("lsp-trace-level-menu") PopoverMenu::new("lsp-trace-level-menu")
.anchor(Corner::TopLeft) .anchor(Corner::TopLeft)
.trigger(Button::new( .trigger(
"language_server_trace_level_selector", Button::new(
"Trace level", "language_server_trace_level_selector",
)) "Trace level",
)
.icon(IconName::ChevronDown)
.icon_size(IconSize::Small)
.icon_color(Color::Muted),
)
.menu({ .menu({
let log_view = log_view.clone(); let log_view = log_view.clone();
@ -1571,10 +1591,15 @@ impl Render for LspLogToolbarItemView {
div().child( div().child(
PopoverMenu::new("lsp-log-level-menu") PopoverMenu::new("lsp-log-level-menu")
.anchor(Corner::TopLeft) .anchor(Corner::TopLeft)
.trigger(Button::new( .trigger(
"language_server_log_level_selector", Button::new(
"Log level", "language_server_log_level_selector",
)) "Log level",
)
.icon(IconName::ChevronDown)
.icon_size(IconSize::Small)
.icon_color(Color::Muted),
)
.menu({ .menu({
let log_view = log_view.clone(); let log_view = log_view.clone();
@ -1635,23 +1660,19 @@ impl Render for LspLogToolbarItemView {
), ),
) )
.child( .child(
div() Button::new("clear_log_button", "Clear").on_click(cx.listener(
.child( |this, _, window, cx| {
Button::new("clear_log_button", "Clear").on_click(cx.listener( if let Some(log_view) = this.log_view.as_ref() {
|this, _, window, cx| { log_view.update(cx, |log_view, cx| {
if let Some(log_view) = this.log_view.as_ref() { log_view.editor.update(cx, |editor, cx| {
log_view.update(cx, |log_view, cx| { editor.set_read_only(false);
log_view.editor.update(cx, |editor, cx| { editor.clear(window, cx);
editor.set_read_only(false); editor.set_read_only(true);
editor.clear(window, cx); });
editor.set_read_only(true); })
}); }
}) },
} )),
},
)),
)
.ml_2(),
) )
} }
} }