From dbc5819bc4917519ffa5d4fe6a88609d02f4a3dd Mon Sep 17 00:00:00 2001 From: WerWolv Date: Sat, 9 Aug 2025 14:23:36 +0200 Subject: [PATCH] fix: Handling of unchanged shortcut keys --- lib/libimhex/source/api/content_registry.cpp | 5 +++-- plugins/builtin/source/content/settings_entries.cpp | 3 +++ plugins/builtin/source/content/views/view_settings.cpp | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/libimhex/source/api/content_registry.cpp b/lib/libimhex/source/api/content_registry.cpp index 2410f5731..8a79ad1e1 100644 --- a/lib/libimhex/source/api/content_registry.cpp +++ b/lib/libimhex/source/api/content_registry.cpp @@ -46,7 +46,7 @@ namespace hex { try { callback(getSetting(category, name, {})); } catch (const std::exception &e) { - log::error("Failed to load setting [{}/{}]: {}", category, name, e.what()); + log::error("Failed to load setting [{} / {}]: {}", category, name, e.what()); } } } @@ -216,12 +216,13 @@ namespace hex { entry->widget = std::move(widget); if (entry->widget != nullptr) { onChange(unlocalizedCategory, unlocalizedName, [widget = entry->widget.get(), unlocalizedCategory, unlocalizedName](const SettingsValue &) { + auto defaultValue = widget->store(); try { - auto defaultValue = widget->store(); widget->load(ContentRegistry::Settings::impl::getSetting(unlocalizedCategory, unlocalizedName, defaultValue)); widget->onChanged(); } catch (const std::exception &e) { log::error("Failed to load setting [{} / {}]: {}", unlocalizedCategory.get(), unlocalizedName.get(), e.what()); + ContentRegistry::Settings::impl::getSetting(unlocalizedCategory, unlocalizedName, defaultValue) = defaultValue; } }); diff --git a/plugins/builtin/source/content/settings_entries.cpp b/plugins/builtin/source/content/settings_entries.cpp index adc366b2c..3d598d078 100644 --- a/plugins/builtin/source/content/settings_entries.cpp +++ b/plugins/builtin/source/content/settings_entries.cpp @@ -336,6 +336,9 @@ namespace hex::plugin::builtin { void load(const nlohmann::json &data) override { std::set keys; + if (data.empty()) + return; + for (const auto &key : data.get>()) keys.insert(Key(scanCodeToKey(key))); diff --git a/plugins/builtin/source/content/views/view_settings.cpp b/plugins/builtin/source/content/views/view_settings.cpp index c0ed55c5f..d8928d4a0 100644 --- a/plugins/builtin/source/content/views/view_settings.cpp +++ b/plugins/builtin/source/content/views/view_settings.cpp @@ -32,11 +32,13 @@ namespace hex::plugin::builtin { for (const auto &[unlocalizedCategory, unlocalizedDescription, subCategories] : ContentRegistry::Settings::impl::getSettings()) { for (const auto &[unlocalizedSubCategory, entries] : subCategories) { for (const auto &[unlocalizedName, widget] : entries) { + auto defaultValue = widget->store(); try { - auto defaultValue = widget->store(); widget->load(ContentRegistry::Settings::impl::getSetting(unlocalizedCategory, unlocalizedName, defaultValue)); } catch (const std::exception &e) { log::error("Failed to load setting [{} / {}]: {}", unlocalizedCategory.get(), unlocalizedName.get(), e.what()); + + ContentRegistry::Settings::impl::getSetting(unlocalizedCategory, unlocalizedName, defaultValue) = defaultValue; } } }