Skip to content

Commit cb2f6a7

Browse files
committed
Fix incorrect window location
1 parent 778772b commit cb2f6a7

File tree

2 files changed

+59
-7
lines changed

2 files changed

+59
-7
lines changed

Core/Sources/SuggestionWidget/WidgetWindowsController.swift

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -282,8 +282,10 @@ extension WidgetWindowsController {
282282
let parent = focusElement.parent,
283283
let frame = parent.rect,
284284
let screen = NSScreen.screens.first(where: { $0.frame.origin == .zero }),
285-
let windowContainingScreen = NSScreen.screens
286-
.first(where: { $0.frame.contains(frame.origin) })
285+
let windowContainingScreen = NSScreen.screens.first(where: {
286+
let flippedScreenFrame = $0.frame.flipped(relativeTo: screen.frame)
287+
return flippedScreenFrame.contains(frame.origin)
288+
})
287289
{
288290
let positionMode = UserDefaults.shared
289291
.value(for: \.suggestionWidgetPositionMode)
@@ -358,7 +360,7 @@ extension WidgetWindowsController {
358360
defaultPanelLocation: .init(frame: .zero, alignPanelTop: false)
359361
)
360362
}
361-
363+
362364
window = workspaceWindow
363365
frame = rect
364366
}
@@ -475,6 +477,7 @@ extension WidgetWindowsController {
475477
)
476478

477479
if let suggestionPanelLocation = widgetLocation.suggestionPanelLocation {
480+
print(suggestionPanelLocation)
478481
windows.suggestionPanelWindow.setFrame(
479482
suggestionPanelLocation.frame,
480483
display: false,
@@ -930,3 +933,20 @@ func widgetLevel(_ addition: Int) -> NSWindow.Level {
930933
return .init(minimumWidgetLevel + addition)
931934
}
932935

936+
extension CGRect {
937+
func flipped(relativeTo reference: CGRect) -> CGRect {
938+
let flippedOrigin = CGPoint(
939+
x: origin.x,
940+
y: reference.height - origin.y - height
941+
)
942+
return CGRect(origin: flippedOrigin, size: size)
943+
}
944+
945+
func relative(to reference: CGRect) -> CGRect {
946+
let relativeOrigin = CGPoint(
947+
x: origin.x - reference.origin.x,
948+
y: origin.y - reference.origin.y
949+
)
950+
return CGRect(origin: relativeOrigin, size: size)
951+
}
952+
}

OverlayWindow/Sources/OverlayWindow/OverlayPanel.swift

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,18 +86,18 @@ final class OverlayPanel: NSPanel {
8686
}
8787

8888
func setTopLeftCoordinateFrame(_ frame: CGRect, display: Bool) {
89-
let screen = NSScreen.screens
90-
.first(where: { $0.frame.intersects(frame) }) ?? NSScreen.main
89+
let zeroScreen = NSScreen.screens.first { $0.frame == .zero }
90+
?? NSScreen.primaryScreen ?? NSScreen.main
9191
let panelFrame = Self.convertAXRectToNSPanelFrame(
9292
axRect: frame,
93-
forScreen: screen
93+
forPrimaryScreen: zeroScreen
9494
)
9595
panelState.windowFrame = frame
9696
panelState.windowFrameNSCoordinate = panelFrame
9797
setFrame(panelFrame, display: display)
9898
}
9999

100-
static func convertAXRectToNSPanelFrame(axRect: CGRect, forScreen screen: NSScreen?) -> CGRect {
100+
static func convertAXRectToNSPanelFrame(axRect: CGRect, forPrimaryScreen screen: NSScreen?) -> CGRect {
101101
guard let screen = screen else { return .zero }
102102
let screenFrame = screen.frame
103103
let flippedY = screenFrame.origin.y + screenFrame.size
@@ -139,3 +139,35 @@ func overlayLevel(_ addition: Int) -> NSWindow.Level {
139139
return .init(minimumWidgetLevel + addition)
140140
}
141141

142+
public extension CGRect {
143+
func flipped(relativeTo reference: CGRect) -> CGRect {
144+
let flippedOrigin = CGPoint(
145+
x: origin.x,
146+
y: reference.height - origin.y - height
147+
)
148+
return CGRect(origin: flippedOrigin, size: size)
149+
}
150+
151+
func relative(to reference: CGRect) -> CGRect {
152+
let relativeOrigin = CGPoint(
153+
x: origin.x - reference.origin.x,
154+
y: origin.y - reference.origin.y
155+
)
156+
return CGRect(origin: relativeOrigin, size: size)
157+
}
158+
}
159+
160+
public extension NSScreen {
161+
var isPrimary: Bool {
162+
let id = deviceDescription[.init("NSScreenNumber")] as? CGDirectDisplayID
163+
return id == CGMainDisplayID()
164+
}
165+
166+
static var primaryScreen: NSScreen? {
167+
NSScreen.screens.first {
168+
let id = $0.deviceDescription[.init("NSScreenNumber")] as? CGDirectDisplayID
169+
return id == CGMainDisplayID()
170+
}
171+
}
172+
}
173+

0 commit comments

Comments
 (0)