From aa4aaa200facbc1a063efb658c545bd45970de4f Mon Sep 17 00:00:00 2001 From: McNight Date: Sun, 23 Feb 2025 19:34:27 +0100 Subject: [PATCH 1/3] fix(macos): prevent performing newTab shortcut on QuickTerminalWindow #5939 --- .../QuickTerminalController.swift | 18 +++++++++++------- .../Features/Terminal/TerminalManager.swift | 6 ++++++ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/macos/Sources/Features/QuickTerminal/QuickTerminalController.swift b/macos/Sources/Features/QuickTerminal/QuickTerminalController.swift index 807935806..7681a00fa 100644 --- a/macos/Sources/Features/QuickTerminal/QuickTerminalController.swift +++ b/macos/Sources/Features/QuickTerminal/QuickTerminalController.swift @@ -437,6 +437,16 @@ class QuickTerminalController: BaseTerminalController { } } + func showNoNewTabAlert() { + guard let window else { return } + let alert = NSAlert() + alert.messageText = "Cannot Create New Tab" + alert.informativeText = "Tabs aren't supported in the Quick Terminal." + alert.addButton(withTitle: "OK") + alert.alertStyle = .warning + alert.beginSheetModal(for: window) + } + // MARK: First Responder @IBAction override func closeWindow(_ sender: Any) { @@ -445,13 +455,7 @@ class QuickTerminalController: BaseTerminalController { } @IBAction func newTab(_ sender: Any?) { - guard let window else { return } - let alert = NSAlert() - alert.messageText = "Cannot Create New Tab" - alert.informativeText = "Tabs aren't supported in the Quick Terminal." - alert.addButton(withTitle: "OK") - alert.alertStyle = .warning - alert.beginSheetModal(for: window) + showNoNewTabAlert() } @IBAction func toggleGhosttyFullScreen(_ sender: Any) { diff --git a/macos/Sources/Features/Terminal/TerminalManager.swift b/macos/Sources/Features/Terminal/TerminalManager.swift index a75ee78f8..1647d066a 100644 --- a/macos/Sources/Features/Terminal/TerminalManager.swift +++ b/macos/Sources/Features/Terminal/TerminalManager.swift @@ -125,6 +125,12 @@ class TerminalManager { } private func newTab(to parent: NSWindow, withBaseConfig base: Ghostty.SurfaceConfiguration?) { + // If the parent window is a QuickTerminalWindow, we early return with an alert. + if let controller = parent.windowController as? QuickTerminalController { + controller.showNoNewTabAlert() + return + } + // If our parent is in non-native fullscreen, then new tabs do not work. // See: https://github.com/mitchellh/ghostty/issues/392 if let controller = parent.windowController as? TerminalController, From 1254c6b981ac25ee5db037206649f98e1a0c4454 Mon Sep 17 00:00:00 2001 From: McNight Date: Tue, 25 Feb 2025 00:17:01 +0100 Subject: [PATCH 2/3] fix(macos): address MR feedback #5939 --- .../QuickTerminal/QuickTerminalController.swift | 13 +++++++++++++ .../Sources/Features/Terminal/TerminalManager.swift | 7 ++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/macos/Sources/Features/QuickTerminal/QuickTerminalController.swift b/macos/Sources/Features/QuickTerminal/QuickTerminalController.swift index 7681a00fa..0ffbbc49e 100644 --- a/macos/Sources/Features/QuickTerminal/QuickTerminalController.swift +++ b/macos/Sources/Features/QuickTerminal/QuickTerminalController.swift @@ -59,6 +59,11 @@ class QuickTerminalController: BaseTerminalController { selector: #selector(ghosttyConfigDidChange(_:)), name: .ghosttyConfigDidChange, object: nil) + center.addObserver( + self, + selector: #selector(onNewTab), + name: Ghostty.Notification.ghosttyNewTab, + object: nil) } required init?(coder: NSCoder) { @@ -496,6 +501,14 @@ class QuickTerminalController: BaseTerminalController { syncAppearance() } + @objc private func onNewTab(notification: SwiftUI.Notification) { + guard let surfaceView = notification.object as? Ghostty.SurfaceView else { return } + guard let window = surfaceView.window else { return } + guard window.windowController is QuickTerminalController else { return } + // Tabs aren't supported with Quick Terminals or derivatives + showNoNewTabAlert() + } + private struct DerivedConfig { let quickTerminalScreen: QuickTerminalScreen let quickTerminalAnimationDuration: Double diff --git a/macos/Sources/Features/Terminal/TerminalManager.swift b/macos/Sources/Features/Terminal/TerminalManager.swift index 1647d066a..07735cb58 100644 --- a/macos/Sources/Features/Terminal/TerminalManager.swift +++ b/macos/Sources/Features/Terminal/TerminalManager.swift @@ -125,11 +125,8 @@ class TerminalManager { } private func newTab(to parent: NSWindow, withBaseConfig base: Ghostty.SurfaceConfiguration?) { - // If the parent window is a QuickTerminalWindow, we early return with an alert. - if let controller = parent.windowController as? QuickTerminalController { - controller.showNoNewTabAlert() - return - } + // Making sure that we're dealing with a TerminalController + guard parent.windowController is TerminalController else { return } // If our parent is in non-native fullscreen, then new tabs do not work. // See: https://github.com/mitchellh/ghostty/issues/392 From b4349d322679bd8423b9780d1c63fd129cf97ba2 Mon Sep 17 00:00:00 2001 From: McNight Date: Tue, 25 Feb 2025 00:18:02 +0100 Subject: [PATCH 3/3] fix(macos): make showNoNewTabAlert method private #5939 --- .../Features/QuickTerminal/QuickTerminalController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/macos/Sources/Features/QuickTerminal/QuickTerminalController.swift b/macos/Sources/Features/QuickTerminal/QuickTerminalController.swift index 0ffbbc49e..4e4d3167f 100644 --- a/macos/Sources/Features/QuickTerminal/QuickTerminalController.swift +++ b/macos/Sources/Features/QuickTerminal/QuickTerminalController.swift @@ -442,7 +442,7 @@ class QuickTerminalController: BaseTerminalController { } } - func showNoNewTabAlert() { + private func showNoNewTabAlert() { guard let window else { return } let alert = NSAlert() alert.messageText = "Cannot Create New Tab"