From df0af7afbc8ab2df25ff2b76fedd4bfaf8ee7e3b Mon Sep 17 00:00:00 2001 From: codemob <69110900+codemob-dev@users.noreply.github.com> Date: Sun, 20 Jul 2025 17:29:50 -0400 Subject: [PATCH] Preserve unknown entries in settings (#1696) Fixes #1675 --- src/gui/gui.zig | 13 ++++++++++++- src/settings.zig | 14 ++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/gui/gui.zig b/src/gui/gui.zig index 5784fe15..038e38d6 100644 --- a/src/gui/gui.zig +++ b/src/gui/gui.zig @@ -217,7 +217,18 @@ pub fn save() void { // MARK: save() guiZon.put(window.id, windowZon); } - main.files.cubyzDir().writeZon("gui_layout.zig.zon", guiZon) catch |err| { + // Merge with the old settings file to preserve unknown settings. + const oldZon: ZonElement = main.files.cubyzDir().readToZon(main.stackAllocator, "gui_layout.zig.zon") catch |err| blk: { + if(err != error.FileNotFound) { + std.log.err("Could not read gui_layout.zig.zon: {s}", .{@errorName(err)}); + } + break :blk .null; + }; + defer oldZon.deinit(main.stackAllocator); + + oldZon.join(guiZon); + + main.files.cubyzDir().writeZon("gui_layout.zig.zon", oldZon) catch |err| { std.log.err("Could not write gui_layout.zig.zon: {s}", .{@errorName(err)}); }; } diff --git a/src/settings.zig b/src/settings.zig index 85a157b7..e4b66810 100644 --- a/src/settings.zig +++ b/src/settings.zig @@ -153,8 +153,18 @@ pub fn save() void { } zonObject.put("keyboard", keyboard); - // Write to file: - main.files.cubyzDir().writeZon(settingsFile, zonObject) catch |err| { + // Merge with the old settings file to preserve unknown settings. + const oldZonObject: ZonElement = main.files.cubyzDir().readToZon(main.stackAllocator, settingsFile) catch |err| blk: { + if(err != error.FileNotFound) { + std.log.err("Could not read settings file: {s}", .{@errorName(err)}); + } + break :blk .null; + }; + defer oldZonObject.deinit(main.stackAllocator); + + oldZonObject.join(zonObject); + + main.files.cubyzDir().writeZon(settingsFile, oldZonObject) catch |err| { std.log.err("Couldn't write settings to file: {s}", .{@errorName(err)}); }; }