diff --git a/crates/context_menu/src/context_menu.rs b/crates/context_menu/src/context_menu.rs index e988684c9a..fd5e1f1b09 100644 --- a/crates/context_menu/src/context_menu.rs +++ b/crates/context_menu/src/context_menu.rs @@ -37,6 +37,33 @@ pub enum ContextMenuItemLabel { Element(ContextMenuItemBuilder), } +impl From> for ContextMenuItemLabel { + fn from(s: Cow<'static, str>) -> Self { + Self::String(s) + } +} + +impl From<&'static str> for ContextMenuItemLabel { + fn from(s: &'static str) -> Self { + Self::String(s.into()) + } +} + +impl From for ContextMenuItemLabel { + fn from(s: String) -> Self { + Self::String(s.into()) + } +} + +impl From for ContextMenuItemLabel +where + T: 'static + Fn(&mut MouseState, &theme::ContextMenuItem) -> AnyElement, +{ + fn from(f: T) -> Self { + Self::Element(Box::new(f)) + } +} + pub enum ContextMenuItem { Item { label: ContextMenuItemLabel, @@ -47,16 +74,9 @@ pub enum ContextMenuItem { } impl ContextMenuItem { - pub fn element_item(label: ContextMenuItemBuilder, action: impl 'static + Action) -> Self { + pub fn item(label: impl Into, action: impl 'static + Action) -> Self { Self::Item { - label: ContextMenuItemLabel::Element(label), - action: Box::new(action), - } - } - - pub fn item(label: impl Into>, action: impl 'static + Action) -> Self { - Self::Item { - label: ContextMenuItemLabel::String(label.into()), + label: label.into(), action: Box::new(action), } } diff --git a/crates/copilot_button/src/copilot_button.rs b/crates/copilot_button/src/copilot_button.rs index c8bfcc7550..a06e65db8d 100644 --- a/crates/copilot_button/src/copilot_button.rs +++ b/crates/copilot_button/src/copilot_button.rs @@ -317,16 +317,14 @@ impl CopilotButton { menu_options.push(ContextMenuItem::Separator); let icon_style = settings.theme.copilot.out_link_icon.clone(); - menu_options.push(ContextMenuItem::element_item( - Box::new( - move |state: &mut MouseState, style: &theme::ContextMenuItem| { - Flex::row() - .with_child(Label::new("Copilot Settings", style.label.clone())) - .with_child(theme::ui::icon(icon_style.style_for(state, false))) - .align_children_center() - .into_any() - }, - ), + menu_options.push(ContextMenuItem::item( + move |state: &mut MouseState, style: &theme::ContextMenuItem| { + Flex::row() + .with_child(Label::new("Copilot Settings", style.label.clone())) + .with_child(theme::ui::icon(icon_style.style_for(state, false))) + .align_children_center() + .into_any() + }, OsOpen::new(COPILOT_SETTINGS_URL), ));