From 3f9ce561b997e4c570d84e58d1709264b01ba5a5 Mon Sep 17 00:00:00 2001 From: WerWolv Date: Sun, 7 Dec 2025 14:00:10 +0100 Subject: [PATCH] fix: Post-pone file opening till everything has been initialized --- plugins/builtin/source/content/events.cpp | 40 ++++++++++++----------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/plugins/builtin/source/content/events.cpp b/plugins/builtin/source/content/events.cpp index 941f1e15b..ec1b2e79a 100644 --- a/plugins/builtin/source/content/events.cpp +++ b/plugins/builtin/source/content/events.cpp @@ -40,30 +40,32 @@ namespace hex::plugin::builtin { static void openFile(const std::fs::path &path) { - if (path.extension() == ".hexproj") { - if (!ProjectFile::load(path)) { - ui::ToastError::open(fmt::format("hex.builtin.popup.error.project.load"_lang, wolv::util::toUTF8String(path))); - } + TaskManager::doLater([path] { + if (path.extension() == ".hexproj") { + if (!ProjectFile::load(path)) { + ui::ToastError::open(fmt::format("hex.builtin.popup.error.project.load"_lang, wolv::util::toUTF8String(path))); + } - return; - } - - auto provider = ImHexApi::Provider::createProvider("hex.builtin.provider.file", true); - if (auto *fileProvider = dynamic_cast(provider); fileProvider != nullptr) { - fileProvider->setPath(path); - if (!provider->open() || !provider->isAvailable()) { - ui::ToastError::open(fmt::format("hex.builtin.provider.error.open"_lang, provider->getErrorMessage())); - TaskManager::doLater([provider] { ImHexApi::Provider::remove(provider); }); return; } - EventProviderOpened::post(fileProvider); - AchievementManager::unlockAchievement("hex.builtin.achievement.starting_out", "hex.builtin.achievement.starting_out.open_file.name"); - ImHexApi::Provider::setCurrentProvider(provider); + auto provider = ImHexApi::Provider::createProvider("hex.builtin.provider.file", true); + if (auto *fileProvider = dynamic_cast(provider); fileProvider != nullptr) { + fileProvider->setPath(path); + if (!provider->open() || !provider->isAvailable()) { + ui::ToastError::open(fmt::format("hex.builtin.provider.error.open"_lang, provider->getErrorMessage())); + TaskManager::doLater([provider] { ImHexApi::Provider::remove(provider); }); + return; + } - glfwRequestWindowAttention(ImHexApi::System::getMainWindowHandle()); - glfwFocusWindow(ImHexApi::System::getMainWindowHandle()); - } + EventProviderOpened::post(fileProvider); + AchievementManager::unlockAchievement("hex.builtin.achievement.starting_out", "hex.builtin.achievement.starting_out.open_file.name"); + ImHexApi::Provider::setCurrentProvider(provider); + + glfwRequestWindowAttention(ImHexApi::System::getMainWindowHandle()); + glfwFocusWindow(ImHexApi::System::getMainWindowHandle()); + } + }); } void registerEventHandlers() {