Skip to content

fix: connection UX redesign, tray icon theme, crash fixes (v2.1.2)#15

Merged
TobiiNT merged 8 commits into
mainfrom
fix/connect-ux-redesign
Mar 18, 2026
Merged

fix: connection UX redesign, tray icon theme, crash fixes (v2.1.2)#15
TobiiNT merged 8 commits into
mainfrom
fix/connect-ux-redesign

Conversation

@TobiiNT

@TobiiNT TobiiNT commented Mar 18, 2026

Copy link
Copy Markdown
Owner

Summary

  • Connection UX redesign: Simplify subscription to CLI auto-detect only, clearer labels ("Claude.ai Subscription" vs "Claude Code API Usage"), streamlined API setup with auto-fetch users
  • API-only user support: Tray icon shows budget % for API-only users, skip subscription fetch when not configured
  • Disconnect cleanup: Clears stale data, triggers immediate refresh via InvalidateApiCache()
  • W11 tray icon fix: Use SystemUsesLightTheme (taskbar theme) instead of AppsUseLightTheme (app theme) — fixes invisible icons on dark taskbar with light app mode
  • Crash fix: Guard null MainWindow in PopupStackManager.GetDpiScale() — tray apps have no main window, fall back to Win32 GetDpiForSystem()
  • Rate limit UX: Show "Rate limited" message instead of generic "Waiting for usage data..." when first fetch is rate-limited
  • CLI auto-detect refresh: Restore periodic subscription refresh for CLI-synced users (HasClaudeAI || HasCliAccount)
  • Code cleanup: Remove dead ApiBillingView (replaced by unified PersonalUsageView), thread-safe _lastApiFetchTicks with Interlocked

Test plan

  • dotnet build --configuration Release — 0 warnings
  • dotnet test — 141/141 pass
  • Manual: CLI auto-detect → verify periodic refresh continues after first fetch
  • Manual: API-only setup → verify tray icon shows budget %, no subscription fetch errors in logs
  • Manual: Disconnect → verify stale data clears immediately
  • Manual: Light app theme + dark taskbar → verify tray icon outlines are visible (white, not dark gray)
  • Manual: Trigger rate limit → verify popover shows "Rate limited" not "Waiting for usage data..."

🤖 Generated with Claude Code

TobiiNT and others added 8 commits March 18, 2026 18:28
… on disconnect

- Simplify subscription section to CLI auto-detect only (remove browser/manual session key)
- Clearer labels: "Claude.ai Subscription" (% cap) vs "Claude Code API Usage" ($ cost)
- Streamlined API setup: org selection auto-fetches users, single Confirm button
- Skip subscription fetch for API-only users (only when HasClaudeAI)
- Tray icon shows budget % for API-only users instead of empty 0%
- Disconnect clears stale data and triggers immediate popover/widget refresh
- InvalidateApiCache() bypasses 5-min throttle on disconnect/reconnect
- Block scroll wheel on ComboBox to prevent accidental selection changes
- Auto-scroll panels into view when org/user picker appears
- Move user picker outside SetupPanel so Change User works when connected
- Surface user fetch errors in UI instead of silent failure

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Read SystemUsesLightTheme instead of AppsUseLightTheme for tray icons.
W11 defaults to light apps + dark taskbar, causing dark gray outlines
to be invisible on the dark tray background.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add InvalidateApiCache() before RefreshNow() in subscription
  disconnect so stale data clears immediately
- Remove dead ApiBillingView (tab was already removed from sidebar;
  PersonalUsageView handles all API billing UI now)
- Remove unused ApiBilling property from SettingsViewModel
- Make _lastApiFetchTicks thread-safe with Interlocked (was DateTime
  field accessed from async continuations and InvalidateApiCache)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Use HasClaudeAI || HasCliAccount so CLI-synced users (who don't have
a ClaudeSessionKey but do have CliCredentialsJSON) still get periodic
subscription usage updates. API-only users are still excluded.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Tray apps have no MainWindow, causing ArgumentNullException in
PresentationSource.FromVisual. Guard with null check and fall back
to Win32 GetDpiForSystem() (same approach as TrayIconRenderer).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When rate-limited on first fetch (no usage data yet), the status line
showed 'Waiting for usage data...' hiding the actual rate-limit error.
Now surfaces LastUpdatedText (e.g. 'Rate limited') when available.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The version bump commit is pushed directly to main (not part of a PR),
so looking up PRs for the tag commit always returned empty. Now iterates
all commits between previous and current tag to find the associated PR.
Falls back to most recent merged PR if no commit match found.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@TobiiNT TobiiNT merged commit 89c9d15 into main Mar 18, 2026
1 check passed
@TobiiNT TobiiNT deleted the fix/connect-ux-redesign branch March 18, 2026 20:38
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.

1 participant