mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-08-02 14:57:31 +03:00
macos: show warning in debug mode
This commit is contained in:
@ -94,6 +94,13 @@ struct PrimaryView: View {
|
||||
self.appDelegate.confirmQuit = $0
|
||||
})
|
||||
|
||||
VStack(spacing: 0) {
|
||||
// If we're running in debug mode we show a warning so that users
|
||||
// know that performance will be degraded.
|
||||
if (ghostty.info.mode == GHOSTTY_BUILD_MODE_DEBUG) {
|
||||
DebugBuildWarningView()
|
||||
}
|
||||
|
||||
Ghostty.TerminalSplit(onClose: Self.closeWindow, baseConfig: self.baseConfig)
|
||||
.ghosttyApp(ghostty.app!)
|
||||
.ghosttyConfig(ghostty.config!)
|
||||
@ -128,6 +135,7 @@ struct PrimaryView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static func closeWindow() {
|
||||
guard let currentWindow = NSApp.keyWindow else { return }
|
||||
@ -196,3 +204,34 @@ struct PrimaryView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct DebugBuildWarningView: View {
|
||||
@State private var isPopover = false
|
||||
|
||||
var body: some View {
|
||||
HStack {
|
||||
Spacer()
|
||||
|
||||
Image(systemName: "exclamationmark.triangle.fill")
|
||||
.foregroundColor(.yellow)
|
||||
|
||||
Text("You're running a debug build of Ghostty!")
|
||||
.padding(.all, 8)
|
||||
.popover(isPresented: $isPopover, arrowEdge: .bottom) {
|
||||
Text("""
|
||||
Debug builds of Ghostty are very slow and you may experience
|
||||
performance problems. Debug builds are only recommended during
|
||||
development.
|
||||
""")
|
||||
.padding(.all)
|
||||
}
|
||||
|
||||
Spacer()
|
||||
}
|
||||
.background(Color(.windowBackgroundColor))
|
||||
.frame(maxWidth: .infinity)
|
||||
.onTapGesture {
|
||||
isPopover = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -11,6 +11,11 @@ extension Ghostty {
|
||||
case loading, error, ready
|
||||
}
|
||||
|
||||
struct Info {
|
||||
var mode: ghostty_build_mode_e
|
||||
var version: String
|
||||
}
|
||||
|
||||
/// The AppState is the global state that is associated with the Swift app. This handles initially
|
||||
/// initializing Ghostty, loading the configuration, etc.
|
||||
class AppState: ObservableObject {
|
||||
@ -46,6 +51,18 @@ extension Ghostty {
|
||||
return ghostty_app_needs_confirm_quit(app)
|
||||
}
|
||||
|
||||
/// Build information
|
||||
var info: Info {
|
||||
let raw = ghostty_info()
|
||||
let version = NSString(
|
||||
bytes: raw.version,
|
||||
length: Int(raw.version_len),
|
||||
encoding: NSUTF8StringEncoding
|
||||
) ?? "unknown"
|
||||
|
||||
return Info(mode: raw.build_mode, version: String(version))
|
||||
}
|
||||
|
||||
/// Cached clipboard string for `read_clipboard` callback.
|
||||
private var cached_clipboard_string: String? = nil
|
||||
|
||||
|
Reference in New Issue
Block a user