From 0c0caf6942878d856d54ccdf7e4406e9735374e5 Mon Sep 17 00:00:00 2001 From: WerWolv Date: Tue, 16 Aug 2022 11:48:37 +0200 Subject: [PATCH] fix: Restarting ImHex not working correctly --- lib/libimhex/include/hex/api/event.hpp | 1 + lib/libimhex/source/api/imhex_api.cpp | 7 +-- main/source/init/tasks.cpp | 1 + main/source/main.cpp | 63 +++++++++++++++----------- 4 files changed, 40 insertions(+), 32 deletions(-) diff --git a/lib/libimhex/include/hex/api/event.hpp b/lib/libimhex/include/hex/api/event.hpp index 5861c115b..04ec37f1f 100644 --- a/lib/libimhex/include/hex/api/event.hpp +++ b/lib/libimhex/include/hex/api/event.hpp @@ -126,6 +126,7 @@ namespace hex { EVENT_DEF(RequestSetPatternLanguageCode, std::string); EVENT_DEF(RequestChangeWindowTitle, std::string); EVENT_DEF(RequestCloseImHex, bool); + EVENT_DEF(RequestRestartImHex); EVENT_DEF(RequestOpenFile, std::fs::path); EVENT_DEF(RequestChangeTheme, u32); EVENT_DEF(RequestOpenPopup, std::string); diff --git a/lib/libimhex/source/api/imhex_api.cpp b/lib/libimhex/source/api/imhex_api.cpp index 93d725732..fe598673f 100644 --- a/lib/libimhex/source/api/imhex_api.cpp +++ b/lib/libimhex/source/api/imhex_api.cpp @@ -20,11 +20,8 @@ namespace hex { } void restartImHex() { + EventManager::post(); EventManager::post(false); - std::atexit([] { - auto &programArgs = ImHexApi::System::getProgramArguments(); - execve(programArgs.argv[0], programArgs.argv, programArgs.envp); - }); } } @@ -393,7 +390,7 @@ namespace hex { s_customFontPath = path; } - static float s_fontSize = 13.0; + static float s_fontSize = DefaultFontSize; void setFontSize(float size) { s_fontSize = size; } diff --git a/main/source/init/tasks.cpp b/main/source/init/tasks.cpp index 6dfd6a049..6e429fe6a 100644 --- a/main/source/init/tasks.cpp +++ b/main/source/init/tasks.cpp @@ -221,6 +221,7 @@ namespace hex::init { ContentRegistry::DataFormatter::getEntries().clear(); ContentRegistry::FileHandler::getEntries().clear(); + ContentRegistry::Hashes::impl::getHashes().clear(); { auto &visualizers = ContentRegistry::HexEditor::impl::getVisualizers(); diff --git a/main/source/main.cpp b/main/source/main.cpp index 3954aab56..b4e93c48d 100644 --- a/main/source/main.cpp +++ b/main/source/main.cpp @@ -18,42 +18,51 @@ int main(int argc, char **argv, char **envp) { ImHexApi::System::impl::setBorderlessWindowMode(true); #endif - // Initialization - { - Window::initNative(); + bool shouldRestart = false; - hex::log::info("Welcome to ImHex!"); + EventManager::subscribe([&]{ shouldRestart = true; }); - init::WindowSplash splashWindow; + do { + shouldRestart = false; - for (const auto &[name, task] : init::getInitTasks()) - splashWindow.addStartupTask(name, task); + // Initialization + { + Window::initNative(); - if (!splashWindow.loop()) - ImHexApi::System::getInitArguments().insert({ "tasks-failed", {} }); - } + hex::log::info("Welcome to ImHex!"); - // Clean up - ON_SCOPE_EXIT { - for (const auto &[name, task] : init::getExitTasks()) - task(); - }; + init::WindowSplash splashWindow; - // Main window - { - Window window; + for (const auto &[name, task] : init::getInitTasks()) + splashWindow.addStartupTask(name, task); - if (argc == 1) - ; // No arguments provided - else if (argc == 2) - EventManager::post(argv[1]); - else { - hex::log::fatal("Usage: {} []", argv[0]); - return EXIT_FAILURE; + if (!splashWindow.loop()) + ImHexApi::System::getInitArguments().insert({ "tasks-failed", {} }); } - window.loop(); - } + // Clean up + ON_SCOPE_EXIT { + for (const auto &[name, task] : init::getExitTasks()) + task(); + }; + + // Main window + { + Window window; + + if (argc == 1) + ; // No arguments provided + else if (argc == 2) + EventManager::post(argv[1]); + else { + hex::log::fatal("Usage: {} []", argv[0]); + return EXIT_FAILURE; + } + + window.loop(); + } + + } while (shouldRestart); return EXIT_SUCCESS; }