kiapanahi / kiapanahi/KuriousLabs.WindowsTilingWindowManager
Implement the Monitor Topology Service (StableMonitorId/EDID persistence, dock/undock migrate-home)
- Dominant language
- C#
- Stars
- 0
- Forks
- 0
- PR merge metrics
- No merged PRs in 30d
Description
## Problem / goal
Implement the Monitor Topology Service: monitor enumeration, stable cross-reconnection identity, and dock/undock workspace migration.
## References
- `DESIGN.md` §8 (Multi-Monitor & DPI in full) — enumeration via `EnumDisplayMonitors`/`GetMonitorInfoW`; runtime HMONITOR<->CCD-path correlation via `QueryDisplayConfig`; `StableMonitorId` as the only Microsoft-documented-stable persistence key, with EDID manufacture/product-ID fallback; `WM_DISPLAYCHANGE`/`SPI_SETWORKAREA`/`WM_DEVICECHANGE` debounced ~500ms triggers; full re-enumeration and re-homing on any topology change.
## Acceptance criteria
- [ ] Monitors are enumerated via `EnumDisplayMonitors`/`GetMonitorInfoW`; tiles are computed against `rcWork`, never `rcMonitor`.
- [ ] Runtime HMONITOR correlation to a CCD source uses `QueryDisplayConfig(QDC_ONLY_ACTIVE_PATHS)` + `DisplayConfigGetDeviceInfo`, matching on GDI device name.
- [ ] Persisted monitor identity uses `DisplayTarget.StableMonitorId` as the primary key, with EDID manufacture/product-ID + connector-instance fallback when unobtainable — never `monitorDevicePath` alone as a persistence key (session-scoped only).
- [ ] `WM_DISPLAYCHANGE`/`WM_SETTINGCHANGE(SPI_SETWORKAREA)`/`WM_DEVICECHANGE` are debounced ~500ms and trigger a full re-enumeration (every cached HMONITOR treated as suspect, never selectively refreshed).
- [ ] A monitor returning after being unplugged automatically migrates its previously-displaced workspaces back home.
Contributor guide
Research direction
Start with DESIGN.md §8 and trace the existing monitor and window-management entry points before implementing the service. Review EnumDisplayMonitors/GetMonitorInfoW, QueryDisplayConfig, DisplayConfigGetDeviceInfo, and the WM_DISPLAYCHANGE, SPI_SETWORKAREA, and WM_DEVICECHANGE triggers. Done means all acceptance criteria pass, including stable identity persistence, debounced full re-enumeration, rcWork-based tiles, and workspace migration when a monitor returns.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- csharp
- Domain
- desktop-dev, operating-systems
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 30/100