kiapanahi / kiapanahi/KuriousLabs.WindowsTilingWindowManager

Implement the Monitor Topology Service (StableMonitorId/EDID persistence, dock/undock migrate-home)

Open
#16 0 comments 0 reactions 0 assignees View on GitHub
area:win32 type:feature
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.