@@ -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::<Settings>().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<ViewHandle<CopilotCodeVerification>>,
+) {
+ let window_size = cx.global::<Settings>().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,
}