Repository navigation
feat: native Windows file, folder and drive icons - #116
Merged
Merged
Conversation
nextestudios
force-pushed
the
feature/24-shell-icons
branch
4 times, most recently
from
September 27, 2026 03:00
0810ee2 to
db68f04
Compare
- IIconProvider contract and IconRequest in Core: common types are keyed by extension (no disk access, archive entries included); drives, known folders and .exe/.ico are keyed by path. - ShellIconProvider (Infrastructure.Windows) uses SHGetFileInfo and the system image lists on a dedicated STA thread; picks the image list for the requested pixel size and falls back to 48 px when a jumbo icon has no large art. Cancelled requests are skipped. - IconLoader (App) shows a Segoe Fluent/MDL2 glyph at once, swaps in the shell icon when ready, dedupes identical requests, cancels on container recycle and keeps a bounded LRU cache keyed by type and pixel size that is cleared when the display scale changes. - No emoji left in the list rows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
nextestudios
force-pushed
the
feature/24-shell-icons
branch
from
September 27, 2026 03:02
db68f04 to
a5b0930
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
IIconProvider+IconRequest.For(entry, specialFolders). Common files and every archive entry are keyed by extension (never touch the disk); folders share one generic key; drives, known folders (also when browsed as normal directories) and.exe/.icofiles are keyed by path.LruCache<TKey,TValue>for a bounded cache. Core stays free of Windows deps.ShellIconProviderusesSHGetFileInfo(SHGFI_USEFILEATTRIBUTESfor extension/folder requests) andSHGetImageList(IImageList::GetIconvia the vtable, no COM interop types), converts the HICON to premultiplied BGRA, and runs on a dedicated STA thread; the UI thread never waits. Chooses the 16/32/48/256 list by pixel size and falls back to 48 px when a jumbo icon has no large art. Requests cancelled before their turn are skipped.IconLoadershows a Segoe Fluent/MDL2 glyph immediately and swaps in the shell icon when it arrives; identical in-flight requests are shared; recycled containers cancel their request; LRU cache (512 entries) keyed by type + pixel size, cleared whenXamlRoot.RasterizationScalechanges (rows are rebuilt at the new size). Used by Home, Browser, Picker and archive views (same list). The lock emoji became text; no emoji remain in list rows.Testing
IconRequestTests(extension vs. path keys, archive entries never hit the disk, blocked rows get no icon; LRU eviction).ShellIconIntegrationTestschecks a.txt, a folder and the system drive return a non-empty image at 32 and 64 px.docs/TESTING.md): known-folder/drive-type icons, per-type icons, archive view, 10,000-item folder scrolling, 1080p/4K/handheld scaling and moving between monitors, focus/marking legibility over icons.Closes #24
🤖 Generated with Claude Code