macos: detect keyboard layout change and reload the keymap

This commit is contained in:
Mitchell Hashimoto
2023-08-09 19:42:13 -07:00
parent 3d23f26326
commit 57a527b0c9
3 changed files with 41 additions and 0 deletions

View File

@@ -74,6 +74,13 @@ extension Ghostty {
return
}
self.app = app
// Subscribe to notifications for keyboard layout change so that we can update Ghostty.
NotificationCenter.default.addObserver(
self,
selector: #selector(self.keyboardSelectionDidChange(notification:)),
name: NSTextInputContext.keyboardSelectionDidChangeNotification,
object: nil)
self.readiness = .ready
}
@@ -82,6 +89,12 @@ extension Ghostty {
// This will force the didSet callbacks to run which free.
self.app = nil
self.config = nil
// Remove our observer
NotificationCenter.default.removeObserver(
self,
name: NSTextInputContext.keyboardSelectionDidChangeNotification,
object: nil)
}
/// Initializes a new configuration and loads all the values.
@@ -132,6 +145,13 @@ extension Ghostty {
ghostty_surface_split_focus(surface, direction.toNative())
}
// Called when the selected keyboard changes. We have to notify Ghostty so that
// it can reload the keyboard mapping for input.
@objc private func keyboardSelectionDidChange(notification: NSNotification) {
guard let app = self.app else { return }
ghostty_app_keyboard_changed(app)
}
// MARK: Ghostty Callbacks
static func newSplit(_ userdata: UnsafeMutableRawPointer?, direction: ghostty_split_direction_e) {