aerospace fork
Something went wrong. Try again.
Swift
at main
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162import AppKitimport Common
/// Problem ID-B6E178F2: It's not first-class citizen command in AeroSpace model, since it interacts with macOS API directly./// Consecutive macos-native-fullscreen commands may not works as expected (because macOS may report correct state with a/// delay), or may flicker////// The same applies to macos-native-minimize commandstruct MacosNativeFullscreenCommand: Command { let args: MacosNativeFullscreenCmdArgs /*conforms*/ let shouldResetClosedWindowsCache = false
func run(_ env: CmdEnv, _ io: CmdIo) async -> BinaryExitCode { guard let target = args.resolveTargetOrReportError(env, io) else { return .fail } guard let window = target.windowOrNil else { return .fail(io.err(noWindowIsFocused)) } guard let prevState = try? await window.isMacosFullscreen(.nonCancellable) else { return .fail(io.err(bugPrompt())) } let newState: Bool = switch args.toggle { case .on: true case .off: false case .toggle: !prevState } if newState == prevState { return switch args.failIfNoop { case true: .fail case false: .succ(io.err((newState ? "Already fullscreen. " : "Already not fullscreen. ") + "Tip: use --fail-if-noop to exit with non-zero exit code")) } } window.asMacWindow().setNativeFullscreen(newState) guard let workspace = window.visualWorkspace else { return .fail(io.err(windowIsntPartOfTree(window))) } if newState { // Enter fullscreen window.bind(to: workspace.macOsNativeFullscreenWindowsContainer, adaptiveWeight: 1, index: INDEX_BIND_LAST) } else { // Exit fullscreen switch window.layoutReason { case .macos(let prevParentKind): do { try await exitMacOsNativeUnconventionalState( window: window, prevParentKind: prevParentKind, workspace: workspace, .nonCancellable, ) } catch { return .fail(io.err(bugPrompt())) } default: do { try await window.relayoutWindow(on: workspace, .nonCancellable) } catch { return .fail(io.err(bugPrompt())) } } } return .succ }}