BUG-140 - Transfer UI Updates Can Run On Split Presentation Timers¶
Summary¶
Transfer list refreshes and transfer-rate presentation had drifted into separate timer paths. Producer-posted display work was already queued as dirty state, but the transfer window still owned an extra timer for flushing list presentation. That made the refresh policy harder to reason about and allowed routine UI presentation to be split across multiple clocks.
Fix¶
- Replaced the old transfer-window display timer and the old fixed transfer-rate timer with one desktop presentation timer.
- Kept producer-posted display work as queued dirty state; visible list flushes now happen from the unified timer tick.
- Preserved the paused-mode exception: when desktop UI refresh is paused, the window title speed still updates every 10 seconds.
- When refresh is not paused, title, status, tray, MiniMule, transfer-list flushes, category tab summaries, and upload-list counts share the selected desktop refresh interval.
- Removed the transfer-dialog compatibility wrapper and obsolete seam names.
Acceptance Criteria¶
- [x] No transfer-window owned refresh timer remains.
- [x] No compatibility wrapper remains for the retired transfer-display cadence name.
- [x] Posted transfer display requests do not directly repaint the transfer UI.
- [x] Paused mode suppresses routine UI refresh while keeping title speed on a 10-second cadence.
- [x] Native parity tests cover the unified timer cadence and paused-title exception.
Implementation Evidence¶
2759b9eBUG-140 cover unified desktop presentation cadence1d47b362BUG-140 unify desktop presentation timer
Validation Evidence¶
python -m emule_workspace test native --config Debug --platform x64 --suite-name parity --build-output-mode ErrorsOnlypassed 749 tests.python -m emule_workspace validate- Debug x64 app build through
python -m emule_workspace build app --variant main --config Debug --platform x64 --build-output-mode ErrorsOnlyat20260530T162859Z-build-app. - Release x64 app build through
python -m emule_workspace build app --variant main --config Release --platform x64 --build-output-mode ErrorsOnlyat20260530T162932Z-build-app.