Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 2 additions & 54 deletions Sources/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -132,60 +132,8 @@ final class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCent
MacSentryStartupPolicy.isRunningUnderXCTest(environment: env)
}

@MainActor
final class MainWindowContext {
let windowId: UUID
let tabManager: TabManager
let sidebarState: SidebarState
let sidebarSelectionState: SidebarSelectionState
var fileExplorerState: FileExplorerState?
let keyboardFocusCoordinator: MainWindowFocusController
var cmuxConfigStore: CmuxConfigStore?
var closeObserver: WindowCloseObserver?
weak var window: NSWindow?
/// Per-window Dock owned by this context and torn down with it.
var windowDock: DockSplitStore?
private let workspaceTerminalFontSizeArbiter:
WorkspaceTerminalFontSizeArbiter
/// Window-scoped font-size queue. Requests contain stable workspace ids;
/// teardown cancels the queue before any surface owner is released.
lazy var workspaceTerminalFontSizeCoordinator =
WorkspaceTerminalFontSizeCoordinator(
tabManager: tabManager,
arbiter: workspaceTerminalFontSizeArbiter
)
#if DEBUG
var debugWorkspaceTerminalFontSizeEnqueueResultOverride: Bool?
#endif

init(
windowId: UUID,
tabManager: TabManager,
sidebarState: SidebarState,
sidebarSelectionState: SidebarSelectionState,
fileExplorerState: FileExplorerState?,
cmuxConfigStore: CmuxConfigStore?,
window: NSWindow?,
workspaceTerminalFontSizeArbiter:
WorkspaceTerminalFontSizeArbiter
) {
self.windowId = windowId
self.tabManager = tabManager
self.sidebarState = sidebarState
self.sidebarSelectionState = sidebarSelectionState
self.fileExplorerState = fileExplorerState
self.cmuxConfigStore = cmuxConfigStore
self.window = window
self.workspaceTerminalFontSizeArbiter =
workspaceTerminalFontSizeArbiter
self.keyboardFocusCoordinator = MainWindowFocusController(
windowId: windowId,
window: window,
tabManager: tabManager,
fileExplorerState: fileExplorerState
)
}
}
/// Compatibility name for the independently owned main-window model.
typealias MainWindowContext = CmuxMainWindowContext

struct ScriptableMainWindowState {
let windowId: UUID
Expand Down
57 changes: 57 additions & 0 deletions Sources/CmuxMainWindowContext.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import AppKit

/// Owns the models and resource handles scoped to a single main window.
@MainActor
final class CmuxMainWindowContext {
let windowId: UUID
let tabManager: TabManager
let sidebarState: SidebarState
let sidebarSelectionState: SidebarSelectionState
var fileExplorerState: FileExplorerState?
let keyboardFocusCoordinator: MainWindowFocusController
var cmuxConfigStore: CmuxConfigStore?
var closeObserver: WindowCloseObserver?
weak var window: NSWindow?
/// Per-window Dock owned by this context and torn down with it.
var windowDock: DockSplitStore?
private let workspaceTerminalFontSizeArbiter:
WorkspaceTerminalFontSizeArbiter
/// Window-scoped font-size queue. Requests contain stable workspace ids;
/// teardown cancels the queue before any surface owner is released.
lazy var workspaceTerminalFontSizeCoordinator =
WorkspaceTerminalFontSizeCoordinator(
tabManager: tabManager,
arbiter: workspaceTerminalFontSizeArbiter
)
#if DEBUG
var debugWorkspaceTerminalFontSizeEnqueueResultOverride: Bool?
#endif

init(
windowId: UUID,
tabManager: TabManager,
sidebarState: SidebarState,
sidebarSelectionState: SidebarSelectionState,
fileExplorerState: FileExplorerState?,
cmuxConfigStore: CmuxConfigStore?,
window: NSWindow?,
workspaceTerminalFontSizeArbiter:
WorkspaceTerminalFontSizeArbiter
) {
self.windowId = windowId
self.tabManager = tabManager
self.sidebarState = sidebarState
self.sidebarSelectionState = sidebarSelectionState
self.fileExplorerState = fileExplorerState
self.cmuxConfigStore = cmuxConfigStore
self.window = window
self.workspaceTerminalFontSizeArbiter =
workspaceTerminalFontSizeArbiter
self.keyboardFocusCoordinator = MainWindowFocusController(
windowId: windowId,
window: window,
tabManager: tabManager,
fileExplorerState: fileExplorerState
)
}
}
2 changes: 1 addition & 1 deletion Sources/MainWindowRegistry.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import AppKit
/// Owns the identity index that maps terminal windows to their main-window contexts.
@MainActor
final class MainWindowRegistry {
typealias Context = AppDelegate.MainWindowContext
typealias Context = CmuxMainWindowContext

private(set) var contexts: [ObjectIdentifier: Context] = [:]

Expand Down
4 changes: 4 additions & 0 deletions cmux.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -780,6 +780,7 @@ C0DE71B10000000000000001 /* AppDelegate+AgentChatNotifications.swift in Sources
E7D100000000000000000005 /* CmuxMainThreadTurnProfiler.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7D100000000000000000006 /* CmuxMainThreadTurnProfiler.swift */; };
2F0C07000000000000000002 /* CmuxMainWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F0C07000000000000000001 /* CmuxMainWindow.swift */; };
D36090010000000000000005 /* CmuxMainWindowConstrainFrameTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D36090010000000000000006 /* CmuxMainWindowConstrainFrameTests.swift */; };
D4A200000000000000000001 /* CmuxMainWindowContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4A200000000000000000002 /* CmuxMainWindowContext.swift */; };
D36090020000000000000005 /* CmuxMainWindowFullScreenCapabilityTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D36090020000000000000006 /* CmuxMainWindowFullScreenCapabilityTests.swift */; };
799F1BEF876006EEB8CD1035 /* CMUXMobileCore in Frameworks */ = {isa = PBXBuildFile; productRef = EFB18E3B3099DFE2ECA3C263 /* CMUXMobileCore */; };
EFB18E3C0000000000000001 /* CMUXMobileCore in Frameworks */ = {isa = PBXBuildFile; productRef = EFB18E3B3099DFE2ECA3C263 /* CMUXMobileCore */; };
Expand Down Expand Up @@ -3611,6 +3612,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa =
E7D100000000000000000006 /* CmuxMainThreadTurnProfiler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Debug/CmuxMainThreadTurnProfiler.swift"; sourceTree = "<group>"; };
2F0C07000000000000000001 /* CmuxMainWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = App/CmuxMainWindow.swift; sourceTree = "<group>"; };
D36090010000000000000006 /* CmuxMainWindowConstrainFrameTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CmuxMainWindowConstrainFrameTests.swift; sourceTree = "<group>"; };
D4A200000000000000000002 /* CmuxMainWindowContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CmuxMainWindowContext.swift; sourceTree = "<group>"; };
D36090020000000000000006 /* CmuxMainWindowFullScreenCapabilityTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CmuxMainWindowFullScreenCapabilityTests.swift; sourceTree = "<group>"; };
CA1F0A02CA1F0A02CA1F0A02 /* CmuxModalAlertPresentation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CmuxModalAlertPresentation.swift; sourceTree = "<group>"; };
C54860110000000000000002 /* CmuxNavigationResolution.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CmuxNavigationResolution.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -6891,6 +6893,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa =
E7E300000000000000000002 /* SessionAutosaveCoordinator.swift */,
FEE012340000000000000002 /* FeedSidebarUITestCoordinator.swift */,
D4A100000000000000000002 /* MainWindowRegistry.swift */,
D4A200000000000000000002 /* CmuxMainWindowContext.swift */,
E7C100000000000000000002 /* TerminalCmdClickUITestCoordinator.swift */,
E7C100000000000000000004 /* TerminalCmdClickUITestConfiguration.swift */,
E7C100000000000000000006 /* TerminalCmdClickUITestManifestWriter.swift */,
Expand Down Expand Up @@ -9387,6 +9390,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa =
E7D100000000000000000003 /* CmuxMainRunLoopStallMonitor.swift in Sources */,
E7D100000000000000000005 /* CmuxMainThreadTurnProfiler.swift in Sources */,
2F0C07000000000000000002 /* CmuxMainWindow.swift in Sources */,
D4A200000000000000000001 /* CmuxMainWindowContext.swift in Sources */,
CA1F0A01CA1F0A01CA1F0A01 /* CmuxModalAlertPresentation.swift in Sources */,
C54860110000000000000001 /* CmuxNavigationResolution.swift in Sources */,
C54860120000000000000001 /* CmuxNavigationSurfaceDescriptor.swift in Sources */,
Expand Down