don't change cursor to ibeam on macOS prior to Ventura

glfw crashes with our tab group usage (see comment)
This commit is contained in:
Mitchell Hashimoto
2022-11-20 09:03:28 -08:00
parent 1bce3d8e72
commit 688ec71a74
3 changed files with 29 additions and 1 deletions

View File

@ -29,6 +29,7 @@ const Config = @import("config.zig").Config;
const input = @import("input.zig");
const DevMode = @import("DevMode.zig");
const App = @import("App.zig");
const internal_os = @import("os/main.zig");
// Get native API access on certain platforms so we can do more customization.
const glfwNative = glfw.Native(.{
@ -333,7 +334,12 @@ pub fn create(alloc: Allocator, app: *App, config: *const Config) !*Window {
// Create the cursor
const cursor = try glfw.Cursor.createStandard(.ibeam);
errdefer cursor.destroy();
if ((comptime !builtin.target.isDarwin()) or internal_os.macosVersionAtLeast(13, 0, 0)) {
// We only set our cursor if we're NOT on Mac, or if we are then the
// macOS version is >= 13 (Ventura). On prior versions, glfw crashes
// since we use a tab group.
try window.setCursor(cursor);
}
// The mutex used to protect our renderer state.
var mutex = try alloc.create(std.Thread.Mutex);

21
src/os/macos_version.zig Normal file
View File

@ -0,0 +1,21 @@
const std = @import("std");
const builtin = @import("builtin");
const assert = std.debug.assert;
const objc = @import("objc");
/// Verifies that the running macOS system version is at least the given version.
pub fn macosVersionAtLeast(major: i64, minor: i64, patch: i64) bool {
assert(builtin.target.isDarwin());
const NSProcessInfo = objc.Class.getClass("NSProcessInfo").?;
const info = NSProcessInfo.msgSend(objc.Object, objc.sel("processInfo"), .{});
return info.msgSend(bool, objc.sel("isOperatingSystemAtLeastVersion:"), .{
NSOperatingSystemVersion{ .major = major, .minor = minor, .patch = patch },
});
}
pub const NSOperatingSystemVersion = extern struct {
major: i64,
minor: i64,
patch: i64,
};

View File

@ -3,3 +3,4 @@
pub usingnamespace @import("file.zig");
pub usingnamespace @import("locale.zig");
pub usingnamespace @import("macos_version.zig");