@@ -142,13 +142,14 @@ private extension WidgetWindowsController {
142142 await updateWidgetsAndNotifyChangeOfEditor ( immediately: false )
143143 case . mainWindowChanged:
144144 await updateWidgetsAndNotifyChangeOfEditor ( immediately: false )
145- case . moved,
146- . resized,
147- . windowMoved,
148- . windowResized,
149- . windowMiniaturized,
150- . windowDeminiaturized:
145+ case . windowMiniaturized, . windowDeminiaturized:
151146 await updateWidgets ( immediately: false )
147+ case . resized,
148+ . moved,
149+ . windowMoved,
150+ . windowResized:
151+ await updateWidgets ( immediately: false )
152+ await updateChatWindowLocation ( )
152153 case . created, . uiElementDestroyed, . xcodeCompletionPanelChanged,
153154 . applicationDeactivated:
154155 continue
@@ -339,8 +340,7 @@ extension WidgetWindowsController {
339340
340341 // Generate a default location when no workspace is opened
341342 private func generateDefaultLocation( ) -> WidgetLocation {
342- let mainScreen = NSScreen . main ?? NSScreen . screens. first!
343- let chatPanelFrame = UpdateLocationStrategy . getChatPanelFrame ( mainScreen)
343+ let chatPanelFrame = UpdateLocationStrategy . getChatPanelFrame ( isAttachedToXcodeEnabled: false )
344344
345345 return WidgetLocation (
346346 widgetFrame: . zero,
@@ -444,6 +444,18 @@ extension WidgetWindowsController {
444444
445445 updateWindowOpacityTask = task
446446 }
447+
448+ @MainActor
449+ func updateChatWindowLocation( ) {
450+ let state = store. withState { $0 }
451+ let isAttachedToXcodeEnabled = UserDefaults . shared. value ( for: \. autoAttachChatToXcode)
452+ if isAttachedToXcodeEnabled {
453+ if state. chatPanelState. isPanelDisplayed && !windows. chatPanelWindow. isWindowHidden {
454+ let frame = UpdateLocationStrategy . getChatPanelFrame ( isAttachedToXcodeEnabled: isAttachedToXcodeEnabled)
455+ windows. chatPanelWindow. setFrame ( frame, display: true , animate: true )
456+ }
457+ }
458+ }
447459
448460 func updateWindowLocation(
449461 animated: Bool ,
@@ -481,8 +493,11 @@ extension WidgetWindowsController {
481493 animate: animated
482494 )
483495 }
484-
485- if isChatPanelDetached {
496+
497+ let isAttachedToXcodeEnabled = UserDefaults . shared. value ( for: \. autoAttachChatToXcode)
498+ if isAttachedToXcodeEnabled {
499+ // update in `updateChatWindowLocation`
500+ } else if isChatPanelDetached {
486501 // don't update it!
487502 } else {
488503 windows. chatPanelWindow. setFrame (
@@ -523,10 +538,10 @@ extension WidgetWindowsController {
523538
524539 @MainActor
525540 func adjustChatPanelWindowLevel( ) async {
541+ let window = windows. chatPanelWindow
542+
526543 let disableFloatOnTopWhenTheChatPanelIsDetached = UserDefaults . shared
527544 . value ( for: \. disableFloatOnTopWhenTheChatPanelIsDetached)
528-
529- let window = windows. chatPanelWindow
530545 guard disableFloatOnTopWhenTheChatPanelIsDetached else {
531546 window. setFloatOnTop ( true )
532547 return
@@ -549,7 +564,7 @@ extension WidgetWindowsController {
549564 } else {
550565 false
551566 }
552-
567+
553568 if !floatOnTopWhenOverlapsXcode || !latestAppIsXcodeOrExtension {
554569 window. setFloatOnTop ( false )
555570 } else {
0 commit comments