diff --git a/lib/libimhex/source/api/imhex_api.cpp b/lib/libimhex/source/api/imhex_api.cpp index f16b5403a..9c607e54c 100644 --- a/lib/libimhex/source/api/imhex_api.cpp +++ b/lib/libimhex/source/api/imhex_api.cpp @@ -211,7 +211,7 @@ namespace hex { namespace ImHexApi::Provider { - static u32 s_currentProvider; + static u32 s_currentProvider = std::numeric_limits::max(); static std::vector s_providers; namespace impl { @@ -302,7 +302,9 @@ namespace hex { s_providers.erase(it); - if (it - s_providers.begin() == s_currentProvider && !s_providers.empty()) + if (s_providers.empty()) + EventManager::post(provider, nullptr); + else if (it - s_providers.begin() == s_currentProvider) setCurrentProvider(0); delete provider; diff --git a/main/source/window/window.cpp b/main/source/window/window.cpp index b3f9aee83..dfb8ee278 100644 --- a/main/source/window/window.cpp +++ b/main/source/window/window.cpp @@ -113,10 +113,6 @@ namespace hex { EventManager::post(this->m_window); }); - EventManager::subscribe(this, [](const auto*) { - EventManager::post(""); - }); - EventManager::subscribe(this, [this](const std::string &windowTitle) { std::string title = "ImHex"; diff --git a/plugins/builtin/source/content/events.cpp b/plugins/builtin/source/content/events.cpp index b0ffa6f46..8b8583ad7 100644 --- a/plugins/builtin/source/content/events.cpp +++ b/plugins/builtin/source/content/events.cpp @@ -61,6 +61,16 @@ namespace hex::plugin::builtin { } }); + EventManager::subscribe([](hex::prv::Provider *oldProvider, hex::prv::Provider *newProvider) { + hex::unused(oldProvider); + + if (newProvider != nullptr) { + EventManager::post(newProvider->getName()); + } else { + EventManager::post(""); + } + }); + EventManager::subscribe(openFile); EventManager::subscribe([](const std::string &name) { diff --git a/plugins/builtin/source/content/welcome_screen.cpp b/plugins/builtin/source/content/welcome_screen.cpp index c1a541c55..427e4df77 100644 --- a/plugins/builtin/source/content/welcome_screen.cpp +++ b/plugins/builtin/source/content/welcome_screen.cpp @@ -140,7 +140,9 @@ namespace hex::plugin::builtin { for (const auto &unlocalizedProviderName : ContentRegistry::Provider::getEntries()) { if (ImGui::Hyperlink(LangEntry(unlocalizedProviderName))) { - ImHexApi::Provider::createProvider(unlocalizedProviderName); + auto *provider = ImHexApi::Provider::createProvider(unlocalizedProviderName); + if (!provider->hasLoadInterface()) + (void)provider->open(); ImGui::CloseCurrentPopup(); } }