general: cleanup
This commit is contained in:
@@ -16,6 +16,7 @@ final class MenuBarGuideOverlayPresenter {
|
|||||||
private var window: NSWindow?
|
private var window: NSWindow?
|
||||||
private var displayLink: CVDisplayLink?
|
private var displayLink: CVDisplayLink?
|
||||||
private var lastWindowFrame: CGRect = .zero
|
private var lastWindowFrame: CGRect = .zero
|
||||||
|
private var onboardingWindowObserver: NSObjectProtocol?
|
||||||
|
|
||||||
func updateVisibility(isVisible: Bool) {
|
func updateVisibility(isVisible: Bool) {
|
||||||
if isVisible {
|
if isVisible {
|
||||||
@@ -117,6 +118,28 @@ final class MenuBarGuideOverlayPresenter {
|
|||||||
let overlayView = MenuBarGuideOverlayView()
|
let overlayView = MenuBarGuideOverlayView()
|
||||||
window.contentView = NSHostingView(rootView: overlayView)
|
window.contentView = NSHostingView(rootView: overlayView)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func setupOnboardingWindowObserver() {
|
||||||
|
// Remove any existing observer to prevent duplicates
|
||||||
|
if let observer = onboardingWindowObserver {
|
||||||
|
NotificationCenter.default.removeObserver(observer)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add observer for when the onboarding window is closed
|
||||||
|
onboardingWindowObserver = NotificationCenter.default.addObserver(
|
||||||
|
forName: NSWindow.willCloseNotification,
|
||||||
|
object: nil,
|
||||||
|
queue: .main
|
||||||
|
) { [weak self] notification in
|
||||||
|
guard let window = notification.object as? NSWindow,
|
||||||
|
window.identifier == WindowIdentifiers.onboarding else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hide the overlay when onboarding window closes
|
||||||
|
self?.hide()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct MenuBarGuideOverlayView: View {
|
struct MenuBarGuideOverlayView: View {
|
||||||
|
|||||||
@@ -31,20 +31,11 @@ final class OnboardingWindowPresenter {
|
|||||||
|
|
||||||
private var windowController: NSWindowController?
|
private var windowController: NSWindowController?
|
||||||
private var closeObserver: NSObjectProtocol?
|
private var closeObserver: NSObjectProtocol?
|
||||||
private var isShowingWindow = false
|
|
||||||
|
|
||||||
func show(settingsManager: SettingsManager) {
|
func show(settingsManager: SettingsManager) {
|
||||||
print("DEBUG: OnboardingWindowPresenter.show called")
|
|
||||||
if activateIfPresent() {
|
if activateIfPresent() {
|
||||||
print("DEBUG: Onboarding already present, activated")
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
guard !isShowingWindow else {
|
|
||||||
print("DEBUG: Onboarding already showing")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
isShowingWindow = true
|
|
||||||
print("DEBUG: Creating new onboarding window")
|
|
||||||
createWindow(settingsManager: settingsManager)
|
createWindow(settingsManager: settingsManager)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,10 +70,11 @@ final class OnboardingWindowPresenter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func close() {
|
func close() {
|
||||||
removeCloseObserver()
|
// Notify overlay presenter to hide the guide overlay
|
||||||
|
MenuBarGuideOverlayPresenter.shared.hide()
|
||||||
|
|
||||||
windowController?.window?.close()
|
windowController?.window?.close()
|
||||||
windowController = nil
|
windowController = nil
|
||||||
isShowingWindow = false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private func createWindow(settingsManager: SettingsManager) {
|
private func createWindow(settingsManager: SettingsManager) {
|
||||||
@@ -123,28 +115,10 @@ final class OnboardingWindowPresenter {
|
|||||||
|
|
||||||
windowController = controller
|
windowController = controller
|
||||||
|
|
||||||
removeCloseObserver()
|
// Setup observer for when the onboarding window closes
|
||||||
closeObserver = NotificationCenter.default.addObserver(
|
MenuBarGuideOverlayPresenter.shared.setupOnboardingWindowObserver()
|
||||||
forName: NSWindow.willCloseNotification,
|
|
||||||
object: window,
|
|
||||||
queue: .main
|
|
||||||
) { [weak self] _ in
|
|
||||||
Task { @MainActor in
|
|
||||||
self?.windowController = nil
|
|
||||||
self?.isShowingWindow = false
|
|
||||||
self?.removeCloseObserver()
|
|
||||||
}
|
|
||||||
NotificationCenter.default.post(
|
|
||||||
name: Notification.Name("OnboardingWindowDidClose"), object: nil)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private func removeCloseObserver() {
|
|
||||||
if let observer = closeObserver {
|
|
||||||
NotificationCenter.default.removeObserver(observer)
|
|
||||||
closeObserver = nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct OnboardingContainerView: View {
|
struct OnboardingContainerView: View {
|
||||||
|
|||||||
@@ -13,24 +13,16 @@ final class SettingsWindowPresenter {
|
|||||||
|
|
||||||
private var windowController: NSWindowController?
|
private var windowController: NSWindowController?
|
||||||
private var closeObserver: NSObjectProtocol?
|
private var closeObserver: NSObjectProtocol?
|
||||||
private var isShowingWindow = false
|
|
||||||
|
|
||||||
func show(settingsManager: SettingsManager, initialTab: Int = 0) {
|
func show(settingsManager: SettingsManager, initialTab: Int = 0) {
|
||||||
if focusExistingWindow(tab: initialTab) { return }
|
if focusExistingWindow(tab: initialTab) { return }
|
||||||
guard !isShowingWindow else { return }
|
|
||||||
isShowingWindow = true
|
|
||||||
createWindow(settingsManager: settingsManager, initialTab: initialTab)
|
|
||||||
}
|
|
||||||
|
|
||||||
func focus(tab: Int) {
|
createWindow(settingsManager: settingsManager, initialTab: initialTab)
|
||||||
_ = focusExistingWindow(tab: tab)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func close() {
|
func close() {
|
||||||
windowController?.close()
|
windowController?.close()
|
||||||
windowController = nil
|
windowController = nil
|
||||||
isShowingWindow = false
|
|
||||||
removeCloseObserver()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@discardableResult
|
@discardableResult
|
||||||
@@ -95,28 +87,6 @@ final class SettingsWindowPresenter {
|
|||||||
|
|
||||||
windowController = controller
|
windowController = controller
|
||||||
|
|
||||||
removeCloseObserver()
|
|
||||||
closeObserver = NotificationCenter.default.addObserver(
|
|
||||||
forName: NSWindow.willCloseNotification,
|
|
||||||
object: window,
|
|
||||||
queue: .main
|
|
||||||
) { [weak self] _ in
|
|
||||||
Task { @MainActor [weak self] in
|
|
||||||
self?.windowController = nil
|
|
||||||
self?.isShowingWindow = false
|
|
||||||
self?.removeCloseObserver()
|
|
||||||
NotificationCenter.default.post(
|
|
||||||
name: Notification.Name("SettingsWindowDidClose"), object: nil)
|
|
||||||
}
|
|
||||||
self?.isShowingWindow = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private func removeCloseObserver() {
|
|
||||||
if let observer = closeObserver {
|
|
||||||
NotificationCenter.default.removeObserver(observer)
|
|
||||||
closeObserver = nil
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user