From 0d5f5a741389bdc0caa2b4a4215671ee6b67388e Mon Sep 17 00:00:00 2001 From: Ying Zhong <0x00eeee@gmail.com> Date: Mon, 14 Sep 2026 09:41:11 +0800 Subject: [PATCH] Implement newWindowForTab --- .../EditorViewController+Menu.swift | 50 +++++++++---------- .../Editor/EditorWindowController.swift | 9 ++++ 2 files changed, 34 insertions(+), 25 deletions(-) diff --git a/MarkEditMac/Sources/Editor/Controllers/EditorViewController+Menu.swift b/MarkEditMac/Sources/Editor/Controllers/EditorViewController+Menu.swift index 20b347bee..a939416d8 100644 --- a/MarkEditMac/Sources/Editor/Controllers/EditorViewController+Menu.swift +++ b/MarkEditMac/Sources/Editor/Controllers/EditorViewController+Menu.swift @@ -157,6 +157,31 @@ extension EditorViewController { } } +// MARK: - Window & Tabbing + +extension EditorViewController { + @IBAction func toggleWindowFloating(_ sender: Any?) { + view.window?.level = view.window?.level == .floating ? .normal : .floating + } + + @IBAction func createNewTab(_ sender: Any?) { + let window = view.window + let tabbingMode = window?.tabbingMode + + // Force tabbing without mutating the persisted preference + EditorWindow.forcedTabbing = true + window?.tabbingMode = .preferred + NSDocumentController.shared.newDocument(sender) + + DispatchQueue.main.async { + EditorWindow.forcedTabbing = false + if let tabbingMode { + window?.tabbingMode = tabbingMode + } + } + } +} + // MARK: - Developer extension EditorViewController { @@ -310,23 +335,6 @@ private extension EditorViewController { view.window?.performClose(sender) } - @IBAction func createNewTab(_ sender: Any?) { - let window = view.window - let tabbingMode = window?.tabbingMode - - // Force tabbing without mutating the persisted preference - EditorWindow.forcedTabbing = true - window?.tabbingMode = .preferred - NSDocumentController.shared.newDocument(sender) - - DispatchQueue.main.async { - EditorWindow.forcedTabbing = false - if let tabbingMode { - window?.tabbingMode = tabbingMode - } - } - } - @IBAction func revealInFinder(_ sender: Any?) { guard let fileURL = document?.fileURL else { return } NSWorkspace.shared.activateFileViewerSelecting([fileURL]) @@ -501,14 +509,6 @@ private extension EditorViewController { } } -// MARK: - Window - -private extension EditorViewController { - @IBAction func toggleWindowFloating(_ sender: Any?) { - view.window?.level = view.window?.level == .floating ? .normal : .floating - } -} - // MARK: - Private private extension EditorViewController { diff --git a/MarkEditMac/Sources/Editor/EditorWindowController.swift b/MarkEditMac/Sources/Editor/EditorWindowController.swift index 0c7d836b1..4284d7ac7 100644 --- a/MarkEditMac/Sources/Editor/EditorWindowController.swift +++ b/MarkEditMac/Sources/Editor/EditorWindowController.swift @@ -6,6 +6,7 @@ // import AppKit +import MarkEditKit final class EditorWindowController: NSWindowController, NSWindowDelegate { var autosavedFrame: CGRect? @@ -52,6 +53,14 @@ final class EditorWindowController: NSWindowController, NSWindowDelegate { showWindowImmediately(sender) } + override func newWindowForTab(_ sender: Any?) { + guard let editorViewController else { + return Logger.assertFail("Missing editorViewController") + } + + editorViewController.createNewTab(sender) + } + func windowDidBecomeMain(_ notification: Notification) { NSApplication.shared.closeOpenPanels() }