From 6bc4a7242ee144b426ce1aa638648c6efdee519a Mon Sep 17 00:00:00 2001 From: WerWolv Date: Mon, 18 Dec 2023 11:46:23 +0100 Subject: [PATCH] fix: Allow search bar to be right clicked to open provider menu --- plugins/builtin/source/content/ui_items.cpp | 36 ++++++++++++++------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/plugins/builtin/source/content/ui_items.cpp b/plugins/builtin/source/content/ui_items.cpp index 25f8aa322..41bd11c88 100644 --- a/plugins/builtin/source/content/ui_items.cpp +++ b/plugins/builtin/source/content/ui_items.cpp @@ -146,6 +146,14 @@ namespace hex::plugin::builtin { }); } + static void drawProviderContextMenu(prv::Provider *provider) { + for (const auto &menuEntry : provider->getMenuEntries()) { + if (ImGui::MenuItem(menuEntry.name.c_str())) { + menuEntry.callback(); + } + } + } + void addToolbarItems() { ShortcutManager::addGlobalShortcut(AllowWhileTyping + ALT + CTRLCMD + Keys::Left, "hex.builtin.shortcut.prev_provider", []{ auto currIndex = ImHexApi::Provider::getCurrentProviderIndex(); @@ -165,6 +173,21 @@ namespace hex::plugin::builtin { static bool providerJustChanged = true; EventProviderChanged::subscribe([](auto, auto) { providerJustChanged = true; }); + static prv::Provider *rightClickedProvider = nullptr; + EventSearchBoxClicked::subscribe([](ImGuiMouseButton button){ + if (button == ImGuiMouseButton_Right) { + rightClickedProvider = ImHexApi::Provider::get(); + RequestOpenPopup::post("ProviderMenu"); + } + }); + + EventFrameBegin::subscribe([] { + if (ImGui::BeginPopup("ProviderMenu") && rightClickedProvider != nullptr) { + drawProviderContextMenu(rightClickedProvider); + ImGui::EndPopup(); + } + }); + ContentRegistry::Interface::addToolbarItem([] { auto provider = ImHexApi::Provider::get(); bool providerValid = provider != nullptr; @@ -329,18 +352,9 @@ namespace hex::plugin::builtin { } if (!tabProvider->getMenuEntries().empty()) { - std::string popupID = std::string("ProviderMenu.") + std::to_string(tabProvider->getID()); if (ImGui::IsMouseReleased(ImGuiMouseButton_Right) && ImGui::IsItemHovered()) { - ImGui::OpenPopup(popupID.c_str()); - } - - if (ImGui::BeginPopup(popupID.c_str())) { - for (const auto &menuEntry : tabProvider->getMenuEntries()) { - if (ImGui::MenuItem(menuEntry.name.c_str())) { - menuEntry.callback(); - } - } - ImGui::EndPopup(); + rightClickedProvider = tabProvider; + RequestOpenPopup::post("ProviderMenu"); } } }