Skip to content

fix: crisp taskbar icon, dark-mode tray icon and the refined Kōrero mark - #7

Merged
nkeating-cmd merged 1 commit into
mainfrom
fix/tray-icons
Oct 26, 2026
Merged

nkeating-cmd merged 1 commit into
mainfrom
fix/tray-icons

Conversation

@nkeating-cmd

Copy link
Copy Markdown
Owner

Before Submitting This PR

Please confirm you have done the following:

  • I have searched existing issues and pull requests (including closed ones) to ensure this isn't a duplicate
  • I have read CONTRIBUTING.md

If this is a feature or change that was previously closed/rejected:

  • I have explained in the description below why this should be reconsidered (n/a)
  • I have gathered community feedback (n/a: Kōrero fork, not upstream Handy)

Human Written Description

Nic's request, in his own words (26 Oct 2026): "Low res taskbar icon", "I want a dark mode task bar icon, and an improved design". He chose design A (refined K) with a matching app icon from three candidates.

Related Issues/Discussions

Fixes: blurry Windows taskbar icon; near-invisible tray icon on a dark taskbar. Kind: fix (plus the agreed icon redesign). No dependency, schema or workflow changes.

Community Feedback

n/a (Kōrero fork).

What changed and why

  1. Blurry taskbar icon (root cause). Tauri 2 builds the Windows window/taskbar icon from the first frame of src-tauri/icons/icon.ico (tauri-codegen 2.5.4, src/image.rs: icon_dir.entries()[0]). Ours was 16×16, stretched to ~48 px at 200% scaling. icon.ico is now written largest-first (256 → 16). Pillow's own ICO writer sorts smallest-first, so scripts/gen-icons.py writes the container itself.
  2. Dark-mode tray icon (root cause). tray.rs::get_icon_path was inverted: the *_dark.png files hold the white glyph meant for dark taskbars but were mapped to the light theme, so a dark taskbar got a dark-grey K. It also read the app theme (AppsUseLightTheme) rather than the taskbar's (SystemUsesLightTheme); Windows now reads the taskbar setting via winreg, falling back to the window theme.
  3. Design. Refined macron-K for the tray (heavier strokes, state dot cut out with a clear ring) and a matching app icon (white K, Kōrero-blue #0A84FF macron, #151517 tile) replacing upstream Handy's glove in every bundled size. Everything is generated by python scripts/gen-icons.py from one definition.

Not changed: Linux "coloured" tray icons, icons/android, icons/ios. Known residual: a taskbar-only theme switch (apps unchanged) fires no ThemeChanged; the tray updates on the next state change or restart.

Testing

All on yoga-26 (Windows 11, fully dark theme, 200% scaling), at this branch's head:

  • New test tray::icon_contrast_tests::tray_icon_contrast_matches_theme: checks glyph luma by pixel for every theme/state (dark taskbar > 170, light < 110), not by file name. Shown to fail under the old mapping (glyph luma 60 on a dark taskbar).
  • cargo test --lib --locked, cargo check --locked, bun test unit-tests, tsc --noEmit, eslint src: see the gate results in the comment below / CI.
  • Unsigned release build (--config .github/ci-no-updater.json) installed on yoga: the six installed tray PNGs hash-match the generated ones; app starts with no icon-load warnings; Parakeet loads; Nic checked the taskbar and tray icons by eye and approved.
  • Publish gates: gitleaks 8.30.1 over all refs and full history; personal-data scan of added lines and commit metadata.

Screenshots/Videos (if applicable)

Icon candidates and the chosen set were reviewed in the session (contact sheets at true tray size, 32 px at 200%, and 16 px).

AI Assistance

  • No AI was used in this PR
  • AI was used (please describe below)

If AI was used:

  • Tools used: Claude (Claude Code), Opus 5.5
  • How extensively: diagnosis (from Tauri source and the installed app), the code change, the icon generator and the icons, tests, build and install. Nic chose the design and reviewed the result on his machine.

🤖 Generated with Claude Code

https://claude.ai/code/session_01HWh12VTnfGzapQEG42Nzst

…mark

Taskbar: Tauri builds the Windows window/taskbar icon from the FIRST
icon.ico frame. Ours was 16px, stretched to ~48px at 200% scaling.
icon.ico is now written largest-first (Pillow's ICO writer sorts
smallest-first, so scripts/gen-icons.py writes the container itself).

Tray: the theme mapping was inverted (a dark taskbar got the dark-grey
K) and keyed off the app theme, not the taskbar theme. Windows now reads
SystemUsesLightTheme; a pixel-based test guards the mapping.

Design: replaces the upstream Handy glove with the macron-K (white K,
Kōrero-blue macron, dark tile) and redraws the tray K with heavier
strokes and a cut-out state dot. All sizes come from scripts/gen-icons.py.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HWh12VTnfGzapQEG42Nzst
@nkeating-cmd

Copy link
Copy Markdown
Owner Author

Code review

No issues found. Checked for bugs and CLAUDE.md compliance.

🤖 Generated with Claude Code

@nkeating-cmd
nkeating-cmd merged commit 7bedb2d into main Oct 26, 2026
2 checks passed
@nkeating-cmd
nkeating-cmd deleted the fix/tray-icons branch October 26, 2026 05:03
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