diff --git a/crates/copilot/src/sign_in.rs b/crates/copilot/src/sign_in.rs index 2827aeac2d..9fee3fcfaa 100644 --- a/crates/copilot/src/sign_in.rs +++ b/crates/copilot/src/sign_in.rs @@ -23,28 +23,17 @@ pub fn init(cx: &mut MutableAppContext) { match &status { crate::Status::SigningIn { prompt } => { - if let Some(code_verification) = code_verification.as_ref() { - code_verification.update(cx, |code_verification, cx| { - code_verification.set_status(status, cx) - }); - cx.activate_window(code_verification.window_id()); + if let Some(code_verification_handle) = code_verification.as_mut() { + if cx.has_window(code_verification_handle.window_id()) { + code_verification_handle.update(cx, |code_verification_view, cx| { + code_verification_view.set_status(status, cx) + }); + cx.activate_window(code_verification_handle.window_id()); + } else { + create_copilot_auth_window(cx, &status, &mut code_verification); + } } else if let Some(_prompt) = prompt { - let window_size = cx.global::().theme.copilot.modal.dimensions(); - let window_options = WindowOptions { - bounds: gpui::WindowBounds::Fixed(RectF::new( - Default::default(), - window_size, - )), - titlebar: None, - center: true, - focus: true, - kind: WindowKind::Normal, - is_movable: true, - screen: None, - }; - let (_, view) = - cx.add_window(window_options, |_cx| CopilotCodeVerification::new(status)); - code_verification = Some(view); + create_copilot_auth_window(cx, &status, &mut code_verification); } } Status::Authorized | Status::Unauthorized => { @@ -67,6 +56,27 @@ pub fn init(cx: &mut MutableAppContext) { .detach(); } +fn create_copilot_auth_window( + cx: &mut MutableAppContext, + status: &Status, + code_verification: &mut Option>, +) { + let window_size = cx.global::().theme.copilot.modal.dimensions(); + let window_options = WindowOptions { + bounds: gpui::WindowBounds::Fixed(RectF::new(Default::default(), window_size)), + titlebar: None, + center: true, + focus: true, + kind: WindowKind::Normal, + is_movable: true, + screen: None, + }; + let (_, view) = cx.add_window(window_options, |_cx| { + CopilotCodeVerification::new(status.clone()) + }); + *code_verification = Some(view); +} + pub struct CopilotCodeVerification { status: Status, }