diff --git a/crates/collab_ui/src/collab_titlebar_item.rs b/crates/collab_ui/src/collab_titlebar_item.rs index e5837330a4..76d1741c14 100644 --- a/crates/collab_ui/src/collab_titlebar_item.rs +++ b/crates/collab_ui/src/collab_titlebar_item.rs @@ -49,7 +49,8 @@ pub struct CollabTitlebarItem { client: Arc, workspace: WeakViewHandle, contacts_popover: Option>, - user_menu: Option>, + user_menu: ViewHandle, + user_menu_is_visible: bool, _subscriptions: Vec, } @@ -176,7 +177,13 @@ impl CollabTitlebarItem { user_store, client, contacts_popover: None, - user_menu: None, + 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_is_visible: false, _subscriptions: subscriptions, } } @@ -289,14 +296,8 @@ impl CollabTitlebarItem { } pub fn toggle_user_menu(&mut self, _: &ToggleUserMenu, cx: &mut ViewContext) { - if self.user_menu.take().is_none() { - let 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| { + if !self.user_menu_is_visible { + 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), @@ -322,8 +323,8 @@ impl CollabTitlebarItem { user_menu.show(Default::default(), AnchorCorner::TopRight, items, cx); }); - self.user_menu = Some(user_menu); } + self.user_menu_is_visible = !self.user_menu_is_visible; } fn render_toggle_contacts_button( @@ -699,11 +700,12 @@ impl CollabTitlebarItem { ) .contained(), ) - .with_children( - self.user_menu - .as_ref() - .map(|menu| ChildView::new(&menu, cx).aligned().bottom().right()), - ) + .with_children(self.user_menu_is_visible.then(|| { + ChildView::new(&self.user_menu, cx) + .aligned() + .bottom() + .right() + })) .into_any() }