From f0a064afdd2433ef2fec116bd4f3cf2221c89495 Mon Sep 17 00:00:00 2001 From: Haowei Wen Date: Sun, 29 Dec 2024 22:18:15 +0800 Subject: [PATCH] Fix sometimes version specific setting is lost --- .../hmcl/game/HMCLGameRepository.java | 6 ++- .../hmcl/ui/versions/VersionSettingsPage.java | 39 +++++++++---------- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameRepository.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameRepository.java index 26a148835..638546c1c 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameRepository.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameRepository.java @@ -358,8 +358,10 @@ public class HMCLGameRepository extends DefaultGameRepository { if (vs == null) return null; VersionIconType versionIcon = vs.getVersionIcon(); - PropertyUtils.copyProperties(profile.getGlobal(), vs); - vs.setUsesGlobal(false); + if (vs.isUsesGlobal()) { + PropertyUtils.copyProperties(profile.getGlobal(), vs); + vs.setUsesGlobal(false); + } vs.setVersionIcon(versionIcon); // versionIcon is preserved return vs; } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java index aab4a3c1a..f22390d62 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java @@ -92,7 +92,8 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag private final ImagePickerItem iconPickerItem; private final ChangeListener> javaListChangeListener; - private final InvalidationListener specificSettingsListener; + private final InvalidationListener usesGlobalListener; + private final ChangeListener specificSettingsListener; private final InvalidationListener javaListener = any -> initJavaSubtitle(); private boolean updatingJavaSetting = false; private boolean updatingSelectedJava = false; @@ -443,22 +444,8 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag rootPane.getChildren().add(componentList); - initialize(); - - specificSettingsListener = any -> enableSpecificSettings.set(!lastVersionSetting.isUsesGlobal()); - - addEventHandler(Navigator.NavigationEvent.NAVIGATED, this::onDecoratorPageNavigating); - - cboLauncherVisibility.getItems().setAll(LauncherVisibility.values()); - cboLauncherVisibility.setConverter(stringConverter(e -> i18n("settings.advanced.launcher_visibility." + e.name().toLowerCase(Locale.ROOT)))); - - cboProcessPriority.getItems().setAll(ProcessPriority.values()); - cboProcessPriority.setConverter(stringConverter(e -> i18n("settings.advanced.process_priority." + e.name().toLowerCase(Locale.ROOT)))); - } - - private void initialize() { - memoryStatus.set(OperatingSystem.getPhysicalMemoryStatus()); - enableSpecificSettings.addListener((a, b, newValue) -> { + usesGlobalListener = any -> enableSpecificSettings.set(!lastVersionSetting.isUsesGlobal()); + specificSettingsListener = (a, b, newValue) -> { if (versionId == null) return; // do not call versionSettings.setUsesGlobal(true/false) @@ -470,8 +457,17 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag profile.getRepository().globalizeVersionSetting(versionId); Platform.runLater(() -> loadVersion(profile, versionId)); - }); + }; + addEventHandler(Navigator.NavigationEvent.NAVIGATED, this::onDecoratorPageNavigating); + + cboLauncherVisibility.getItems().setAll(LauncherVisibility.values()); + cboLauncherVisibility.setConverter(stringConverter(e -> i18n("settings.advanced.launcher_visibility." + e.name().toLowerCase(Locale.ROOT)))); + + cboProcessPriority.getItems().setAll(ProcessPriority.values()); + cboProcessPriority.setConverter(stringConverter(e -> i18n("settings.advanced.process_priority." + e.name().toLowerCase(Locale.ROOT)))); + + memoryStatus.set(OperatingSystem.getPhysicalMemoryStatus()); componentList.disableProperty().bind(enableSpecificSettings.not()); } @@ -519,7 +515,7 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag FXUtils.unbindEnum(cboLauncherVisibility); FXUtils.unbindEnum(cboProcessPriority); - lastVersionSetting.usesGlobalProperty().removeListener(specificSettingsListener); + lastVersionSetting.usesGlobalProperty().removeListener(usesGlobalListener); lastVersionSetting.javaVersionTypeProperty().removeListener(javaListener); lastVersionSetting.javaDirProperty().removeListener(javaListener); lastVersionSetting.defaultJavaPathPropertyProperty().removeListener(javaListener); @@ -528,6 +524,8 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag gameDirItem.selectedDataProperty().unbindBidirectional(lastVersionSetting.gameDirTypeProperty()); gameDirSublist.subtitleProperty().unbind(); + enableSpecificSettings.removeListener(specificSettingsListener); + if (advancedVersionSettingPage != null) { advancedVersionSettingPage.unbindProperties(); advancedVersionSettingPage = null; @@ -554,7 +552,8 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag if (versionId != null) enableSpecificSettings.set(!versionSetting.isUsesGlobal()); - versionSetting.usesGlobalProperty().addListener(specificSettingsListener); + versionSetting.usesGlobalProperty().addListener(usesGlobalListener); + enableSpecificSettings.addListener(specificSettingsListener); javaItem.setToggleSelectedListener(newValue -> { if (javaItem.getSelectedData() == null || updatingSelectedJava)