Skip to content

fix(ui): pointer cursor + tooltips on nav; indicate wallet-less masternodes - #917

Merged
lklimek merged 1 commit into
v1.0-devfrom
fix/nav-cursor-wallet-association-tooltips
Jul 21, 2026
Merged

fix(ui): pointer cursor + tooltips on nav; indicate wallet-less masternodes#917
lklimek merged 1 commit into
v1.0-devfrom
fix/nav-cursor-wallet-association-tooltips

Conversation

@Claudius-Maginificent

Copy link
Copy Markdown
Collaborator

Why this PR exists

  • Problem: Main navigation items give no visual affordance that they're clickable, and a masternode/evonode whose keys don't belong to any loaded wallet was shown with an arbitrary wallet's name instead of indicating it has none.
  • What breaks without it: Hovering the "Identities" label next to the nav icon shows no pointer cursor and clicking it does nothing — there's no way to tell it's interactive. Separately, opening a masternode with no owning wallet shows some unrelated wallet's name as if it controlled that masternode's keys, which is actively misleading.

What was done

  • Root cause (traced, not assumed): egui 0.35's Button sets no hover cursor by default in this app (no global interact_cursor override configured). Applied the existing ResponseExt::clickable_tooltip convention (cursor + tooltip) consistently across all nav rows, including the previously-inert text label beside the icon and the no-texture fallback branches.
  • Added WalletAssociation::{InWallet,NotInWallet} (model/wallet_association.rs) — a pure, testable decision function — and a muted "Not in a wallet" pill (distinct styling from a real wallet name) with an explanatory tooltip, replacing the previous silent fallback to wallets.first().

Testing

  • 7 new tests (lib unit + kittest) — all PASS via the narrowest relevant scope, per ledger logs.
  • Targeted clippy clean, cargo fmt --all clean.

Breaking changes

None.

Checklist

  • Tests added
  • i18n-ready strings, no jargon
  • No secrets in diff

Attribution

🤖 Co-authored by Claudius the Magnificent AI Agent

…rnodes

Task 1 — nav items now read as clickable. The text label beneath each
left-rail icon was inert (no pointer, no click); it is now a clickable
widget, and both it and the fallback (no-texture) branches get the
pointing-hand cursor. egui 0.35's Button sets no cursor by default
(visuals.interact_cursor is None), so the fix uses the existing per-widget
clickable_tooltip convention rather than a global override.

Task 3 — every nav destination carries a one-line hover tooltip; the new
wallet indicator explains a node's keys aren't controlled by any loaded
wallet. A coverage test guards that no nav entry ships without a tooltip.

Task 2 — a masternode/evonode is loaded from raw owner/voting/payout keys
and controlled by no wallet on this device, yet its page's wallet pill
showed an arbitrary loaded wallet as if it owned the node. The wallet
segment is now a muted, read-only "Not in a wallet" indicator, resolved
through a testable model decision function (model/wallet_association.rs)
threaded through PageNavSpec.

Tests: model unit tests for the association decision (owned / unmatched /
none), a nav-tooltip coverage test, a kittest asserting a nav-label hover
sets PointingHand, and a kittest asserting the masternode wallet segment
renders the indicator instead of a wallet name.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

@lklimek, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 59 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 89b7d4b4-bde7-43f3-9620-6b1fce75a1c2

📥 Commits

Reviewing files that changed from the base of the PR and between 0812761 and 063b3b7.

📒 Files selected for processing (12)
  • docs/user-stories.md
  • src/model/mod.rs
  • src/model/wallet_association.rs
  • src/ui/components/README.md
  • src/ui/components/global_nav_switcher.rs
  • src/ui/components/left_panel.rs
  • src/ui/masternodes/list_screen.rs
  • src/ui/state/global_nav.rs
  • src/ui/state/masternodes_view.rs
  • tests/kittest/global_nav_switcher.rs
  • tests/kittest/left_panel.rs
  • tests/kittest/main.rs
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/nav-cursor-wallet-association-tooltips

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@lklimek
lklimek marked this pull request as ready for review July 21, 2026 10:11
@thepastaclaw

Copy link
Copy Markdown
Collaborator

🕓 Ready for review — 35 ahead in queue (commit 063b3b7)
Queue position: 36/37

@lklimek
lklimek merged commit 7900066 into v1.0-dev Jul 21, 2026
5 of 6 checks passed
@lklimek
lklimek deleted the fix/nav-cursor-wallet-association-tooltips branch July 21, 2026 11:16
orchardpaytl pushed a commit to orchardpaytl/orchardpay that referenced this pull request Jul 21, 2026
Brings in: shutdown fix (dashpay#905), duplicate-DPNS-name error message
(dashpay#915), startup banner clearing (dashpay#916), nav pointer cursor + tooltips
and wallet-less masternode indication (dashpay#917), onboarding disconnected-
banner suppression (dashpay#907), masternode dialog/nav/passphrase fixes
(dashpay#913), DAPI auto-refresh during pre-1.0 migration (dashpay#908), "Add
Receiving Address" wiring + its test hardening (dashpay#914, dashpay#920), and a CI
timeout bump (dashpay#912). dashpay#906 (shielded re-enable) was already pulled in
individually last session, so its squashed commit merged as a no-op.

Conflicts (6 files) were rebrand-naming overlaps (dash_evo_tool::  vs
orchardpay::  imports) plus one real merge in left_panel.rs, where
OrchardPay's green-icon tint had to combine with upstream's new nav
tooltip. Also fixed 5 files upstream's auto-merged (non-conflicting)
additions left un-rebranded: a stray DASH_EVO_DATA_DIR_LOCK/env-var
name in a new app.rs test, and dash_evo_tool:: references in three
kittest test files.

Added tooltip strings for OrchardPay's own nav entries (OrchardPay,
DashPay) so the new every_nav_entry_has_a_tooltip test covers them —
upstream's version only knows its own nav items. Fixed the new
nav_label_hover_shows_pointer_cursor kittest test: OrchardPay's nav
rail carries two more always-visible entries than upstream's, pushing
"Settings" below the scrollable list's default-size visible viewport;
scroll it into view first, matching what a real user would do.

Verified: cargo check (both feature modes), cargo clippy --all-features
--all-targets -- -D warnings, cargo fmt --all, cargo test --all-features
--workspace (2066 lib + 257 kittest + doc tests, 0 failed), all clean.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants