From f3662354e586427994e8e33618d62c61d6fa583f Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Mon, 18 Sep 2023 15:16:35 -0700 Subject: [PATCH] apprt/gtk: about window --- build.zig | 6 +++++- src/apprt/gtk/App.zig | 8 +++++++- src/apprt/gtk/Window.zig | 25 +++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/build.zig b/build.zig index 7d667db0d..f002f6fd2 100644 --- a/build.zig +++ b/build.zig @@ -206,7 +206,11 @@ pub fn build(b: *std.Build) !void { const exe_options = b.addOptions(); exe_options.addOption(std.SemanticVersion, "app_version", version); - exe_options.addOption([]const u8, "app_version_string", b.fmt("{}", .{version})); + exe_options.addOption([:0]const u8, "app_version_string", try std.fmt.allocPrintZ( + b.allocator, + "{}", + .{version}, + )); exe_options.addOption(bool, "tracy_enabled", tracy); exe_options.addOption(bool, "flatpak", flatpak); exe_options.addOption(apprt.Runtime, "app_runtime", app_runtime); diff --git a/src/apprt/gtk/App.zig b/src/apprt/gtk/App.zig index 9f30eaac7..73e8cdc29 100644 --- a/src/apprt/gtk/App.zig +++ b/src/apprt/gtk/App.zig @@ -448,7 +448,13 @@ fn initMenu(self: *App) void { defer c.g_object_unref(section); c.g_menu_append_section(menu, null, @ptrCast(@alignCast(section))); c.g_menu_append(section, "Close Window", "win.close"); - c.g_menu_append(section, "Quit Ghostty", "app.quit"); + } + + { + const section = c.g_menu_new(); + defer c.g_object_unref(section); + c.g_menu_append_section(menu, null, @ptrCast(@alignCast(section))); + c.g_menu_append(section, "About Ghostty", "win.about"); } // { diff --git a/src/apprt/gtk/Window.zig b/src/apprt/gtk/Window.zig index c1e0bf155..45d9dfb3a 100644 --- a/src/apprt/gtk/Window.zig +++ b/src/apprt/gtk/Window.zig @@ -3,6 +3,7 @@ const Window = @This(); const std = @import("std"); const builtin = @import("builtin"); +const build_config = @import("../../build_config.zig"); const Allocator = std.mem.Allocator; const assert = std.debug.assert; const configpkg = @import("../../config.zig"); @@ -162,6 +163,7 @@ pub fn init(self: *Window, app: *App) !void { /// here. The string name binds them. fn initActions(self: *Window) void { const actions = .{ + .{ "about", >kActionAbout }, .{ "close", >kActionClose }, .{ "new_window", >kActionNewWindow }, .{ "new_tab", >kActionNewTab }, @@ -486,6 +488,29 @@ fn getNotebookPageIndex(page: *c.GtkNotebookPage) c_int { return c.g_value_get_int(&value); } +fn gtkActionAbout( + _: *c.GSimpleAction, + _: *c.GVariant, + ud: ?*anyopaque, +) callconv(.C) void { + const self: *Window = @ptrCast(@alignCast(ud orelse return)); + + c.gtk_show_about_dialog( + self.window, + "program-name", + "Ghostty", + "logo-icon-name", + "com.mitchellh.ghostty", + "title", + "About Ghostty", + "version", + build_config.version_string.ptr, + "website", + "https://github.com/mitchellh/ghostty", + @as(?*anyopaque, null), + ); +} + fn gtkActionClose( _: *c.GSimpleAction, _: *c.GVariant,