gtk: fix ui/blueprint builder

This commit is contained in:
Jeffrey C. Ollie
2025-02-12 22:08:33 -06:00
parent 432beac315
commit e396c8538a
3 changed files with 18 additions and 7 deletions

View File

@ -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();
}

View File

@ -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) {

View File

@ -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);