From a30fad7c59a8a144afc6d0c73aa383846c5fad55 Mon Sep 17 00:00:00 2001 From: Tristan Partin Date: Thu, 12 Sep 2024 20:29:50 +0100 Subject: [PATCH 1/2] apprt/gtk: use AdwHeaderBar if available Signed-off-by: Tristan Partin --- src/apprt/gtk/Window.zig | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/apprt/gtk/Window.zig b/src/apprt/gtk/Window.zig index c3df9b33d..f1e0752e6 100644 --- a/src/apprt/gtk/Window.zig +++ b/src/apprt/gtk/Window.zig @@ -23,6 +23,8 @@ const c = @import("c.zig").c; const adwaita = @import("adwaita.zig"); const Notebook = @import("./notebook.zig").Notebook; +const HeaderBar = if (adwaita.versionAtLeast(0, 0, 0)) c.AdwHeaderBar else c.GtkHeaderBar; + const log = std.log.scoped(.gtk); app: *App, @@ -32,7 +34,7 @@ window: *c.GtkWindow, /// The header bar for the window. This is possibly null since it can be /// disabled using gtk-titlebar. -header: ?*c.GtkHeaderBar, +header: ?*HeaderBar, /// The notebook (tab grouping) for this window. /// can be either c.GtkNotebook or c.AdwTabView. @@ -101,19 +103,29 @@ pub fn init(self: *Window, app: *App) !void { // are decorated or not because we can have a keybind to toggle the // decorations. if (app.config.@"gtk-titlebar") { - const header: *c.GtkHeaderBar = @ptrCast(c.gtk_header_bar_new()); + const header: *HeaderBar = if (self.isAdwWindow()) + @ptrCast(c.adw_header_bar_new()) + else + @ptrCast(c.gtk_header_bar_new()); + { const btn = c.gtk_menu_button_new(); c.gtk_widget_set_tooltip_text(btn, "Main Menu"); c.gtk_menu_button_set_icon_name(@ptrCast(btn), "open-menu-symbolic"); c.gtk_menu_button_set_menu_model(@ptrCast(btn), @ptrCast(@alignCast(app.menu))); - c.gtk_header_bar_pack_end(@ptrCast(header), btn); + if (self.isAdwWindow()) + c.adw_header_bar_pack_end(@ptrCast(header), btn) + else + c.gtk_header_bar_pack_end(@ptrCast(header), btn); } { const btn = c.gtk_button_new_from_icon_name("tab-new-symbolic"); c.gtk_widget_set_tooltip_text(btn, "New Tab"); - c.gtk_header_bar_pack_end(@ptrCast(header), btn); _ = c.g_signal_connect_data(btn, "clicked", c.G_CALLBACK(>kTabNewClick), self, null, c.G_CONNECT_DEFAULT); + if (self.isAdwWindow()) + c.adw_header_bar_pack_end(@ptrCast(header), btn) + else + c.gtk_header_bar_pack_end(@ptrCast(header), btn); } self.header = header; From 3a60fd65507dcba8a1df7a9cdfc4285aef356451 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Thu, 12 Sep 2024 15:53:29 -0700 Subject: [PATCH 2/2] apprt/gtk: use GtkWidget so there is a common ancestor --- src/apprt/gtk/Window.zig | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/apprt/gtk/Window.zig b/src/apprt/gtk/Window.zig index f1e0752e6..b4aad87fb 100644 --- a/src/apprt/gtk/Window.zig +++ b/src/apprt/gtk/Window.zig @@ -23,8 +23,6 @@ const c = @import("c.zig").c; const adwaita = @import("adwaita.zig"); const Notebook = @import("./notebook.zig").Notebook; -const HeaderBar = if (adwaita.versionAtLeast(0, 0, 0)) c.AdwHeaderBar else c.GtkHeaderBar; - const log = std.log.scoped(.gtk); app: *App, @@ -33,8 +31,9 @@ app: *App, window: *c.GtkWindow, /// The header bar for the window. This is possibly null since it can be -/// disabled using gtk-titlebar. -header: ?*HeaderBar, +/// disabled using gtk-titlebar. This is either an AdwHeaderBar or +/// GtkHeaderBar depending on if adw is enabled and linked. +header: ?*c.GtkWidget, /// The notebook (tab grouping) for this window. /// can be either c.GtkNotebook or c.AdwTabView. @@ -103,7 +102,7 @@ pub fn init(self: *Window, app: *App) !void { // are decorated or not because we can have a keybind to toggle the // decorations. if (app.config.@"gtk-titlebar") { - const header: *HeaderBar = if (self.isAdwWindow()) + const header: *c.GtkWidget = if (self.isAdwWindow()) @ptrCast(c.adw_header_bar_new()) else @ptrCast(c.gtk_header_bar_new());