mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-17 01:06:08 +03:00
macos: set the proper app focus state
This commit is contained in:
@ -83,14 +83,27 @@ extension Ghostty {
|
||||
}
|
||||
self.app = app
|
||||
|
||||
#if os(macOS)
|
||||
// Subscribe to notifications for keyboard layout change so that we can update Ghostty.
|
||||
NotificationCenter.default.addObserver(
|
||||
#if os(macOS)
|
||||
// Set our initial focus state
|
||||
ghostty_app_set_focus(app, NSApp.isActive)
|
||||
|
||||
let center = NotificationCenter.default
|
||||
center.addObserver(
|
||||
self,
|
||||
selector: #selector(keyboardSelectionDidChange(notification:)),
|
||||
name: NSTextInputContext.keyboardSelectionDidChangeNotification,
|
||||
object: nil)
|
||||
#endif
|
||||
center.addObserver(
|
||||
self,
|
||||
selector: #selector(applicationDidBecomeActive(notification:)),
|
||||
name: NSApplication.didBecomeActiveNotification,
|
||||
object: nil)
|
||||
center.addObserver(
|
||||
self,
|
||||
selector: #selector(applicationDidResignActive(notification:)),
|
||||
name: NSApplication.didResignActiveNotification,
|
||||
object: nil)
|
||||
#endif
|
||||
|
||||
self.readiness = .ready
|
||||
}
|
||||
@ -98,14 +111,10 @@ extension Ghostty {
|
||||
deinit {
|
||||
// This will force the didSet callbacks to run which free.
|
||||
self.app = nil
|
||||
|
||||
#if os(macOS)
|
||||
// Remove our observer
|
||||
NotificationCenter.default.removeObserver(
|
||||
self,
|
||||
name: NSTextInputContext.keyboardSelectionDidChangeNotification,
|
||||
object: nil)
|
||||
#endif
|
||||
|
||||
#if os(macOS)
|
||||
NotificationCenter.default.removeObserver(self)
|
||||
#endif
|
||||
}
|
||||
|
||||
// MARK: App Operations
|
||||
@ -266,6 +275,19 @@ extension Ghostty {
|
||||
ghostty_app_keyboard_changed(app)
|
||||
}
|
||||
|
||||
// Called when the app becomes active.
|
||||
@objc private func applicationDidBecomeActive(notification: NSNotification) {
|
||||
guard let app = self.app else { return }
|
||||
ghostty_app_set_focus(app, true)
|
||||
}
|
||||
|
||||
// Called when the app becomes inactive.
|
||||
@objc private func applicationDidResignActive(notification: NSNotification) {
|
||||
guard let app = self.app else { return }
|
||||
ghostty_app_set_focus(app, false)
|
||||
}
|
||||
|
||||
|
||||
// MARK: Ghostty Callbacks (macOS)
|
||||
|
||||
static func closeSurface(_ userdata: UnsafeMutableRawPointer?, processAlive: Bool) {
|
||||
|
@ -288,6 +288,7 @@ pub fn setQuit(self: *App) !void {
|
||||
/// This is separate from surface focus events. See the `focused`
|
||||
/// field for more information.
|
||||
pub fn focusEvent(self: *App, focused: bool) void {
|
||||
log.debug("focus event focused={}", .{focused});
|
||||
self.focused = focused;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user