diff --git a/build.zig b/build.zig index 0165de802..bc829d59e 100644 --- a/build.zig +++ b/build.zig @@ -1042,6 +1042,9 @@ fn addDeps( step.linkLibC(); step.addIncludePath(b.path("src/stb")); step.addCSourceFiles(.{ .files = &.{"src/stb/stb.c"} }); + if (step.rootModuleTarget().os.tag == .linux) { + step.addIncludePath(b.path("src/apprt/gtk")); + } // C++ files step.linkLibCpp(); diff --git a/src/apprt/gtk/App.zig b/src/apprt/gtk/App.zig index eb7ce82c4..8c4e41111 100644 --- a/src/apprt/gtk/App.zig +++ b/src/apprt/gtk/App.zig @@ -28,7 +28,7 @@ const Surface = @import("Surface.zig"); const Window = @import("Window.zig"); const ConfigErrorsWindow = @import("ConfigErrorsWindow.zig"); const ClipboardConfirmationWindow = @import("ClipboardConfirmationWindow.zig"); -const c = @import("c.zig"); +const c = @import("c.zig").c; const inspector = @import("inspector.zig"); const key = @import("key.zig"); const x11 = @import("x11.zig"); diff --git a/src/apprt/gtk/ClipboardConfirmationWindow.zig b/src/apprt/gtk/ClipboardConfirmationWindow.zig index e4ad080e3..bcefb9d8a 100644 --- a/src/apprt/gtk/ClipboardConfirmationWindow.zig +++ b/src/apprt/gtk/ClipboardConfirmationWindow.zig @@ -8,7 +8,7 @@ const apprt = @import("../../apprt.zig"); const CoreSurface = @import("../../Surface.zig"); const App = @import("App.zig"); const View = @import("View.zig"); -const c = @import("c.zig"); +const c = @import("c.zig").c; const log = std.log.scoped(.gtk); diff --git a/src/apprt/gtk/ConfigErrorsWindow.zig b/src/apprt/gtk/ConfigErrorsWindow.zig index 563a3e51b..44fa83363 100644 --- a/src/apprt/gtk/ConfigErrorsWindow.zig +++ b/src/apprt/gtk/ConfigErrorsWindow.zig @@ -8,7 +8,7 @@ const Config = configpkg.Config; const App = @import("App.zig"); const View = @import("View.zig"); -const c = @import("c.zig"); +const c = @import("c.zig").c; const log = std.log.scoped(.gtk); diff --git a/src/apprt/gtk/ImguiWidget.zig b/src/apprt/gtk/ImguiWidget.zig index 7280a2f13..de6bf606d 100644 --- a/src/apprt/gtk/ImguiWidget.zig +++ b/src/apprt/gtk/ImguiWidget.zig @@ -4,7 +4,7 @@ const std = @import("std"); const assert = std.debug.assert; const cimgui = @import("cimgui"); -const c = @import("c.zig"); +const c = @import("c.zig").c; const key = @import("key.zig"); const gl = @import("opengl"); const input = @import("../../input.zig"); diff --git a/src/apprt/gtk/ResizeOverlay.zig b/src/apprt/gtk/ResizeOverlay.zig index 518d4f609..73252ee62 100644 --- a/src/apprt/gtk/ResizeOverlay.zig +++ b/src/apprt/gtk/ResizeOverlay.zig @@ -1,7 +1,7 @@ const ResizeOverlay = @This(); const std = @import("std"); -const c = @import("c.zig"); +const c = @import("c.zig").c; const configpkg = @import("../../config.zig"); const Surface = @import("Surface.zig"); diff --git a/src/apprt/gtk/Split.zig b/src/apprt/gtk/Split.zig index 622db61fe..105646c7c 100644 --- a/src/apprt/gtk/Split.zig +++ b/src/apprt/gtk/Split.zig @@ -12,7 +12,7 @@ const CoreSurface = @import("../../Surface.zig"); const Surface = @import("Surface.zig"); const Tab = @import("Tab.zig"); -const c = @import("c.zig"); +const c = @import("c.zig").c; const log = std.log.scoped(.gtk); diff --git a/src/apprt/gtk/Surface.zig b/src/apprt/gtk/Surface.zig index 01d2a1d6e..7ae690ce5 100644 --- a/src/apprt/gtk/Surface.zig +++ b/src/apprt/gtk/Surface.zig @@ -21,7 +21,7 @@ const ClipboardConfirmationWindow = @import("ClipboardConfirmationWindow.zig"); const ResizeOverlay = @import("ResizeOverlay.zig"); const inspector = @import("inspector.zig"); const gtk_key = @import("key.zig"); -const c = @import("c.zig"); +const c = @import("c.zig").c; const x11 = @import("x11.zig"); const log = std.log.scoped(.gtk_surface); diff --git a/src/apprt/gtk/Tab.zig b/src/apprt/gtk/Tab.zig index 32b0c7888..42a18711b 100644 --- a/src/apprt/gtk/Tab.zig +++ b/src/apprt/gtk/Tab.zig @@ -12,7 +12,7 @@ const CoreSurface = @import("../../Surface.zig"); const Surface = @import("Surface.zig"); const Window = @import("Window.zig"); -const c = @import("c.zig"); +const c = @import("c.zig").c; const log = std.log.scoped(.gtk); diff --git a/src/apprt/gtk/View.zig b/src/apprt/gtk/View.zig index 2287b4737..ecab1c95e 100644 --- a/src/apprt/gtk/View.zig +++ b/src/apprt/gtk/View.zig @@ -5,7 +5,7 @@ const View = @This(); const std = @import("std"); -const c = @import("c.zig"); +const c = @import("c.zig").c; const log = std.log.scoped(.gtk); diff --git a/src/apprt/gtk/Window.zig b/src/apprt/gtk/Window.zig index c388e0092..1615b986f 100644 --- a/src/apprt/gtk/Window.zig +++ b/src/apprt/gtk/Window.zig @@ -19,7 +19,7 @@ const App = @import("App.zig"); const Color = configpkg.Config.Color; const Surface = @import("Surface.zig"); const Tab = @import("Tab.zig"); -const c = @import("c.zig"); +const c = @import("c.zig").c; const log = std.log.scoped(.gtk); diff --git a/src/apprt/gtk/c.zig b/src/apprt/gtk/c.zig index 5ac8d0fe8..e8788afee 100644 --- a/src/apprt/gtk/c.zig +++ b/src/apprt/gtk/c.zig @@ -1,21 +1,19 @@ -const c = @cImport({ +/// Imported C API directly from header files +pub const c = @cImport({ @cInclude("gtk/gtk.h"); - if (@import("build_options").libadwaita) @cInclude("libadwaita-1/adwaita.h"); + if (@import("build_options").libadwaita) { + @cInclude("libadwaita-1/adwaita.h"); + } - // Add in X11-specific GDK backend which we use for specific things (e.g. - // X11 window class). + // Add in X11-specific GDK backend which we use for specific things + // (e.g. X11 window class). @cInclude("gdk/x11/gdkx.h"); // Xkb for X11 state handling @cInclude("X11/XKBlib.h"); // generated header files @cInclude("ghostty_resources.h"); + + // compatibility + @cInclude("ghostty_gtk_compat.h"); }); - -pub usingnamespace c; - -/// Compatibility with gobject < 2.74 -pub usingnamespace if (@hasDecl(c, "G_CONNECT_DEFAULT")) struct {} else struct { - pub const G_CONNECT_DEFAULT = 0; - pub const G_APPLICATION_DEFAULT_FLAGS = c.G_APPLICATION_FLAGS_NONE; -}; diff --git a/src/apprt/gtk/cgroup.zig b/src/apprt/gtk/cgroup.zig index 7eb72b9c6..039db8a04 100644 --- a/src/apprt/gtk/cgroup.zig +++ b/src/apprt/gtk/cgroup.zig @@ -3,7 +3,7 @@ const std = @import("std"); const assert = std.debug.assert; const Allocator = std.mem.Allocator; -const c = @import("c.zig"); +const c = @import("c.zig").c; const App = @import("App.zig"); const internal_os = @import("../../os/main.zig"); diff --git a/src/apprt/gtk/ghostty_gtk_compat.h b/src/apprt/gtk/ghostty_gtk_compat.h new file mode 100644 index 000000000..c0dc819c2 --- /dev/null +++ b/src/apprt/gtk/ghostty_gtk_compat.h @@ -0,0 +1,14 @@ +// This file is used to provide compatibility if necessary with +// older versions of GTK and GLib. + +#include + +// Compatibility with gobject < 2.74 +#ifndef G_CONNECT_DEFAULT +#define G_CONNECT_DEFAULT 0 +#endif + +// Compatibility with gobject < 2.74 +#ifndef G_APPLICATION_DEFAULT_FLAGS +#define G_APPLICATION_DEFAULT_FLAGS G_APPLICATION_FLAGS_NONE +#endif diff --git a/src/apprt/gtk/inspector.zig b/src/apprt/gtk/inspector.zig index ae7856df7..f5bdf8a24 100644 --- a/src/apprt/gtk/inspector.zig +++ b/src/apprt/gtk/inspector.zig @@ -6,7 +6,7 @@ const App = @import("App.zig"); const Surface = @import("Surface.zig"); const TerminalWindow = @import("Window.zig"); const ImguiWidget = @import("ImguiWidget.zig"); -const c = @import("c.zig"); +const c = @import("c.zig").c; const CoreInspector = @import("../../inspector/main.zig").Inspector; const log = std.log.scoped(.inspector); diff --git a/src/apprt/gtk/key.zig b/src/apprt/gtk/key.zig index 405c73665..887e10d7a 100644 --- a/src/apprt/gtk/key.zig +++ b/src/apprt/gtk/key.zig @@ -1,6 +1,6 @@ const std = @import("std"); const input = @import("../../input.zig"); -const c = @import("c.zig"); +const c = @import("c.zig").c; /// Returns a GTK accelerator string from a trigger. pub fn accelFromTrigger(buf: []u8, trigger: input.Binding.Trigger) !?[:0]const u8 { diff --git a/src/apprt/gtk/x11.zig b/src/apprt/gtk/x11.zig index 56ae1b36d..0b116c59f 100644 --- a/src/apprt/gtk/x11.zig +++ b/src/apprt/gtk/x11.zig @@ -1,6 +1,6 @@ /// Utility functions for X11 handling. const std = @import("std"); -const c = @import("c.zig"); +const c = @import("c.zig").c; const input = @import("../../input.zig"); const log = std.log.scoped(.gtk_x11);