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)}); }; }