Add Explorer Info Bar+ - #5229
Conversation
|
Thanks for the pull request! This repository uses a two-stage review: an AI review that you run yourself, followed by a human review. To get started, comment See the pull request review process for the full details. |
|
/ai-review |
Submission reviewNote: This review was done by Claude. Due to the amount of submissions, doing a fully manual review for each pull request is no longer feasible. Thank you for understanding. Remember: The AI reviewer can be wrong - it may misread code, flag correct code as broken, or suggest changes that make things worse. Treat its findings as suggestions to verify, not instructions to follow blindly. You're responsible for the code you submit, so if a finding doesn't hold up, say so instead of changing working code to satisfy it. Please address the following issues. The items in the collapsed sections are optional, so it's your call whether to address them. The feature idea is nice and the mod is well-structured internally (per-window state, snapshot-under-lock discipline, DPI scaling, no persistent system changes). The problems are concentrated in how the mod finds the status row, how much work it does per poll, and its unload path. 1. The mod only works on English Windows. The same heuristic also produces false positives in the other direction: any For a language-independent hook point, see mods/explorer-status-metadata.wh.cpp — it hooks 2. Reconsider the global 3. Unloading the mod can hang Explorer indefinitely. The teardown loop in This machinery is a re-implementation of Related: 4. Every 500 ms poll re-enumerates the whole selection through cross-apartment COM. The Please gate the expensive path: cache the selection result and only re-enumerate when the selection actually changed, cap (or skip) per-item enumeration above some count, and ideally drive the update from an event ( 5. A full directory scan of the current folder runs every 30 s, per window, forever. 6. Please describe how this differs from the existing status-bar mods. Classic Explorer Status Bar already shows free disk space, item/selection counts and total selected size, and Explorer Status Bar Metadata already shows single-file metadata (dimensions, duration, type) in the same status bar. The presentation here is genuinely different — a styled overlay on the native Windows 11 info bar rather than a classic status-bar control — but the "Show Single File Details" section in particular overlaps closely with the latter. Please state the difference in the PR description, and consider whether that section is better left to the existing mod (or contributed there as an option). Optional improvements
Minor polish — none of this affects users, so it's your call.
Functionality notes
Non-critical observations and ideas about the feature behavior itself.
Next steps:
See the review process for details. |
|
/ai-review |
Submission reviewNote: This review was done by Claude. Due to the amount of submissions, doing a fully manual review for each pull request is no longer feasible. Thank you for understanding. Remember: The AI reviewer can be wrong - it may misread code, flag correct code as broken, or suggest changes that make things worse. Treat its findings as suggestions to verify, not instructions to follow blindly. You're responsible for the code you submit, so if a finding doesn't hold up, say so instead of changing working code to satisfy it. Please address the following issues. The items in the collapsed sections are optional, so it's your call whether to address them. Good progress since the last round: the language-dependent 1. Killing the thread there is much worse than waiting. The thread is terminated at an arbitrary instruction, so it can own Please drop it and make the wait actually terminable instead: SetEvent(g_stopEvent);
CancelSynchronousIo(g_workerThread); // aborts a blocking FindNextFileW
WaitForSingleObject(g_workerThread, INFINITE);
CloseHandle(g_workerThread);If you ever do need a bail-out, leak the thread handle rather than kill the thread — mods/explorer-nav-dragover-fix.wh.cpp#L2453-L2465 spells out the same trade-off. Related, in the same area: 2. The painter uses The failure is concrete: during one Fix: never let the painter read an unvalidated rect. Store the mapped rect only after it passes the check, together with the window it was validated for — e.g. next to 3. 4. Selection and folder state are still re-read from scratch twice a second. With nothing selected, each 500 ms poll makes roughly eight blocking cross-apartment calls per window ( Nothing is cached between polls, so an unchanged selection is fully re-enumerated every time. Please (a) skip the work when nothing changed, and (b) drive the update from an event rather than a fixed timer — 5. The README lost its screenshot. The preview image was removed in the second commit. That wasn't necessary: Optional improvements
Minor polish — none of this affects users, so it's your call. Several of these carry over from the previous round.
Functionality notes
Non-critical observations and ideas about the feature behavior itself.
Next steps:
See the review process for details. |
|
/ai-review |
Submission reviewNote: This review was done by Claude. Due to the amount of submissions, doing a fully manual review for each pull request is no longer feasible. Thank you for understanding. Remember: The AI reviewer can be wrong - it may misread code, flag correct code as broken, or suggest changes that make things worse. Treat its findings as suggestions to verify, not instructions to follow blindly. You're responsible for the code you submit, so if a finding doesn't hold up, say so instead of changing working code to satisfy it. Please address the following issues. The items in the collapsed sections are optional, so it's your call whether to address them. Good round: 1. The selection
The dead-hook case also silently breaks a headline feature. Fix: host the hook on a dedicated thread that owns it end to end — create the thread in 2. Both hooks exist only to (a) reach the
If you'd rather keep a text-anchored rect, mods/explorer-status-metadata.wh.cpp#L106 hooks Optional improvements
Minor polish — none of this affects users, so it's your call. Several of these carry over from the previous rounds.
Functionality notes
Non-critical observations and ideas about the feature behavior itself.
Next steps:
See the review process for details. |
|
/ai-review |
|
This pull request has already had 3 AI reviews in the last 24 hours, which is the limit, so no review was posted this time. Comment |
|
This pull request has already had 3 AI reviews in the last 24 hours, which is the limit, so no review was posted this time. Comment |
|
/ai-review |
Submission reviewNote: This review was done by Claude. Due to the amount of submissions, doing a fully manual review for each pull request is no longer feasible. Thank you for understanding. Remember: The AI reviewer can be wrong - it may misread code, flag correct code as broken, or suggest changes that make things worse. Treat its findings as suggestions to verify, not instructions to follow blindly. You're responsible for the code you submit, so if a finding doesn't hold up, say so instead of changing working code to satisfy it. Please address the following issues. The items in the collapsed sections are optional, so it's your call whether to address them. The mod is carefully written in a lot of places — the lock discipline (never holding 1. The README's compatibility claim about Explorer Status Bar Metadata is wrong. The README says (line 60) that the overlap with Explorer Status Bar Metadata is functional only and "no broader incompatibility is implied". But coverRow.right = std::max(coverRow.left, client.right - ScaleForDpi(dpi, 64));
...
FillRect(hdc, &coverRow, brush);Explorer Status Bar Metadata works by extending Explorer's native status string (it hooks 2. Overlap with the existing status-bar mods. Related to the above: the maintainer's consistent preference is to extend an existing mod (or PR the original author's repo) rather than merge a mod that substantially overlaps one. Right now:
The genuinely new part is the combined, styled overlay on Win11's native bar (sections, ordering, panes/cards, colors), which none of the others do — that's a reasonable differentiator, but please be ready to make the case explicitly in the PR. One thing that would help a lot: default 3.
if (theme.hasSampledNativeRowBackground && !fullRowRepaint)
return theme.rowBackground;Any repaint whose update region covers the row — window activation, resize, scroll, the The cached value is already invalidated at exactly the right moments ( if (theme.hasSampledNativeRowBackground)
return theme.rowBackground;4. Per-message work in the paint and resize paths. Three things run on the Explorer UI thread more often than they need to:
5. The fixed 10 s poll is mostly redundant.
Selection is already event-driven via the WinEvent hook, so the timer is really only there for free space and for folder-content changes. Both have event sources: Optional improvements
Minor polish — none of this affects users, so it's your call.
Functionality notes
Non-critical observations and ideas about the feature behavior itself.
Next steps:
See the review process for details. |
|
/ai-review |
|
This pull request has already had 3 AI reviews in the last 24 hours, which is the limit, so no review was posted this time. Comment |
|
/ai-review |
Submission reviewNote: This review was done by Claude. Due to the amount of submissions, doing a fully manual review for each pull request is no longer feasible. Thank you for understanding. Remember: The AI reviewer can be wrong - it may misread code, flag correct code as broken, or suggest changes that make things worse. Treat its findings as suggestions to verify, not instructions to follow blindly. You're responsible for the code you submit, so if a finding doesn't hold up, say so instead of changing working code to satisfy it. Please address the following issues. The items in the collapsed sections are optional, so it's your call whether to address them. All five items from the previous round landed: the README now documents the hard conflict with Explorer Status Bar Metadata, 1. Nothing retries the Moving the registration out of The failure isn't silent, it's disfiguring. Two small fixes, worth doing both:
2.
const HRESULT initHr = CoInitializeEx(nullptr, COINIT_MULTITHREADED);
const bool shouldUninitialize = SUCCEEDED(initHr);
const HRESULT cancelHr = CoCancelCall(g_workerThreadId, 0);
if (FAILED(cancelHr) && cancelHr != RPC_E_CALL_COMPLETE) {
Wh_Log(L"CoCancelCall failed HRESULT=0x%08X", (unsigned)cancelHr);
}
if (shouldUninitialize)
CoUninitialize();While you're there: guard the cancel with 3. Overlap with the existing status-bar mods — flagged for the human reviewer, not a request for more work. The README's "Compatibility / Why this mod is separate" section now states the conflicts plainly, including the one with explorer-status-metadata, and Optional improvements
Minor polish — none of this affects users, so it's your call. Several carry over from previous rounds.
Functionality notes
Non-critical observations and ideas about the feature behavior itself. Most carry over unchanged.
Next steps:
See the review process for details. |
|
/ai-review |
Submission reviewNote: This review was done by Claude. Due to the amount of submissions, doing a fully manual review for each pull request is no longer feasible. Thank you for understanding. Remember: The AI reviewer can be wrong - it may misread code, flag correct code as broken, or suggest changes that make things worse. Treat its findings as suggestions to verify, not instructions to follow blindly. You're responsible for the code you submit, so if a finding doesn't hold up, say so instead of changing working code to satisfy it. Please address the following issues. The items in the collapsed sections are optional, so it's your call whether to address them. The threading and lifecycle work here is genuinely careful — locks are consistently released before the 1. Overlap with the three existing Explorer status-bar mods. The maintainer's standing preference is to extend an existing mod (or PR the original author's repo) rather than merge a near-duplicate, so this will be the first question asked. Concretely:
The genuinely new part is presentation: rendering into the native Windows 11 row with configurable section order, panel styles and colors. That's a defensible difference, but the README currently frames it as "don't run these together", which is the fragmentation the maintainer is trying to avoid — three mods fighting over the same 24 pixels. Worth stating explicitly in the PR why this can't be an option on one of the existing mods (e.g. a "modern style" option for 2. The overlay paints on top of Explorer's own status row instead of owning it. In the
Both existing status-bar mods take the other route: hook If you'd rather keep the overpaint approach, please say so and why — it's a judgement call, but it should be a deliberate one rather than the default. 3. Trim the defensive scaffolding. At 6013 lines this is one of the largest mods in the repo, and a large share of it is machinery that doesn't do anything for users. It matters for the catalog: whoever has to fix a bug here in a year has to read all of it. Specific things that can go:
Optional improvements
Minor polish — none of this affects users, so it's your call.
Functionality notes
Non-critical observations and ideas about the feature behavior itself.
Next steps:
See the review process for details. |
|
/ready-for-reviewer |
Adds a customizable information bar to Windows 11 File Explorer with drive free space, folder/file totals, selection details, and optional single-file metadata.
Explorer Info Bar+ is designed as a broader, modern information bar for the native Windows 11 Explorer bottom area rather than as a restoration of the classic status bar or a metadata-only extension.
It combines several information groups in one configurable overlay:
The bar can also be customized with section visibility and order, multiple visual styles, automatic or custom colors, and separate styling for each information group.
This differs from Classic Explorer Status Bar, which restores a classic-style status bar and focuses on traditional status information, and Explorer Status Bar Metadata, which focuses primarily on single-file metadata. Explorer Info Bar+ combines status information, selection information, real file-extension display, and basic metadata into one customizable modern info bar.
Includes few styles, fully customizable: Simple, Flat panes, and Soft cards
Changelog
If this pull request updates an existing mod, describe the changes below:
Mod authorship
If this pull request introduces a new mod, please complete the section below.
This mod was created by:
Please select the options that best apply. Your selection does not affect the acceptance criteria, but it helps reviewers understand the context of the code and provide relevant feedback.