mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-08-02 14:57:31 +03:00
Merge pull request #565 from mitchellh/macos-fs-menu
macos: custom fullscreen menu item to respect non-native fullscreen
This commit is contained in:
@ -27,6 +27,7 @@ class AppDelegate: NSObject, ObservableObject, NSApplicationDelegate, GhosttyApp
|
|||||||
@IBOutlet private var menuCopy: NSMenuItem?
|
@IBOutlet private var menuCopy: NSMenuItem?
|
||||||
@IBOutlet private var menuPaste: NSMenuItem?
|
@IBOutlet private var menuPaste: NSMenuItem?
|
||||||
|
|
||||||
|
@IBOutlet private var menuToggleFullScreen: NSMenuItem?
|
||||||
@IBOutlet private var menuZoomSplit: NSMenuItem?
|
@IBOutlet private var menuZoomSplit: NSMenuItem?
|
||||||
@IBOutlet private var menuPreviousSplit: NSMenuItem?
|
@IBOutlet private var menuPreviousSplit: NSMenuItem?
|
||||||
@IBOutlet private var menuNextSplit: NSMenuItem?
|
@IBOutlet private var menuNextSplit: NSMenuItem?
|
||||||
@ -53,6 +54,14 @@ class AppDelegate: NSObject, ObservableObject, NSApplicationDelegate, GhosttyApp
|
|||||||
|
|
||||||
//MARK: - NSApplicationDelegate
|
//MARK: - NSApplicationDelegate
|
||||||
|
|
||||||
|
func applicationWillFinishLaunching(_ notification: Notification) {
|
||||||
|
UserDefaults.standard.register(defaults: [
|
||||||
|
// Disable the automatic full screen menu item because we handle
|
||||||
|
// it manually.
|
||||||
|
"NSFullScreenMenuItemEverywhere": false,
|
||||||
|
])
|
||||||
|
}
|
||||||
|
|
||||||
func applicationDidFinishLaunching(_ notification: Notification) {
|
func applicationDidFinishLaunching(_ notification: Notification) {
|
||||||
// System settings overrides
|
// System settings overrides
|
||||||
UserDefaults.standard.register(defaults: [
|
UserDefaults.standard.register(defaults: [
|
||||||
@ -143,6 +152,7 @@ class AppDelegate: NSObject, ObservableObject, NSApplicationDelegate, GhosttyApp
|
|||||||
syncMenuShortcut(action: "copy_to_clipboard", menuItem: self.menuCopy)
|
syncMenuShortcut(action: "copy_to_clipboard", menuItem: self.menuCopy)
|
||||||
syncMenuShortcut(action: "paste_from_clipboard", menuItem: self.menuPaste)
|
syncMenuShortcut(action: "paste_from_clipboard", menuItem: self.menuPaste)
|
||||||
|
|
||||||
|
syncMenuShortcut(action: "toggle_fullscreen", menuItem: self.menuToggleFullScreen)
|
||||||
syncMenuShortcut(action: "toggle_split_zoom", menuItem: self.menuZoomSplit)
|
syncMenuShortcut(action: "toggle_split_zoom", menuItem: self.menuZoomSplit)
|
||||||
syncMenuShortcut(action: "goto_split:previous", menuItem: self.menuPreviousSplit)
|
syncMenuShortcut(action: "goto_split:previous", menuItem: self.menuPreviousSplit)
|
||||||
syncMenuShortcut(action: "goto_split:next", menuItem: self.menuNextSplit)
|
syncMenuShortcut(action: "goto_split:next", menuItem: self.menuNextSplit)
|
||||||
@ -307,4 +317,9 @@ class AppDelegate: NSObject, ObservableObject, NSApplicationDelegate, GhosttyApp
|
|||||||
guard let url = URL(string: "https://github.com/mitchellh/ghostty") else { return }
|
guard let url = URL(string: "https://github.com/mitchellh/ghostty") else { return }
|
||||||
NSWorkspace.shared.open(url)
|
NSWorkspace.shared.open(url)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@IBAction func toggleFullScreen(_ sender: Any) {
|
||||||
|
guard let surface = focusedSurface() else { return }
|
||||||
|
ghostty.toggleFullscreen(surface: surface)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -260,6 +260,13 @@ extension Ghostty {
|
|||||||
AppDelegate.logger.warning("action failed action=\(action)")
|
AppDelegate.logger.warning("action failed action=\(action)")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toggleFullscreen(surface: ghostty_surface_t) {
|
||||||
|
let action = "toggle_fullscreen"
|
||||||
|
if (!ghostty_surface_binding_action(surface, action, UInt(action.count))) {
|
||||||
|
AppDelegate.logger.warning("action failed action=\(action)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Called when the selected keyboard changes. We have to notify Ghostty so that
|
// Called when the selected keyboard changes. We have to notify Ghostty so that
|
||||||
// it can reload the keyboard mapping for input.
|
// it can reload the keyboard mapping for input.
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22154" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22154"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
|
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
|
||||||
@ -30,6 +30,7 @@
|
|||||||
<outlet property="menuSelectSplitRight" destination="upj-mc-L7X" id="nLY-o1-lky"/>
|
<outlet property="menuSelectSplitRight" destination="upj-mc-L7X" id="nLY-o1-lky"/>
|
||||||
<outlet property="menuSplitHorizontal" destination="VUR-Ld-nLx" id="RxO-Zw-ovb"/>
|
<outlet property="menuSplitHorizontal" destination="VUR-Ld-nLx" id="RxO-Zw-ovb"/>
|
||||||
<outlet property="menuSplitVertical" destination="UDZ-4y-6xL" id="fgZ-Wb-8OR"/>
|
<outlet property="menuSplitVertical" destination="UDZ-4y-6xL" id="fgZ-Wb-8OR"/>
|
||||||
|
<outlet property="menuToggleFullScreen" destination="8kY-Pi-KaY" id="yQg-6V-OO6"/>
|
||||||
<outlet property="menuZoomSplit" destination="oPd-mn-IEH" id="wTu-jK-egI"/>
|
<outlet property="menuZoomSplit" destination="oPd-mn-IEH" id="wTu-jK-egI"/>
|
||||||
</connections>
|
</connections>
|
||||||
</customObject>
|
</customObject>
|
||||||
@ -163,6 +164,12 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem isSeparatorItem="YES" id="eu3-7i-yIM"/>
|
<menuItem isSeparatorItem="YES" id="eu3-7i-yIM"/>
|
||||||
|
<menuItem title="Toggle Full Screen" id="8kY-Pi-KaY">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleFullScreen:" target="bbz-4X-AYv" id="PQq-1F-kpT"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
<menuItem title="Bring All to Front" id="LE2-aR-0XJ">
|
<menuItem title="Bring All to Front" id="LE2-aR-0XJ">
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
<connections>
|
<connections>
|
||||||
|
Reference in New Issue
Block a user