From ab4dd370c01ca63957f8d0c2a1c361288eac6282 Mon Sep 17 00:00:00 2001 From: DanS Date: Sun, 12 Jul 2026 19:25:51 -0500 Subject: [PATCH] fix(console): RPC command-reference modal audit fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Clicking a command now actually closes the modal. It called ImGui::CloseCurrentPopup(), a no-op here (BeginOverlayDialog is Begin/ BeginChild, not an ImGui popup), so the picker stayed open covering the input and the insert looked like it did nothing. Set show_commands_popup_=false. - Search filter is now a member cleared when the modal opens, so it isn't stale on reopen after an outside-click / command-click dismiss (was reset only by the Close button). - Esc dismisses the modal (this overlay has no built-in Esc handling), and the search box auto-focuses on open so the user can type immediately. - Scale the 2-vs-3 column breakpoint (cmd-min-width) by dpiScale() — it was a logical-px threshold compared against a physical-px available width. - Give each category's table a unique ImGui id (##cmdsN) instead of sharing "##cmds", and translate the 7 category names (Control/Network/... — command descriptions stay English) into all 8 languages; CJK subset rebuilt (+2). (Investigated but rejected: the command-name blue was flagged as low-contrast on light skins, but the modal card is a dark glass panel on every theme, so the original color is correct — verified by rendering marble/light/color-pop-light.) Co-Authored-By: Claude Opus 4.8 (1M context) --- res/fonts/NotoSansCJK-Subset.ttf | Bin 619068 -> 619300 bytes res/lang/de.json | 7 +++++ res/lang/es.json | 7 +++++ res/lang/fr.json | 7 +++++ res/lang/ja.json | 7 +++++ res/lang/ko.json | 7 +++++ res/lang/pt.json | 7 +++++ res/lang/ru.json | 7 +++++ res/lang/zh.json | 7 +++++ src/ui/windows/console_tab.cpp | 50 ++++++++++++++++++++++++------- src/ui/windows/console_tab.h | 1 + src/util/i18n.cpp | 7 +++++ 12 files changed, 103 insertions(+), 11 deletions(-) diff --git a/res/fonts/NotoSansCJK-Subset.ttf b/res/fonts/NotoSansCJK-Subset.ttf index d39d622008f83b341707f151a983c33f9dd494d9..8d271988be34917ca7688f0c857248d3660a8526 100644 GIT binary patch delta 8840 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 Yjc>EM#qoy?d_yO2rL6MF{IKW$0Gb>1r~m)} delta 8657 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%0Deug0rMIP=X{i_{vGsNPU-`CVPMUG?^*)Z;b2 z4x80f3)NW-Q8U$IwZyM{-&TIkSGGRaEPt9WsU~Wq8l^_t!}vXkZ0%r?^dIl?Z4Bj#MF-=D;3mv-^ALUI+X-Qz_iRBN1n>FI zgmSGyj>afkqj(quj>b4!qiq&jTW||HiMLS$=@bvqw^-Y+~GRNg9p2jnI0k6w{ zuLWJ-&Su=M)pVZ0vv`oP+xXVVF!mWg8V7i`@tg6xk;QY2v&IFUYuqv(u-D~w2^aG` zSFo#utBk9htAeYNs|wHeMK$Lp#zJ3IBd+b`MXs~1%lxwIy6dLvw(G9z9xrx1a^<1D zmYBk1UTPLKgUym=X*0yEVAeA0n03wiX1LkJY-UFBGPA82ZFV%fn!U_EWHL;$v znp-Wb*8I8^%|5HM6>G&=Bjjmov=uMU@Oo>KHOrc3EwC0_%d8drhPBRGZ@p=4wmz^v zv_7`BTAx{|@~p2x3ohf`V4bi|S!ei7PO>grSFIfD2ES$9weEXL@!OvA{EnxNr=F*Q zC*0GB-}OZECQny>k2mxCoXj8a7SAaDkU!#&|zPm(;z z+dW%6A9+6U?DTxksh$I#OwVtg!=5b9anET_b`6>Bx#aniKleNkg+;LSmaCq7Y<~af z#bX$+`ZhMAKdOt85@0T+H%jrczRfG2VAAyXv;qtjdUC8*Q?V4O$h5rv|n2{ni^e< zp~grf-WX?0G3Fb~jn|AfjLpVYp6#|)zAo*t(SG1Q=|1be#EHI7+jC!d^K{_u tMQv~H_= cmdMinWidth; int catIdx = 0; @@ -1550,11 +1571,12 @@ void ConsoleTab::renderCommandsPopup() ImGui::PushStyleColor(ImGuiCol_Text, ImGui::ColorConvertU32ToFloat4(Primary())); // Show match count badge when filtering + const char* catLabel = consoleCategoryLabel(cat.name); char headerLabel[128]; if (!filter.empty()) { - snprintf(headerLabel, sizeof(headerLabel), "%s (%d)", cat.name, matchCount); + snprintf(headerLabel, sizeof(headerLabel), "%s (%d)", catLabel, matchCount); } else { - snprintf(headerLabel, sizeof(headerLabel), "%s", cat.name); + snprintf(headerLabel, sizeof(headerLabel), "%s", catLabel); } bool open = ImGui::CollapsingHeader(headerLabel, headerFlags); ImGui::PopStyleColor(); @@ -1564,7 +1586,9 @@ void ConsoleTab::renderCommandsPopup() float nameColW = schema::UI().drawElement("tabs.console", "cmd-name-col-width").size * Layout::hScale(); float paramsColW = schema::UI().drawElement("tabs.console", "cmd-params-col-width").size * Layout::hScale(); int numCols = showParams ? 3 : 2; - if (ImGui::BeginTable("##cmds", numCols, ImGuiTableFlags_None)) { + char tableId[24]; + snprintf(tableId, sizeof(tableId), "##cmds%d", catIdx); // unique id per category table + if (ImGui::BeginTable(tableId, numCols, ImGuiTableFlags_None)) { ImGui::TableSetupColumn("Name", ImGuiTableColumnFlags_WidthFixed, nameColW); if (showParams) ImGui::TableSetupColumn("Parameters", ImGuiTableColumnFlags_WidthFixed, paramsColW); @@ -1577,6 +1601,8 @@ void ConsoleTab::renderCommandsPopup() ImGui::TableNextRow(); ImGui::TableNextColumn(); + // Link-like blue for the command name. Readable on all skins: the RPC-reference + // modal card is a dark glass panel regardless of theme, so no light-floor is needed. ImGui::PushStyleColor(ImGuiCol_Text, ImGui::ColorConvertU32ToFloat4(IM_COL32(100, 180, 255, 255))); ImGui::PushStyleColor(ImGuiCol_Header, ImVec4(0, 0, 0, 0)); @@ -1590,7 +1616,9 @@ void ConsoleTab::renderCommandsPopup() strncpy(input_buffer_, cmd.name, sizeof(input_buffer_) - 1); input_buffer_[sizeof(input_buffer_) - 1] = '\0'; } - ImGui::CloseCurrentPopup(); + // This overlay isn't an ImGui popup, so CloseCurrentPopup() is a no-op here — + // close it the way the framework honors, revealing the inserted command. + show_commands_popup_ = false; } if (ImGui::IsItemHovered()) { ImGui::SetMouseCursor(ImGuiMouseCursor_Hand); @@ -1621,9 +1649,9 @@ void ConsoleTab::renderCommandsPopup() ImGui::Dummy(ImVec2(0, Layout::spacingXs())); - // Close button + // Close button (the filter is also reset when the modal next opens). if (material::TactileButton(TR("console_close"), ImVec2(-1, 0))) { - cmdFilter[0] = '\0'; + command_search_[0] = '\0'; show_commands_popup_ = false; } diff --git a/src/ui/windows/console_tab.h b/src/ui/windows/console_tab.h index 921fc41..321b884 100644 --- a/src/ui/windows/console_tab.h +++ b/src/ui/windows/console_tab.h @@ -185,6 +185,7 @@ private: // Commands popup bool show_commands_popup_ = false; + char command_search_[128] = {0}; // RPC-reference search filter (cleared when the modal opens) }; } // namespace ui diff --git a/src/util/i18n.cpp b/src/util/i18n.cpp index 0772291..d8dd986 100644 --- a/src/util/i18n.cpp +++ b/src/util/i18n.cpp @@ -1294,6 +1294,13 @@ void I18n::loadBuiltinEnglish() strings_["console_toggle_text_color"] = "Toggle line text colors"; strings_["console_accents"] = "Color accents"; strings_["console_text_colors"] = "Text colors"; + strings_["console_cat_control"] = "Control"; + strings_["console_cat_network"] = "Network"; + strings_["console_cat_blockchain"] = "Blockchain"; + strings_["console_cat_mining"] = "Mining"; + strings_["console_cat_wallet"] = "Wallet"; + strings_["console_cat_raw_transactions"] = "Raw Transactions"; + strings_["console_cat_utility"] = "Utility"; // --- Export All Keys Dialog --- strings_["export_keys_btn"] = "Export Keys";