Merge pull request #2286 from zed-industries/discoverable-sign-in

Max Brunsfeld created

Make sign-in more discoverable

Change summary

crates/client/src/client.rs                  |  4 +-
crates/collab_ui/src/collab_titlebar_item.rs | 24 ++++++++++++++++++---
2 files changed, 22 insertions(+), 6 deletions(-)

Detailed changes

crates/client/src/client.rs 🔗

@@ -66,12 +66,12 @@ pub const ZED_SECRET_CLIENT_TOKEN: &str = "618033988749894";
 pub const INITIAL_RECONNECTION_DELAY: Duration = Duration::from_millis(100);
 pub const CONNECTION_TIMEOUT: Duration = Duration::from_secs(5);
 
-actions!(client, [Authenticate, SignOut]);
+actions!(client, [SignIn, SignOut]);
 
 pub fn init(client: Arc<Client>, cx: &mut MutableAppContext) {
     cx.add_global_action({
         let client = client.clone();
-        move |_: &Authenticate, cx| {
+        move |_: &SignIn, cx| {
             let client = client.clone();
             cx.spawn(
                 |cx| async move { client.authenticate_and_connect(true, &cx).log_err().await },

crates/collab_ui/src/collab_titlebar_item.rs 🔗

@@ -4,7 +4,7 @@ use crate::{
     ToggleScreenSharing,
 };
 use call::{ActiveCall, ParticipantLocation, Room};
-use client::{proto::PeerId, Authenticate, ContactEventKind, SignOut, User, UserStore};
+use client::{proto::PeerId, ContactEventKind, SignIn, SignOut, User, UserStore};
 use clock::ReplicaId;
 use contacts_popover::ContactsPopover;
 use context_menu::{ContextMenu, ContextMenuItem};
@@ -119,12 +119,12 @@ impl View for CollabTitlebarItem {
         let status = &*status.borrow();
         if matches!(status, client::Status::Connected { .. }) {
             right_container.add_child(self.render_toggle_contacts_button(&theme, cx));
+            right_container.add_child(self.render_user_menu_button(&theme, cx));
         } else {
             right_container.add_children(self.render_connection_status(status, cx));
+            right_container.add_child(self.render_sign_in_button(&theme, cx));
         }
 
-        right_container.add_child(self.render_user_menu_button(&theme, cx));
-
         Stack::new()
             .with_child(left_container.boxed())
             .with_child(right_container.aligned().right().boxed())
@@ -313,7 +313,7 @@ impl CollabTitlebarItem {
                 vec![
                     ContextMenuItem::Item {
                         label: "Sign in".into(),
-                        action: Box::new(Authenticate),
+                        action: Box::new(SignIn),
                     },
                     ContextMenuItem::Item {
                         label: "Give Feedback".into(),
@@ -554,6 +554,22 @@ impl CollabTitlebarItem {
             .boxed()
     }
 
+    fn render_sign_in_button(&self, theme: &Theme, cx: &mut RenderContext<Self>) -> ElementBox {
+        let titlebar = &theme.workspace.titlebar;
+        MouseEventHandler::<SignIn>::new(0, cx, |state, _| {
+            let style = titlebar.sign_in_prompt.style_for(state, false);
+            Label::new("Sign In", style.text.clone())
+                .contained()
+                .with_style(style.container)
+                .boxed()
+        })
+        .with_cursor_style(CursorStyle::PointingHand)
+        .on_click(MouseButton::Left, move |_, cx| {
+            cx.dispatch_action(SignIn);
+        })
+        .boxed()
+    }
+
     fn render_contacts_popover_host<'a>(
         &'a self,
         theme: &'a theme::Titlebar,