Hide user menu on second click

This commit is contained in:
Piotr Osiewicz 2023-06-28 15:19:32 +02:00
parent 2ddf0e12bf
commit 456be1f86e

View file

@ -49,7 +49,7 @@ pub struct CollabTitlebarItem {
client: Arc<Client>, client: Arc<Client>,
workspace: WeakViewHandle<Workspace>, workspace: WeakViewHandle<Workspace>,
contacts_popover: Option<ViewHandle<ContactsPopover>>, contacts_popover: Option<ViewHandle<ContactsPopover>>,
user_menu: ViewHandle<ContextMenu>, user_menu: Option<ViewHandle<ContextMenu>>,
_subscriptions: Vec<Subscription>, _subscriptions: Vec<Subscription>,
} }
@ -170,18 +170,13 @@ impl CollabTitlebarItem {
}), }),
); );
let view_id = cx.view_id();
Self { Self {
workspace: workspace.weak_handle(), workspace: workspace.weak_handle(),
project, project,
user_store, user_store,
client, client,
contacts_popover: None, contacts_popover: None,
user_menu: cx.add_view(|cx| { user_menu: None,
let mut menu = ContextMenu::new(view_id, cx);
menu.set_position_mode(OverlayPositionMode::Local);
menu
}),
_subscriptions: subscriptions, _subscriptions: subscriptions,
} }
} }
@ -294,32 +289,41 @@ impl CollabTitlebarItem {
} }
pub fn toggle_user_menu(&mut self, _: &ToggleUserMenu, cx: &mut ViewContext<Self>) { pub fn toggle_user_menu(&mut self, _: &ToggleUserMenu, cx: &mut ViewContext<Self>) {
self.user_menu.update(cx, |user_menu, cx| { if self.user_menu.take().is_none() {
let items = if let Some(_) = self.user_store.read(cx).current_user() { let mut user_menu = cx.add_view(|cx| {
vec![ let view_id = cx.view_id();
ContextMenuItem::action("Settings", zed_actions::OpenSettings), let mut menu = ContextMenu::new(view_id, cx);
ContextMenuItem::action("Theme", theme_selector::Toggle), menu.set_position_mode(OverlayPositionMode::Local);
ContextMenuItem::separator(), menu
ContextMenuItem::action( });
"Share Feedback", user_menu.update(cx, |user_menu, cx| {
feedback::feedback_editor::GiveFeedback, let items = if let Some(_) = self.user_store.read(cx).current_user() {
), vec![
ContextMenuItem::action("Sign out", SignOut), ContextMenuItem::action("Settings", zed_actions::OpenSettings),
] ContextMenuItem::action("Theme", theme_selector::Toggle),
} else { ContextMenuItem::separator(),
vec![ ContextMenuItem::action(
ContextMenuItem::action("Settings", zed_actions::OpenSettings), "Share Feedback",
ContextMenuItem::action("Theme", theme_selector::Toggle), feedback::feedback_editor::GiveFeedback,
ContextMenuItem::separator(), ),
ContextMenuItem::action( ContextMenuItem::action("Sign out", SignOut),
"Share Feedback", ]
feedback::feedback_editor::GiveFeedback, } 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( fn render_toggle_contacts_button(
@ -695,11 +699,10 @@ impl CollabTitlebarItem {
) )
.contained(), .contained(),
) )
.with_child( .with_children(
ChildView::new(&self.user_menu, cx) self.user_menu
.aligned() .as_ref()
.bottom() .map(|menu| ChildView::new(&menu, cx).aligned().bottom().right()),
.right(),
) )
.into_any() .into_any()
} }