Update stuff for lock screen widget width

This commit is contained in:
Hariharan Mudaliar 2026-01-22 21:09:05 +05:30
commit ab6877e59c
No known key found for this signature in database
GPG key ID: 025583EB0BE5640E
7 changed files with 200 additions and 17 deletions

View file

@ -10,6 +10,7 @@ import AppKit
import SkyLightWindow
import Defaults
import QuartzCore
import Combine
@MainActor
final class LockScreenPanelAnimator: ObservableObject {
@ -32,10 +33,12 @@ class LockScreenPanelManager {
private var hideTask: Task<Void, Never>?
private var screenChangeObserver: NSObjectProtocol?
private var workspaceObservers: [NSObjectProtocol] = []
private var cancellables = Set<AnyCancellable>()
private init() {
print("[\(timestamp())] LockScreenPanelManager: initialized")
registerScreenChangeObservers()
observeDefaultChanges()
}
private func timestamp() -> String {
@ -118,8 +121,9 @@ class LockScreenPanelManager {
panelAnimator.isPresented = false
LockScreenTimerWidgetManager.shared.notifyMusicPanelFrameChanged(animated: false)
let hosting = NSHostingView(rootView: LockScreenMusicPanel(animator: panelAnimator))
hosting.frame = NSRect(origin: .zero, size: targetFrame.size)
let hosting = NSHostingView(rootView: LockScreenMusicPanel(animator: panelAnimator))
hosting.frame = NSRect(origin: .zero, size: targetFrame.size)
hosting.autoresizingMask = [.width, .height]
window.contentView = hosting
// Ensure the underlying window content is clipped to rounded corners
@ -235,6 +239,15 @@ class LockScreenPanelManager {
print("[\(timestamp())] LockScreenPanelManager: realigned window due to \(reason)")
}
private func observeDefaultChanges() {
Defaults.publisher(.lockScreenMusicPanelWidth)
.receive(on: RunLoop.main)
.sink { [weak self] _ in
self?.applyOffsetAdjustment(animated: true)
}
.store(in: &cancellables)
}
private func collapsedFrame(for screenFrame: NSRect) -> NSRect {
let collapsedSize = LockScreenMusicPanel.collapsedSize
let originX = screenFrame.midX - (collapsedSize.width / 2)

View file

@ -75,6 +75,13 @@ final class LockScreenTimerWidgetManager {
self.refreshPositionForOffsets(animated: true)
}
.store(in: &cancellables)
Defaults.publisher(.lockScreenTimerWidgetWidth, options: [])
.receive(on: RunLoop.main)
.sink { _ in
LockScreenTimerWidgetPanelManager.shared.refreshPosition(animated: true)
}
.store(in: &cancellables)
}
private func updateVisibility() {
@ -114,6 +121,7 @@ final class LockScreenTimerWidgetPanelManager {
let window = ensureWindow()
let frame = targetFrame(on: screen)
window.setFrame(frame, display: true)
updateHostingViewSize(for: window, size: frame.size)
latestFrame = frame
window.alphaValue = 1
window.orderFrontRegardless()
@ -161,6 +169,7 @@ final class LockScreenTimerWidgetPanelManager {
} else {
window.setFrame(frame, display: true)
}
updateHostingViewSize(for: window, size: frame.size)
latestFrame = frame
LockScreenReminderWidgetPanelManager.shared.refreshPosition(animated: animated)
}
@ -212,12 +221,17 @@ final class LockScreenTimerWidgetPanelManager {
let view = LockScreenTimerWidget(animator: animator)
let hosting = NSHostingView(rootView: view)
hosting.frame = NSRect(origin: .zero, size: LockScreenTimerWidget.preferredSize)
hosting.autoresizingMask = [.width, .height]
hosting.wantsLayer = true
hosting.layer?.masksToBounds = true
hosting.layer?.cornerRadius = LockScreenTimerWidget.cornerRadius
return hosting
}
private func updateHostingViewSize(for window: NSWindow, size: CGSize) {
window.contentView?.frame = NSRect(origin: .zero, size: NSSize(width: size.width, height: size.height))
}
private func targetFrame(on screen: NSScreen) -> NSRect {
let size = LockScreenTimerWidget.preferredSize
let originX = screen.frame.midX - (size.width / 2)