diff --git a/crates/collab_ui/src/collab_titlebar_item.rs b/crates/collab_ui/src/collab_titlebar_item.rs index ae80e59f22..6621aed875 100644 --- a/crates/collab_ui/src/collab_titlebar_item.rs +++ b/crates/collab_ui/src/collab_titlebar_item.rs @@ -49,7 +49,7 @@ pub struct CollabTitlebarItem { client: Arc, workspace: WeakViewHandle, contacts_popover: Option>, - user_menu: ViewHandle, + user_menu: Option>, _subscriptions: Vec, } @@ -170,18 +170,13 @@ impl CollabTitlebarItem { }), ); - let view_id = cx.view_id(); Self { workspace: workspace.weak_handle(), project, user_store, client, contacts_popover: None, - user_menu: cx.add_view(|cx| { - let mut menu = ContextMenu::new(view_id, cx); - menu.set_position_mode(OverlayPositionMode::Local); - menu - }), + user_menu: None, _subscriptions: subscriptions, } } @@ -294,32 +289,41 @@ impl CollabTitlebarItem { } pub fn toggle_user_menu(&mut self, _: &ToggleUserMenu, cx: &mut ViewContext) { - self.user_menu.update(cx, |user_menu, cx| { - let items = if let Some(_) = self.user_store.read(cx).current_user() { - vec![ - ContextMenuItem::action("Settings", zed_actions::OpenSettings), - ContextMenuItem::action("Theme", theme_selector::Toggle), - ContextMenuItem::separator(), - ContextMenuItem::action( - "Share Feedback", - feedback::feedback_editor::GiveFeedback, - ), - ContextMenuItem::action("Sign out", SignOut), - ] - } else { - vec![ - ContextMenuItem::action("Settings", zed_actions::OpenSettings), - ContextMenuItem::action("Theme", theme_selector::Toggle), - ContextMenuItem::separator(), - ContextMenuItem::action( - "Share Feedback", - feedback::feedback_editor::GiveFeedback, - ), - ] - }; + if self.user_menu.take().is_none() { + let mut user_menu = cx.add_view(|cx| { + let view_id = cx.view_id(); + let mut menu = ContextMenu::new(view_id, cx); + menu.set_position_mode(OverlayPositionMode::Local); + menu + }); + user_menu.update(cx, |user_menu, cx| { + let items = if let Some(_) = self.user_store.read(cx).current_user() { + vec![ + ContextMenuItem::action("Settings", zed_actions::OpenSettings), + ContextMenuItem::action("Theme", theme_selector::Toggle), + ContextMenuItem::separator(), + ContextMenuItem::action( + "Share Feedback", + feedback::feedback_editor::GiveFeedback, + ), + ContextMenuItem::action("Sign out", SignOut), + ] + } else { + vec![ + ContextMenuItem::action("Settings", zed_actions::OpenSettings), + ContextMenuItem::action("Theme", theme_selector::Toggle), + ContextMenuItem::separator(), + ContextMenuItem::action( + "Share Feedback", + feedback::feedback_editor::GiveFeedback, + ), + ] + }; - user_menu.show(Default::default(), AnchorCorner::TopRight, items, cx); - }); + user_menu.show(Default::default(), AnchorCorner::TopRight, items, cx); + }); + self.user_menu = Some(user_menu); + } } fn render_toggle_contacts_button( @@ -695,11 +699,10 @@ impl CollabTitlebarItem { ) .contained(), ) - .with_child( - ChildView::new(&self.user_menu, cx) - .aligned() - .bottom() - .right(), + .with_children( + self.user_menu + .as_ref() + .map(|menu| ChildView::new(&menu, cx).aligned().bottom().right()), ) .into_any() }