Skip to content

Commit 9c12f99

Browse files
committed
Fix overlay position
1 parent 962649e commit 9c12f99

File tree

1 file changed

+24
-2
lines changed

1 file changed

+24
-2
lines changed

OverlayWindow/Sources/OverlayWindow/IDEWorkspaceWindowOverlayWindowController.swift

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)