diff --git a/crates/gpui/examples/image/image.rs b/crates/gpui/examples/image/image.rs index 9710125ae2..f184c33c7f 100644 --- a/crates/gpui/examples/image/image.rs +++ b/crates/gpui/examples/image/image.rs @@ -68,7 +68,7 @@ fn main() { cx.on_action(|_: &Quit, cx| cx.quit()); cx.bind_keys([KeyBinding::new("cmd-q", Quit, None)]); cx.set_menus(vec![Menu { - name: "Image", + name: "Image".into(), items: vec![MenuItem::action("Quit", Quit)], }]); diff --git a/crates/gpui/examples/set_menus.rs b/crates/gpui/examples/set_menus.rs index 1e7790b7dd..b06f279ce5 100644 --- a/crates/gpui/examples/set_menus.rs +++ b/crates/gpui/examples/set_menus.rs @@ -24,7 +24,7 @@ fn main() { cx.on_action(quit); // Add menu items cx.set_menus(vec![Menu { - name: "set_menus", + name: "set_menus".into(), items: vec![MenuItem::action("Quit", Quit)], }]); cx.open_window(WindowOptions::default(), |cx| { diff --git a/crates/gpui/src/platform/app_menu.rs b/crates/gpui/src/platform/app_menu.rs index abe169d8bd..15686956f2 100644 --- a/crates/gpui/src/platform/app_menu.rs +++ b/crates/gpui/src/platform/app_menu.rs @@ -1,18 +1,16 @@ -use std::borrow::Cow; - -use crate::{Action, AppContext, Platform}; +use crate::{Action, AppContext, Platform, SharedString}; use util::ResultExt; /// A menu of the application, either a main menu or a submenu -pub struct Menu<'a> { +pub struct Menu { /// The name of the menu - pub name: &'a str, + pub name: SharedString, /// The items in the menu - pub items: Vec>, + pub items: Vec, } -impl<'a> Menu<'a> { +impl Menu { /// Create an OwnedMenu from this Menu pub fn owned(self) -> OwnedMenu { OwnedMenu { @@ -23,17 +21,17 @@ impl<'a> Menu<'a> { } /// The different kinds of items that can be in a menu -pub enum MenuItem<'a> { +pub enum MenuItem { /// A separator between items Separator, /// A submenu - Submenu(Menu<'a>), + Submenu(Menu), /// An action that can be performed Action { /// The name of this menu item - name: &'a str, + name: SharedString, /// the action to perform when this menu item is selected action: Box, @@ -44,30 +42,34 @@ pub enum MenuItem<'a> { }, } -impl<'a> MenuItem<'a> { +impl MenuItem { /// Creates a new menu item that is a separator pub fn separator() -> Self { Self::Separator } /// Creates a new menu item that is a submenu - pub fn submenu(menu: Menu<'a>) -> Self { + pub fn submenu(menu: Menu) -> Self { Self::Submenu(menu) } /// Creates a new menu item that invokes an action - pub fn action(name: &'a str, action: impl Action) -> Self { + pub fn action(name: impl Into, action: impl Action) -> Self { Self::Action { - name, + name: name.into(), action: Box::new(action), os_action: None, } } /// Creates a new menu item that invokes an action and has an OS action - pub fn os_action(name: &'a str, action: impl Action, os_action: OsAction) -> Self { + pub fn os_action( + name: impl Into, + action: impl Action, + os_action: OsAction, + ) -> Self { Self::Action { - name, + name: name.into(), action: Box::new(action), os_action: Some(os_action), } @@ -95,7 +97,7 @@ impl<'a> MenuItem<'a> { #[derive(Clone)] pub struct OwnedMenu { /// The name of the menu - pub name: Cow<'static, str>, + pub name: SharedString, /// The items in the menu pub items: Vec, diff --git a/crates/gpui/src/platform/mac/platform.rs b/crates/gpui/src/platform/mac/platform.rs index de7da30d1a..53f3fc7402 100644 --- a/crates/gpui/src/platform/mac/platform.rs +++ b/crates/gpui/src/platform/mac/platform.rs @@ -206,7 +206,7 @@ impl MacPlatform { for menu_config in menus { let menu = NSMenu::new(nil).autorelease(); - menu.setTitle_(ns_string(menu_config.name)); + menu.setTitle_(ns_string(&menu_config.name)); menu.setDelegate_(delegate); for item_config in menu_config.items { @@ -310,7 +310,7 @@ impl MacPlatform { item = NSMenuItem::alloc(nil) .initWithTitle_action_keyEquivalent_( - ns_string(name), + ns_string(&name), selector, ns_string(key_to_native(&keystroke.key).as_ref()), ) @@ -341,7 +341,7 @@ impl MacPlatform { } else { item = NSMenuItem::alloc(nil) .initWithTitle_action_keyEquivalent_( - ns_string(name), + ns_string(&name), selector, ns_string(""), ) @@ -361,7 +361,7 @@ impl MacPlatform { submenu.addItem_(Self::create_menu_item(item, delegate, actions, keymap)); } item.setSubmenu_(submenu); - item.setTitle_(ns_string(name)); + item.setTitle_(ns_string(&name)); item } } diff --git a/crates/live_kit_client/examples/test_app.rs b/crates/live_kit_client/examples/test_app.rs index 06f2970830..fa4f268666 100644 --- a/crates/live_kit_client/examples/test_app.rs +++ b/crates/live_kit_client/examples/test_app.rs @@ -25,9 +25,9 @@ fn main() { cx.bind_keys([KeyBinding::new("cmd-q", Quit, None)]); cx.set_menus(vec![Menu { - name: "Zed", + name: "Zed".into(), items: vec![MenuItem::Action { - name: "Quit", + name: "Quit".into(), action: Box::new(Quit), os_action: None, }], diff --git a/crates/storybook/src/app_menus.rs b/crates/storybook/src/app_menus.rs index 14c5e073ad..4e84b4c85d 100644 --- a/crates/storybook/src/app_menus.rs +++ b/crates/storybook/src/app_menus.rs @@ -1,10 +1,10 @@ use gpui::{Menu, MenuItem}; -pub fn app_menus() -> Vec> { +pub fn app_menus() -> Vec { use crate::actions::Quit; vec![Menu { - name: "Storybook", + name: "Storybook".into(), items: vec![MenuItem::action("Quit", Quit)], }] } diff --git a/crates/zed/src/zed/app_menus.rs b/crates/zed/src/zed/app_menus.rs index 403b28e360..a0052b5b8d 100644 --- a/crates/zed/src/zed/app_menus.rs +++ b/crates/zed/src/zed/app_menus.rs @@ -2,18 +2,18 @@ use collab_ui::collab_panel; use gpui::{Menu, MenuItem, OsAction}; use terminal_view::terminal_panel; -pub fn app_menus() -> Vec> { +pub fn app_menus() -> Vec { use zed_actions::Quit; vec![ Menu { - name: "Zed", + name: "Zed".into(), items: vec![ MenuItem::action("About Zed…", zed_actions::About), MenuItem::action("Check for Updates", auto_update::Check), MenuItem::separator(), MenuItem::submenu(Menu { - name: "Preferences", + name: "Preferences".into(), items: vec![ MenuItem::action("Open Settings", super::OpenSettings), MenuItem::action("Open Key Bindings", zed_actions::OpenKeymap), @@ -33,7 +33,7 @@ pub fn app_menus() -> Vec> { ], }, Menu { - name: "File", + name: "File".into(), items: vec![ MenuItem::action("New", workspace::NewFile), MenuItem::action("New Window", workspace::NewWindow), @@ -58,7 +58,7 @@ pub fn app_menus() -> Vec> { ], }, Menu { - name: "Edit", + name: "Edit".into(), items: vec![ MenuItem::os_action("Undo", editor::actions::Undo, OsAction::Undo), MenuItem::os_action("Redo", editor::actions::Redo, OsAction::Redo), @@ -77,7 +77,7 @@ pub fn app_menus() -> Vec> { ], }, Menu { - name: "Selection", + name: "Selection".into(), items: vec![ MenuItem::os_action( "Select All", @@ -102,7 +102,7 @@ pub fn app_menus() -> Vec> { ], }, Menu { - name: "View", + name: "View".into(), items: vec![ MenuItem::action("Zoom In", zed_actions::IncreaseBufferFontSize), MenuItem::action("Zoom Out", zed_actions::DecreaseBufferFontSize), @@ -113,7 +113,7 @@ pub fn app_menus() -> Vec> { MenuItem::action("Toggle Bottom Dock", workspace::ToggleBottomDock), MenuItem::action("Close All Docks", workspace::CloseAllDocks), MenuItem::submenu(Menu { - name: "Editor Layout", + name: "Editor Layout".into(), items: vec![ MenuItem::action("Split Up", workspace::SplitUp), MenuItem::action("Split Down", workspace::SplitDown), @@ -132,7 +132,7 @@ pub fn app_menus() -> Vec> { ], }, Menu { - name: "Go", + name: "Go".into(), items: vec![ MenuItem::action("Back", workspace::GoBack), MenuItem::action("Forward", workspace::GoForward), @@ -153,7 +153,7 @@ pub fn app_menus() -> Vec> { ], }, Menu { - name: "Window", + name: "Window".into(), items: vec![ MenuItem::action("Minimize", super::Minimize), MenuItem::action("Zoom", super::Zoom), @@ -161,7 +161,7 @@ pub fn app_menus() -> Vec> { ], }, Menu { - name: "Help", + name: "Help".into(), items: vec![ MenuItem::action("View Telemetry", zed_actions::OpenTelemetryLog), MenuItem::action("View Dependency Licenses", zed_actions::OpenLicenses),