diff --git a/build.zig.zon b/build.zig.zon index a5abdc586..9a4772c53 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -41,6 +41,10 @@ .url = "git+https://github.com/natecraddock/zf/?ref=main#ed99ca18b02dda052e20ba467e90b623c04690dd", .hash = "1220edc3b8d8bedbb50555947987e5e8e2f93871ca3c8e8d4cc8f1377c15b5dd35e8", }, + .gobject = .{ + .url = "https://github.com/ianprime0509/zig-gobject/releases/download/v0.2.2/bindings-gnome47.tar.zst", + .hash = "12208d70ee791d7ef7e16e1c3c9c1127b57f1ed066a24f87d57fc9f730c5dc394b9d", + }, // C libs .cimgui = .{ .path = "./pkg/cimgui" }, diff --git a/nix/devShell.nix b/nix/devShell.nix index c52afb6c0..9779dc4c6 100644 --- a/nix/devShell.nix +++ b/nix/devShell.nix @@ -30,6 +30,7 @@ glib, glslang, gtk4, + gobject-introspection, libadwaita, adwaita-icon-theme, hicolor-icon-theme, @@ -83,6 +84,7 @@ libadwaita gtk4 glib + gobject-introspection wayland ]; in @@ -157,6 +159,7 @@ in libadwaita gtk4 glib + gobject-introspection wayland wayland-scanner wayland-protocols diff --git a/nix/package.nix b/nix/package.nix index ceb6a7688..55d00b76c 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -12,6 +12,7 @@ libGL, glib, gtk4, + gobject-introspection, libadwaita, wrapGAppsHook4, gsettings-desktop-schemas, @@ -124,6 +125,7 @@ in pandoc pkg-config zig_hook + gobject-introspection wrapGAppsHook4 ] ++ lib.optionals enableWayland [ diff --git a/nix/zigCacheHash.nix b/nix/zigCacheHash.nix index 975605049..78e2d509d 100644 --- a/nix/zigCacheHash.nix +++ b/nix/zigCacheHash.nix @@ -1,3 +1,3 @@ # This file is auto-generated! check build-support/check-zig-cache-hash.sh for # more details. -"sha256-I7uuv0MkaW3gWAw6NHci+II42OfM7NdtKh2Npw2pTis=" +"sha256-+Ag900R3lDV7iEeRFGe2HWJDtquW3I9GFvHGle+U3k0=" diff --git a/src/build/SharedDeps.zig b/src/build/SharedDeps.zig index 64068658d..34666cf8a 100644 --- a/src/build/SharedDeps.zig +++ b/src/build/SharedDeps.zig @@ -430,9 +430,32 @@ pub fn add( }, .gtk => { + const gobject = b.dependency("gobject", .{ + .target = target, + .optimize = optimize, + }); + const gobject_imports = .{ + .{ "gobject", "gobject2" }, + .{ "glib", "glib2" }, + .{ "gtk", "gtk4" }, + .{ "gdk", "gdk4" }, + }; + inline for (gobject_imports) |import| { + const name, const module = import; + step.root_module.addImport(name, gobject.module(module)); + } + step.linkSystemLibrary2("gtk4", dynamic_link_opts); - if (self.config.adwaita) step.linkSystemLibrary2("libadwaita-1", dynamic_link_opts); - if (self.config.x11) step.linkSystemLibrary2("X11", dynamic_link_opts); + + if (self.config.adwaita) { + step.linkSystemLibrary2("libadwaita-1", dynamic_link_opts); + step.root_module.addImport("adw", gobject.module("adw1")); + } + + if (self.config.x11) { + step.linkSystemLibrary2("X11", dynamic_link_opts); + step.root_module.addImport("gdk_x11", gobject.module("gdkx114")); + } if (self.config.wayland) { const scanner = Scanner.create(b.dependency("zig_wayland", .{}), .{ @@ -460,6 +483,7 @@ pub fn add( scanner.generate("org_kde_kwin_server_decoration_manager", 1); step.root_module.addImport("wayland", wayland); + step.root_module.addImport("gdk_wayland", gobject.module("gdkwayland4")); step.linkSystemLibrary2("wayland-client", dynamic_link_opts); }