From 4cacea3813d98246e902cb43b83fd8ba62f13666 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Thu, 12 Sep 2024 09:32:49 -0700 Subject: [PATCH] apprt/gtk: inline adwaita checks so comptime disables conditional paths This fixes building without libadwaita or building with an older version of libadwaita. This also updates the CI to test this. --- .github/workflows/test.yml | 3 +++ src/apprt/gtk/App.zig | 6 ++---- src/apprt/gtk/Window.zig | 9 +++++++-- src/apprt/gtk/adwaita.zig | 5 ++++- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 05eb82bd5..1fca05b8f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -323,6 +323,9 @@ jobs: - name: Test GTK Build run: nix develop -c zig build -Dapp-runtime=gtk -Dgtk-libadwaita=true -Demit-docs + - name: Test GTK Build (No Libadwaita) + run: nix develop -c zig build -Dapp-runtime=gtk -Dgtk-libadwaita=false -Demit-docs + - name: Test GLFW Build run: nix develop -c zig build -Dapp-runtime=glfw diff --git a/src/apprt/gtk/App.zig b/src/apprt/gtk/App.zig index a1843b9ac..aa0341912 100644 --- a/src/apprt/gtk/App.zig +++ b/src/apprt/gtk/App.zig @@ -108,9 +108,7 @@ pub fn init(core_app: *CoreApp, opts: Options) !App { } // If we're using libadwaita, log the version - if ((comptime adwaita.versionAtLeast(0, 0, 0)) and - adwaita.enabled(&config)) - { + if (adwaita.enabled(&config)) { log.info("libadwaita version build={s} runtime={}.{}.{}", .{ c.ADW_VERSION_S, c.adw_get_major_version(), @@ -161,7 +159,7 @@ pub fn init(core_app: *CoreApp, opts: Options) !App { }); // If not libadwaita, create a standard GTK application. - if ((comptime adwaita.versionAtLeast(0, 0, 0)) and + if ((comptime !adwaita.versionAtLeast(0, 0, 0)) or !adwaita.enabled(&config)) { break :app @as(?*c.GtkApplication, @ptrCast(c.gtk_application_new( diff --git a/src/apprt/gtk/Window.zig b/src/apprt/gtk/Window.zig index 25532d7ae..a02eedccc 100644 --- a/src/apprt/gtk/Window.zig +++ b/src/apprt/gtk/Window.zig @@ -244,14 +244,19 @@ pub fn deinit(self: *Window) void { } /// Returns true if this window should use an Adwaita window. -fn isAdwWindow(self: *Window) bool { +/// +/// This must be `inline` so that the comptime check noops conditional +/// paths that are not enabled. +inline fn isAdwWindow(self: *Window) bool { return (comptime adwaita.versionAtLeast(1, 4, 0)) and adwaita.enabled(&self.app.config) and self.app.config.@"gtk-titlebar" and adwaita.versionAtLeast(1, 4, 0); } -fn hasAdwToolbar(self: *Window) bool { +/// This must be `inline` so that the comptime check noops conditional +/// paths that are not enabled. +inline fn hasAdwToolbar(self: *Window) bool { return ((comptime adwaita.versionAtLeast(1, 4, 0)) and adwaita.enabled(&self.app.config) and adwaita.versionAtLeast(1, 4, 0) and diff --git a/src/apprt/gtk/adwaita.zig b/src/apprt/gtk/adwaita.zig index f2d6bcfdd..ac9c59674 100644 --- a/src/apprt/gtk/adwaita.zig +++ b/src/apprt/gtk/adwaita.zig @@ -8,7 +8,10 @@ const Config = @import("../../config.zig").Config; /// /// For a comptime version of this function, use `versionAtLeast` in /// a comptime context with all the version numbers set to 0. -pub fn enabled(config: *const Config) bool { +/// +/// This must be `inline` so that the comptime check noops conditional +/// paths that are not enabled. +pub inline fn enabled(config: *const Config) bool { return build_options.libadwaita and config.@"gtk-adwaita"; }