mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-08-02 14:57:31 +03:00
core: move resources dir to main global state
This commit is contained in:
11
src/App.zig
11
src/App.zig
@ -41,10 +41,6 @@ mailbox: Mailbox.Queue,
|
|||||||
/// Set to true once we're quitting. This never goes false again.
|
/// Set to true once we're quitting. This never goes false again.
|
||||||
quit: bool,
|
quit: bool,
|
||||||
|
|
||||||
/// The app resources directory, equivalent to zig-out/share when we build
|
|
||||||
/// from source. This is null if we can't detect it.
|
|
||||||
resources_dir: ?[]const u8 = null,
|
|
||||||
|
|
||||||
/// Font discovery mechanism. This is only safe to use from the main thread.
|
/// Font discovery mechanism. This is only safe to use from the main thread.
|
||||||
/// This is lazily initialized on the first call to fontDiscover so do
|
/// This is lazily initialized on the first call to fontDiscover so do
|
||||||
/// not access this directly.
|
/// not access this directly.
|
||||||
@ -59,17 +55,11 @@ pub fn create(
|
|||||||
var app = try alloc.create(App);
|
var app = try alloc.create(App);
|
||||||
errdefer alloc.destroy(app);
|
errdefer alloc.destroy(app);
|
||||||
|
|
||||||
// Find our resources directory once for the app so every launch
|
|
||||||
// hereafter can use this cached value.
|
|
||||||
const resources_dir = try internal_os.resourcesDir(alloc);
|
|
||||||
errdefer if (resources_dir) |dir| alloc.free(dir);
|
|
||||||
|
|
||||||
app.* = .{
|
app.* = .{
|
||||||
.alloc = alloc,
|
.alloc = alloc,
|
||||||
.surfaces = .{},
|
.surfaces = .{},
|
||||||
.mailbox = .{},
|
.mailbox = .{},
|
||||||
.quit = false,
|
.quit = false,
|
||||||
.resources_dir = resources_dir,
|
|
||||||
};
|
};
|
||||||
errdefer app.surfaces.deinit(alloc);
|
errdefer app.surfaces.deinit(alloc);
|
||||||
|
|
||||||
@ -81,7 +71,6 @@ pub fn destroy(self: *App) void {
|
|||||||
for (self.surfaces.items) |surface| surface.deinit();
|
for (self.surfaces.items) |surface| surface.deinit();
|
||||||
self.surfaces.deinit(self.alloc);
|
self.surfaces.deinit(self.alloc);
|
||||||
|
|
||||||
if (self.resources_dir) |dir| self.alloc.free(dir);
|
|
||||||
if (comptime font.Discover != void) {
|
if (comptime font.Discover != void) {
|
||||||
if (self.font_discover) |*v| v.deinit();
|
if (self.font_discover) |*v| v.deinit();
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,7 @@ const assert = std.debug.assert;
|
|||||||
const Allocator = std.mem.Allocator;
|
const Allocator = std.mem.Allocator;
|
||||||
const ArenaAllocator = std.heap.ArenaAllocator;
|
const ArenaAllocator = std.heap.ArenaAllocator;
|
||||||
const ziglyph = @import("ziglyph");
|
const ziglyph = @import("ziglyph");
|
||||||
|
const main = @import("main.zig");
|
||||||
const renderer = @import("renderer.zig");
|
const renderer = @import("renderer.zig");
|
||||||
const termio = @import("termio.zig");
|
const termio = @import("termio.zig");
|
||||||
const objc = @import("objc");
|
const objc = @import("objc");
|
||||||
@ -445,7 +446,7 @@ pub fn init(
|
|||||||
.padding = padding,
|
.padding = padding,
|
||||||
.full_config = config,
|
.full_config = config,
|
||||||
.config = try termio.Impl.DerivedConfig.init(alloc, config),
|
.config = try termio.Impl.DerivedConfig.init(alloc, config),
|
||||||
.resources_dir = app.resources_dir,
|
.resources_dir = main.state.resources_dir,
|
||||||
.renderer_state = &self.renderer_state,
|
.renderer_state = &self.renderer_state,
|
||||||
.renderer_wakeup = render_thread.wakeup,
|
.renderer_wakeup = render_thread.wakeup,
|
||||||
.renderer_mailbox = render_thread.mailbox,
|
.renderer_mailbox = render_thread.mailbox,
|
||||||
|
12
src/main.zig
12
src/main.zig
@ -175,6 +175,10 @@ pub const GlobalState = struct {
|
|||||||
action: ?cli.Action,
|
action: ?cli.Action,
|
||||||
logging: Logging,
|
logging: Logging,
|
||||||
|
|
||||||
|
/// The app resources directory, equivalent to zig-out/share when we build
|
||||||
|
/// from source. This is null if we can't detect it.
|
||||||
|
resources_dir: ?[]const u8,
|
||||||
|
|
||||||
/// Where logging should go
|
/// Where logging should go
|
||||||
pub const Logging = union(enum) {
|
pub const Logging = union(enum) {
|
||||||
disabled: void,
|
disabled: void,
|
||||||
@ -192,6 +196,7 @@ pub const GlobalState = struct {
|
|||||||
.tracy = undefined,
|
.tracy = undefined,
|
||||||
.action = null,
|
.action = null,
|
||||||
.logging = .{ .stderr = {} },
|
.logging = .{ .stderr = {} },
|
||||||
|
.resources_dir = null,
|
||||||
};
|
};
|
||||||
errdefer self.deinit();
|
errdefer self.deinit();
|
||||||
|
|
||||||
@ -271,11 +276,18 @@ pub const GlobalState = struct {
|
|||||||
|
|
||||||
// Initialize glslang for shader compilation
|
// Initialize glslang for shader compilation
|
||||||
try glslang.init();
|
try glslang.init();
|
||||||
|
|
||||||
|
// Find our resources directory once for the app so every launch
|
||||||
|
// hereafter can use this cached value.
|
||||||
|
self.resources_dir = try internal_os.resourcesDir(self.alloc);
|
||||||
|
errdefer if (self.resources_dir) |dir| self.alloc.free(dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Cleans up the global state. This doesn't _need_ to be called but
|
/// Cleans up the global state. This doesn't _need_ to be called but
|
||||||
/// doing so in dev modes will check for memory leaks.
|
/// doing so in dev modes will check for memory leaks.
|
||||||
pub fn deinit(self: *GlobalState) void {
|
pub fn deinit(self: *GlobalState) void {
|
||||||
|
if (self.resources_dir) |dir| self.alloc.free(dir);
|
||||||
|
|
||||||
if (self.gpa) |*value| {
|
if (self.gpa) |*value| {
|
||||||
// We want to ensure that we deinit the GPA because this is
|
// We want to ensure that we deinit the GPA because this is
|
||||||
// the point at which it will output if there were safety violations.
|
// the point at which it will output if there were safety violations.
|
||||||
|
Reference in New Issue
Block a user