From 04bbd107c1c1f0ed9e4d1de8ae31ab5fa664c378 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Wed, 29 Nov 2023 18:20:08 -0500 Subject: [PATCH] Fix the selected state for the panel icons in the status bar (#3450) This PR fixes a bug where the selected state for the panel icons in the status bar was not correctly reflecting whether the panel was open. It was erroneously using the `is_open` state for the context menu. Release Notes: - N/A --- crates/ui2/src/components/stories/icon_button.rs | 6 ++++++ crates/workspace2/src/dock.rs | 14 ++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/crates/ui2/src/components/stories/icon_button.rs b/crates/ui2/src/components/stories/icon_button.rs index 85a9e1a0e8..e0d62af8a9 100644 --- a/crates/ui2/src/components/stories/icon_button.rs +++ b/crates/ui2/src/components/stories/icon_button.rs @@ -14,6 +14,12 @@ impl Render for IconButtonStory { .child(Story::title_for::()) .child(Story::label("Default")) .child(div().w_8().child(IconButton::new("icon_a", Icon::Hash))) + .child(Story::label("Selected")) + .child( + div() + .w_8() + .child(IconButton::new("icon_a", Icon::Hash).selected(true)), + ) .child(Story::label("With `on_click`")) .child( div() diff --git a/crates/workspace2/src/dock.rs b/crates/workspace2/src/dock.rs index 9dd049888f..06fdf7f9c1 100644 --- a/crates/workspace2/src/dock.rs +++ b/crates/workspace2/src/dock.rs @@ -701,11 +701,6 @@ impl Render for PanelButtons { (action, name.into()) }; - let button = IconButton::new(name, icon) - .selected(is_active_button) - .action(action.boxed_clone()) - .tooltip(move |cx| Tooltip::for_action(tooltip.clone(), &*action, cx)); - Some( menu_handle(name) .menu(move |cx| { @@ -731,7 +726,14 @@ impl Render for PanelButtons { }) .anchor(menu_anchor) .attach(menu_attach) - .child(|is_open| button.selected(is_open)), + .child(move |_is_open| { + IconButton::new(name, icon) + .selected(is_active_button) + .action(action.boxed_clone()) + .tooltip(move |cx| { + Tooltip::for_action(tooltip.clone(), &*action, cx) + }) + }), ) });