mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-04-12 10:48:39 +03:00

Closes #6702 This removes our mach-glfw dependency and replaces it with an in-tree pkg/glfw that includes both the source for compiling glfw as well as the Zig bindings. This matches the pattern from our other packages. This is based on the upstream mach-glfw work and therefore includes the original license and copyright information. The reasoning is stated in the issue but to summarize for the commit: - mach-glfw is no longer maintained, so we have to take ownership - mach-glfw depended on some large blobs of header files to enable cross-compilation but this isn't something we actually care about, so we can (and do) drop the blobs - mach-glfw blobs were hosted on mach hosts. given mach-glfw is unmaintained, we can't rely on this hosting - mach-glfw relied on a "glfw" package which was owned by another person to be Zig 0.14 compatible, but we no longer need to rely on this - mach-glfw builds were outdated based on latest Zig practices
72 lines
2.5 KiB
Zig
72 lines
2.5 KiB
Zig
const std = @import("std");
|
|
|
|
const c = @import("c.zig").c;
|
|
|
|
const internal_debug = @import("internal_debug.zig");
|
|
|
|
/// Sets the clipboard to the specified string.
|
|
///
|
|
/// This function sets the system clipboard to the specified, UTF-8 encoded string.
|
|
///
|
|
/// @param[in] string A UTF-8 encoded string.
|
|
///
|
|
/// Possible errors include glfw.ErrorCode.PlatformError.
|
|
///
|
|
/// @pointer_lifetime The specified string is copied before this function returns.
|
|
///
|
|
/// @thread_safety This function must only be called from the main thread.
|
|
///
|
|
/// see also: clipboard, glfwGetClipboardString
|
|
pub inline fn setClipboardString(value: [*:0]const u8) void {
|
|
internal_debug.assertInitialized();
|
|
c.glfwSetClipboardString(null, value);
|
|
}
|
|
|
|
/// Returns the contents of the clipboard as a string.
|
|
///
|
|
/// This function returns the contents of the system clipboard, if it contains or is convertible to
|
|
/// a UTF-8 encoded string. If the clipboard is empty or if its contents cannot be converted,
|
|
/// glfw.ErrorCode.FormatUnavailable is returned.
|
|
///
|
|
/// @return The contents of the clipboard as a UTF-8 encoded string.
|
|
///
|
|
/// Possible errors include glfw.ErrorCode.FormatUnavailable and glfw.ErrorCode.PlatformError.
|
|
/// null is returned in the event of an error.
|
|
///
|
|
/// @pointer_lifetime The returned string is allocated and freed by GLFW. You should not free it
|
|
/// yourself. It is valid until the next call to glfw.getClipboardString or glfw.setClipboardString
|
|
/// or until the library is terminated.
|
|
///
|
|
/// @thread_safety This function must only be called from the main thread.
|
|
///
|
|
/// see also: clipboard, glfwSetClipboardString
|
|
pub inline fn getClipboardString() ?[:0]const u8 {
|
|
internal_debug.assertInitialized();
|
|
if (c.glfwGetClipboardString(null)) |c_str| return std.mem.span(@as([*:0]const u8, @ptrCast(c_str)));
|
|
return null;
|
|
}
|
|
|
|
test "setClipboardString" {
|
|
const glfw = @import("main.zig");
|
|
defer glfw.clearError(); // clear any error we generate
|
|
if (!glfw.init(.{})) {
|
|
std.log.err("failed to initialize GLFW: {?s}", .{glfw.getErrorString()});
|
|
std.process.exit(1);
|
|
}
|
|
defer glfw.terminate();
|
|
|
|
glfw.setClipboardString("hello mach");
|
|
}
|
|
|
|
test "getClipboardString" {
|
|
const glfw = @import("main.zig");
|
|
defer glfw.clearError(); // clear any error we generate
|
|
if (!glfw.init(.{})) {
|
|
std.log.err("failed to initialize GLFW: {?s}", .{glfw.getErrorString()});
|
|
std.process.exit(1);
|
|
}
|
|
defer glfw.terminate();
|
|
|
|
_ = glfw.getClipboardString();
|
|
}
|