Skip to content

Commit 9a0b911

Browse files
committed
Merge branch 'release/0.37.1'
2 parents ca47ad8 + 14d588b commit 9a0b911

File tree

3 files changed

+69
-10
lines changed

3 files changed

+69
-10
lines changed

Core/Sources/SuggestionWidget/WidgetWindowsController.swift

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -281,9 +281,13 @@ extension WidgetWindowsController {
281281
let focusElement = await xcodeInspector.focusedEditor?.element,
282282
let parent = focusElement.parent,
283283
let frame = parent.rect,
284-
let screen = NSScreen.screens.first(where: { $0.frame.origin == .zero }),
285-
let windowContainingScreen = NSScreen.screens
286-
.first(where: { $0.frame.contains(frame.origin) })
284+
let screen = NSScreen.screens.first(
285+
where: { $0.frame.origin == .zero }
286+
) ?? NSScreen.main,
287+
let windowContainingScreen = NSScreen.screens.first(where: {
288+
let flippedScreenFrame = $0.frame.flipped(relativeTo: screen.frame)
289+
return flippedScreenFrame.contains(frame.origin)
290+
})
287291
{
288292
let positionMode = UserDefaults.shared
289293
.value(for: \.suggestionWidgetPositionMode)
@@ -358,7 +362,7 @@ extension WidgetWindowsController {
358362
defaultPanelLocation: .init(frame: .zero, alignPanelTop: false)
359363
)
360364
}
361-
365+
362366
window = workspaceWindow
363367
frame = rect
364368
}
@@ -475,6 +479,7 @@ extension WidgetWindowsController {
475479
)
476480

477481
if let suggestionPanelLocation = widgetLocation.suggestionPanelLocation {
482+
print(suggestionPanelLocation)
478483
windows.suggestionPanelWindow.setFrame(
479484
suggestionPanelLocation.frame,
480485
display: false,
@@ -930,3 +935,21 @@ func widgetLevel(_ addition: Int) -> NSWindow.Level {
930935
return .init(minimumWidgetLevel + addition)
931936
}
932937

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

OverlayWindow/Sources/OverlayWindow/OverlayPanel.swift

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import AppKit
22
import Perception
33
import SwiftUI
4+
import Logger
45

56
struct OverlayFrameEnvironmentKey: EnvironmentKey {
67
static let defaultValue: CGRect = .zero
@@ -86,18 +87,21 @@ final class OverlayPanel: NSPanel {
8687
}
8788

8889
func setTopLeftCoordinateFrame(_ frame: CGRect, display: Bool) {
89-
let screen = NSScreen.screens
90-
.first(where: { $0.frame.intersects(frame) }) ?? NSScreen.main
90+
let zeroScreen = NSScreen.screens.first { $0.frame.origin == .zero }
91+
?? NSScreen.primaryScreen ?? NSScreen.main
9192
let panelFrame = Self.convertAXRectToNSPanelFrame(
9293
axRect: frame,
93-
forScreen: screen
94+
forPrimaryScreen: zeroScreen
9495
)
9596
panelState.windowFrame = frame
9697
panelState.windowFrameNSCoordinate = panelFrame
9798
setFrame(panelFrame, display: display)
9899
}
99100

100-
static func convertAXRectToNSPanelFrame(axRect: CGRect, forScreen screen: NSScreen?) -> CGRect {
101+
static func convertAXRectToNSPanelFrame(
102+
axRect: CGRect,
103+
forPrimaryScreen screen: NSScreen?
104+
) -> CGRect {
101105
guard let screen = screen else { return .zero }
102106
let screenFrame = screen.frame
103107
let flippedY = screenFrame.origin.y + screenFrame.size
@@ -139,3 +143,35 @@ func overlayLevel(_ addition: Int) -> NSWindow.Level {
139143
return .init(minimumWidgetLevel + addition)
140144
}
141145

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

Version.xcconfig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
APP_VERSION = 0.37.0
2-
APP_BUILD = 486
1+
APP_VERSION = 0.37.1
2+
APP_BUILD = 489
33
RELEASE_CHANNEL =
44
RELEASE_NUMBER = 1

0 commit comments

Comments
 (0)