mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-15 00:06:09 +03:00
Merge pull request #2481 from ghostty-org/push-wzmwoosxuxmz
macos: use notification to detect when quick terminal shows/hides
This commit is contained in:
@ -155,6 +155,14 @@ class AppDelegate: NSObject,
|
|||||||
matching: [.keyDown],
|
matching: [.keyDown],
|
||||||
handler: localEventHandler)
|
handler: localEventHandler)
|
||||||
|
|
||||||
|
// Notifications
|
||||||
|
NotificationCenter.default.addObserver(
|
||||||
|
self,
|
||||||
|
selector: #selector(quickTerminalDidChangeVisibility),
|
||||||
|
name: .quickTerminalDidChangeVisibility,
|
||||||
|
object: nil
|
||||||
|
)
|
||||||
|
|
||||||
// Configure user notifications
|
// Configure user notifications
|
||||||
let actions = [
|
let actions = [
|
||||||
UNNotificationAction(identifier: Ghostty.userNotificationActionShow, title: "Show")
|
UNNotificationAction(identifier: Ghostty.userNotificationActionShow, title: "Show")
|
||||||
@ -409,6 +417,11 @@ class AppDelegate: NSObject,
|
|||||||
return event
|
return event
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc private func quickTerminalDidChangeVisibility(_ notification: Notification) {
|
||||||
|
guard let quickController = notification.object as? QuickTerminalController else { return }
|
||||||
|
self.menuQuickTerminal?.state = if (quickController.visible) { .on } else { .off }
|
||||||
|
}
|
||||||
|
|
||||||
//MARK: - Restorable State
|
//MARK: - Restorable State
|
||||||
|
|
||||||
/// We support NSSecureCoding for restorable state. Required as of macOS Sonoma (14) but a good idea anyways.
|
/// We support NSSecureCoding for restorable state. Required as of macOS Sonoma (14) but a good idea anyways.
|
||||||
@ -622,8 +635,6 @@ class AppDelegate: NSObject,
|
|||||||
|
|
||||||
guard let quickController = self.quickController else { return }
|
guard let quickController = self.quickController else { return }
|
||||||
quickController.toggle()
|
quickController.toggle()
|
||||||
|
|
||||||
self.menuQuickTerminal?.state = if (quickController.visible) { .on } else { .off }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Toggles visibility of all Ghosty Terminal windows. When hidden, activates Ghostty as the frontmost application
|
/// Toggles visibility of all Ghosty Terminal windows. When hidden, activates Ghostty as the frontmost application
|
||||||
|
@ -140,6 +140,12 @@ class QuickTerminalController: BaseTerminalController {
|
|||||||
guard !visible else { return }
|
guard !visible else { return }
|
||||||
visible = true
|
visible = true
|
||||||
|
|
||||||
|
// Notify the change
|
||||||
|
NotificationCenter.default.post(
|
||||||
|
name: .quickTerminalDidChangeVisibility,
|
||||||
|
object: self
|
||||||
|
)
|
||||||
|
|
||||||
// If we have a previously focused application and it isn't us, then
|
// If we have a previously focused application and it isn't us, then
|
||||||
// we want to store it so we can restore state later.
|
// we want to store it so we can restore state later.
|
||||||
if !NSApp.isActive {
|
if !NSApp.isActive {
|
||||||
@ -170,6 +176,12 @@ class QuickTerminalController: BaseTerminalController {
|
|||||||
guard visible else { return }
|
guard visible else { return }
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
|
// Notify the change
|
||||||
|
NotificationCenter.default.post(
|
||||||
|
name: .quickTerminalDidChangeVisibility,
|
||||||
|
object: self
|
||||||
|
)
|
||||||
|
|
||||||
animateWindowOut(window: window, to: position)
|
animateWindowOut(window: window, to: position)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -350,3 +362,8 @@ class QuickTerminalController: BaseTerminalController {
|
|||||||
syncAppearance()
|
syncAppearance()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension Notification.Name {
|
||||||
|
/// The quick terminal did become hidden or visible.
|
||||||
|
static let quickTerminalDidChangeVisibility = Notification.Name("QuickTerminalDidChangeVisibility")
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user