diff --git a/src/apprt/gtk/Builder.zig b/src/apprt/gtk/Builder.zig index bd2e6beaf..ffacd3adf 100644 --- a/src/apprt/gtk/Builder.zig +++ b/src/apprt/gtk/Builder.zig @@ -7,6 +7,7 @@ const gtk = @import("gtk"); const gobject = @import("gobject"); resource_name: [:0]const u8, +builder: ?*gtk.Builder, pub fn init(comptime name: []const u8, comptime kind: enum { blp, ui }) Builder { comptime { @@ -47,6 +48,7 @@ pub fn init(comptime name: []const u8, comptime kind: enum { blp, ui }) Builder return .{ .resource_name = "/com/mitchellh/ghostty/ui/" ++ name ++ ".ui", + .builder = null, }; } @@ -54,8 +56,17 @@ pub fn setWidgetClassTemplate(self: *const Builder, class: *gtk.WidgetClass) voi class.setTemplateFromResource(self.resource_name); } -pub fn getObject(self: *const Builder, name: [:0]const u8) ?gobject.Object { - const builder = gtk.Builder.newFromResource(self.resource_name); - defer builder.unref(); +pub fn getObject(self: *Builder, name: [:0]const u8) ?*gobject.Object { + const builder = builder: { + if (self.builder) |builder| break :builder builder; + const builder = gtk.Builder.newFromResource(self.resource_name); + self.builder = builder; + break :builder builder; + }; + return builder.getObject(name); } + +pub fn deinit(self: *const Builder) void { + if (self.builder) |builder| builder.unref(); +} diff --git a/src/apprt/gtk/builder_check.zig b/src/apprt/gtk/builder_check.zig index 153dfb0eb..f042c89a9 100644 --- a/src/apprt/gtk/builder_check.zig +++ b/src/apprt/gtk/builder_check.zig @@ -17,7 +17,7 @@ pub fn main() !void { }; defer alloc.free(filename); - const data = try std.fs.cwd().readFileAlloc(alloc, filename, std.math.maxInt(u16)); + const data = try std.fs.cwd().readFileAllocOptions(alloc, filename, std.math.maxInt(u16), null, 1, 0); defer alloc.free(data); if ((comptime !build_options.adwaita) and std.mem.indexOf(u8, data, "lib=\"Adw\"") != null) { diff --git a/src/build/SharedDeps.zig b/src/build/SharedDeps.zig index f00b79f01..0a1d6f904 100644 --- a/src/build/SharedDeps.zig +++ b/src/build/SharedDeps.zig @@ -436,6 +436,7 @@ pub fn add( }); const gobject_imports = .{ .{ "gobject", "gobject2" }, + .{ "gio", "gio2" }, .{ "glib", "glib2" }, .{ "gtk", "gtk4" }, .{ "gdk", "gdk4" }, @@ -520,9 +521,8 @@ pub fn add( .target = b.host, }); gtk_builder_check.root_module.addOptions("build_options", self.options); - gtk_builder_check.linkSystemLibrary2("gtk4", dynamic_link_opts); - if (self.config.adwaita) gtk_builder_check.linkSystemLibrary2("libadwaita-1", dynamic_link_opts); - gtk_builder_check.linkLibC(); + gtk_builder_check.root_module.addImport("gtk", gobject.module("gtk4")); + if (self.config.adwaita) gtk_builder_check.root_module.addImport("adw", gobject.module("adw1")); for (gresource.dependencies) |pathname| { const extension = std.fs.path.extension(pathname);