fix(ux): land quick-win UX audit fixes across settings, exports, toasts, nav
Batch of safe, isolated fixes from the 10-surface UX audit: - settings: Auto-shield / Save-z-transactions toggles now persist on change (they discarded CB()'s return and relied on a Save button that only renders on the About tab, so the choice was silently lost on relaunch). - exports: show the resolved Platform::getConfigDir() instead of a hardcoded ~/.config path (wrong on Windows/macOS) in both the all-keys and CSV dialogs; all-keys also reveals the file path on a partial export. - notifications: error/warning toasts last 9s/7s (were 4s/3.5s) so failures are readable. - qr popup / tx-details: copy-to-clipboard now confirms with a toast. - about: Escape-to-close + readable heading contrast via OnSurfaceMedium(). - sidebar: suppress single-key nav (J/K/arrows/[) while an overlay dialog or ImGui popup is open, so it no longer switches the tab behind a modal. - i18n: strip the stale hardcoded path out of file_save_location in i18n.cpp and all eight res/lang/*.json locales (additive, one key each). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -93,7 +93,10 @@ void ExportAllKeysDialog::render(App* app)
|
||||
ImGui::Spacing();
|
||||
m::LabeledInput(TR("output_filename"), "##Filename", s_filename, sizeof(s_filename));
|
||||
ImGui::Spacing();
|
||||
ImGui::TextColored(ImGui::ColorConvertU32ToFloat4(m::OnSurfaceDisabled()), "%s", TR("file_save_location"));
|
||||
// Show the real, resolved config directory (not a hardcoded ~/.config path, which was wrong on
|
||||
// Windows/macOS) so the user knows where this plaintext key file lands before they export it.
|
||||
ImGui::TextColored(ImGui::ColorConvertU32ToFloat4(m::OnSurfaceDisabled()), "%s %s",
|
||||
TR("file_save_location"), util::Platform::getConfigDir().c_str());
|
||||
ImGui::EndDisabled();
|
||||
|
||||
// Progress / result.
|
||||
@@ -232,7 +235,10 @@ void ExportAllKeysDialog::render(App* app)
|
||||
Notifications::instance().error(TR("export_keys_write_fail"));
|
||||
} else if (exported < total) {
|
||||
snprintf(buf, sizeof(buf), TR("export_keys_partial"), exported, total);
|
||||
s_status = buf;
|
||||
// A partial export still wrote a plaintext key file to disk — show WHERE,
|
||||
// so the user can find it to move or delete it (previously only a full
|
||||
// success revealed the path, leaving partial-export files orphaned).
|
||||
s_status = std::string(buf) + "\n" + filepath;
|
||||
snprintf(buf, sizeof(buf), TR("export_keys_partial_toast"), exported, total);
|
||||
Notifications::instance().warning(buf);
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user