You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
|**Keymap learns the focused app**| ✅ published by the watcher | ✅ published by the watcher | ✅ published by the watcher | ✅ published by the watcher | ✅ published by the watcher |
@@ -493,8 +493,13 @@ Control events remain macOS-only. Windows has a single API for it after all:
493
493
through `SetWinEventHook` on a message-loop thread of its own, hands each new
494
494
foreground HWND to a goroutine, and resolves it there to the **executable
495
495
path** — the identity `GetForegroundWindow` already gives the focused app, so
496
-
per-app configuration keys on one string however it is learned. Only
497
-
activate and deactivate are emitted there; display hotplug is still a gap.
496
+
per-app configuration keys on one string however it is learned. Display
497
+
changes ride the same dispatch goroutine from a second source: a hidden
498
+
top-level window on a pump thread of its own receives `WM_DISPLAYCHANGE` and
499
+
`WM_DPICHANGED` (`platform/windows/display_watcher.go`) and coalesces them into
500
+
one screen-parameters event, so a resolution or arrangement change re-lays-out
501
+
the overlay as it does on macOS. Only activate, deactivate and screen-params
502
+
are emitted there; launch, terminate and Mission Control stay macOS-only.
498
503
499
504
**Global hotkeys on Wayland.** No Wayland protocol lets an ordinary client
500
505
register a global hotkey, so Neru reads `/dev/input/event*` directly with a
@@ -869,7 +874,7 @@ important thing to know before touching overlay code:
869
874
|**Always on top**|`NSScreenSaverWindowLevel`|`_NET_WM_STATE_ABOVE` + `MapRaised`| overlay layer |`HWND_TOPMOST`|
|**HiDPI**| dynamic `contentsScale` + backing-change callback |`Xft.dpi`, one global factor |`wl_output` scale + `wp_fractional_scale_v1` / `wp_viewporter`| not explicit |
872
-
|**Multi-monitor**| per-display clamping, screen-change tracking | all monitors enumerated, per-monitor render, live RandR hotplug | one `wl_surface` per output (max 16), live hotplug | cursor-screen tracking, separate indicator/sticky windows |
877
+
|**Multi-monitor**| per-display clamping, screen-change tracking | all monitors enumerated, per-monitor render, live RandR hotplug | one `wl_surface` per output (max 16), live hotplug | cursor-screen tracking, live `WM_DISPLAYCHANGE` hotplug, separate indicator/sticky windows |
873
878
|**Buffers**| layer-backed, OS-managed | single Cairo surface | triple-buffered SHM pool | single pixel buffer |
0 commit comments