From f29b33ec859de02c2dc8ccbf588cdef7b5d34825 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Thu, 30 Jan 2025 20:32:13 -0500 Subject: [PATCH] extensions_ui: Show the filtered icon theme selector when installing an icon theme (#23992) This PR makes it so when you install an extension with icon themes it will deploy the icon theme selector filtered down to the newly-installed icon themes. This is similar to what we do when installing an extension with themes. Because we can only have one picker open at a time, when installing an extension that has _both_ themes and icon themes, the theme selector will take precedence. Release Notes: - N/A --- crates/extension_host/src/extension_host.rs | 17 +++++++++++++++++ crates/extensions_ui/src/extensions_ui.rs | 19 +++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/crates/extension_host/src/extension_host.rs b/crates/extension_host/src/extension_host.rs index a5651227b2..35a58af2e4 100644 --- a/crates/extension_host/src/extension_host.rs +++ b/crates/extension_host/src/extension_host.rs @@ -444,6 +444,23 @@ impl ExtensionStore { .filter_map(|(name, theme)| theme.extension.as_ref().eq(extension_id).then_some(name)) } + /// Returns the names of icon themes provided by extensions. + pub fn extension_icon_themes<'a>( + &'a self, + extension_id: &'a str, + ) -> impl Iterator> { + self.extension_index + .icon_themes + .iter() + .filter_map(|(name, icon_theme)| { + icon_theme + .extension + .as_ref() + .eq(extension_id) + .then_some(name) + }) + } + pub fn fetch_extensions( &self, search: Option<&str>, diff --git a/crates/extensions_ui/src/extensions_ui.rs b/crates/extensions_ui/src/extensions_ui.rs index e1acd70249..99c0ace156 100644 --- a/crates/extensions_ui/src/extensions_ui.rs +++ b/crates/extensions_ui/src/extensions_ui.rs @@ -295,6 +295,25 @@ impl ExtensionsPage { ); }) .ok(); + return; + } + + let icon_themes = extension_store + .extension_icon_themes(extension_id) + .map(|name| name.to_string()) + .collect::>(); + if !icon_themes.is_empty() { + workspace + .update(cx, |_workspace, cx| { + window.dispatch_action( + zed_actions::icon_theme_selector::Toggle { + themes_filter: Some(icon_themes), + } + .boxed_clone(), + cx, + ); + }) + .ok(); } }