@@ -85,15 +85,24 @@ final class IDEWorkspaceWindowOverlayWindowController {
8585 switch notification. name {
8686 case kAXMovedNotification, kAXResizedNotification:
8787 if let rect = windowElement. rect {
88- panel. setFrame ( rect, display: false )
88+ let screen = NSScreen . screens
89+ . first ( where: { $0. frame. intersects ( rect) } ) ?? NSScreen . main
90+ let panelFrame = convertAXRectToNSPanelFrame (
91+ axRect: rect,
92+ forScreen: screen
93+ )
94+ panel. setFrame ( panelFrame, display: false )
8995 }
9096 default : continue
9197 }
9298 }
9399 }
94100
95101 if let rect = windowElement. rect {
96- panel. setFrame ( rect, display: false )
102+ let screen = NSScreen . screens. first ( where: { $0. frame. intersects ( rect) } ) ?? NSScreen
103+ . main
104+ let panelFrame = convertAXRectToNSPanelFrame ( axRect: rect, forScreen: screen)
105+ panel. setFrame ( panelFrame, display: false )
97106 }
98107 }
99108
@@ -135,3 +144,16 @@ final class IDEWorkspaceWindowOverlayWindowController {
135144 }
136145}
137146
147+ func convertAXRectToNSPanelFrame( axRect: CGRect , forScreen screen: NSScreen ? ) -> CGRect {
148+ guard let screen = screen else { return . zero }
149+ let screenFrame = screen. frame
150+ let flippedY = screenFrame. origin. y + screenFrame. size
151+ . height - ( axRect. origin. y + axRect. size. height)
152+ return CGRect (
153+ x: axRect. origin. x,
154+ y: flippedY,
155+ width: axRect. size. width,
156+ height: axRect. size. height
157+ )
158+ }
159+
0 commit comments