@@ -320,46 +320,38 @@ enum UpdateLocationStrategy {
320320 return selectionFrame
321321 }
322322
323- static func getChatPanelFrame(
324- isAttachedToXcodeEnabled: Bool = false ,
325- xcodeApp: XcodeAppInstanceInspector ? = nil
326- ) -> CGRect {
327- let screen = NSScreen . main ?? NSScreen . screens. first!
328- return getChatPanelFrame ( screen, isAttachedToXcodeEnabled: isAttachedToXcodeEnabled, xcodeApp: xcodeApp)
329- }
330-
331- static func getChatPanelFrame(
332- _ screen: NSScreen ,
333- isAttachedToXcodeEnabled: Bool = false ,
334- xcodeApp: XcodeAppInstanceInspector ? = nil
335- ) -> CGRect {
323+ static func getChatPanelFrame( _ screen: NSScreen ? = nil ) -> CGRect {
324+ let screen = screen ?? NSScreen . main ?? NSScreen . screens. first!
325+
336326 let visibleScreenFrame = screen. visibleFrame
337327
338328 // Default Frame
339- var width = min ( Style . panelWidth, visibleScreenFrame. width * 0.3 )
340- var height = visibleScreenFrame. height
341- var x = visibleScreenFrame. maxX - width
342- var y = visibleScreenFrame. minY
329+ let width = min ( Style . panelWidth, visibleScreenFrame. width * 0.3 )
330+ let height = visibleScreenFrame. height
331+ let x = visibleScreenFrame. maxX - width
332+ let y = visibleScreenFrame. minY
343333
344- if isAttachedToXcodeEnabled,
345- let latestActiveXcode = xcodeApp ?? XcodeInspector . shared. latestActiveXcode,
346- let xcodeWindow = latestActiveXcode. appElement. focusedWindow,
347- let xcodeScreen = latestActiveXcode. appScreen,
348- let xcodeRect = xcodeWindow. rect,
349- let mainDisplayScreen = NSScreen . screens. first ( where: { $0. frame. origin == . zero } ) // The main display should exist
350- {
351- let minWidth = Style . minChatPanelWidth
352- let visibleXcodeScreenFrame = xcodeScreen. visibleFrame
353-
354- width = max ( visibleXcodeScreenFrame. maxX - xcodeRect. maxX, minWidth)
355- height = xcodeRect. height
356- x = visibleXcodeScreenFrame. maxX - width
357-
358- // AXUIElement coordinates: Y=0 at top-left
359- // NSWindow coordinates: Y=0 at bottom-left
360- y = mainDisplayScreen. frame. maxY - xcodeRect. maxY + mainDisplayScreen. frame. minY
334+ return CGRect ( x: x, y: y, width: width, height: height)
335+ }
336+
337+ static func getAttachedChatPanelFrame( _ screen: NSScreen , workspaceWindowElement: AXUIElement ) -> CGRect {
338+ guard let xcodeScreen = workspaceWindowElement. maxIntersectionScreen,
339+ let xcodeRect = workspaceWindowElement. rect,
340+ let mainDisplayScreen = NSScreen . screens. first ( where: { $0. frame. origin == . zero } )
341+ else {
342+ return getChatPanelFrame ( )
361343 }
362344
345+ let minWidth = Style . minChatPanelWidth
346+ let visibleXcodeScreenFrame = xcodeScreen. visibleFrame
347+
348+ let width = max ( visibleXcodeScreenFrame. maxX - xcodeRect. maxX, minWidth)
349+ let height = xcodeRect. height
350+ let x = visibleXcodeScreenFrame. maxX - width
351+
352+ // AXUIElement coordinates: Y=0 at top-left
353+ // NSWindow coordinates: Y=0 at bottom-left
354+ let y = mainDisplayScreen. frame. maxY - xcodeRect. maxY + mainDisplayScreen. frame. minY
363355
364356 return CGRect ( x: x, y: y, width: width, height: height)
365357 }
0 commit comments