AX-driven window moves during stack cycles often don't emit SLS
WINDOW_MOVE notifications, so the stored overlay frame can be stale
when update_focus runs. Calling sync_overlay against the live
SLSGetWindowBounds for both old and new focused windows before the
hide/unhide pair keeps the active border on the right window during
stack-next/prev navigation.
Replaces the overlay's bounds region with a CGPath containing an outer
rect and an inner cutout. SLS evaluates the path with even-odd winding,
so the interior is treated as outside the window: screenshots taken
inside the bordered area capture the underlying app window instead of
the overlay. Pairs with SharingState/ClientPerceivedType advisories for
capture clients that honor them.
The kCGSIgnoreForEvents tag bit poisons the shared SLS connection's
SLSNewWindow path during stack-cycle recreates, dropping border
overlays on the inactive stack windows. An empty event shape achieves
the same click-through without mutating tags.
- revert add_fresh/discover/list layer filters back to layer != 0
(opening to 0-25 caused ers to border its own stale overlays)
- keep get_front_window layer filter open for focus detection on
floating windows at non-zero levels
- use self.main_cid instead of overlay.cid for SLSGetWindowBounds
in redraw() and reposition() to fix cross-process bounds queries
layer != 0 filter was skipping floating windows set to level 8 by
tarmac. now accepts layers 0-25 (normal through modal panel),
skipping only negative layers and system UI. fixes:
- focus detection finds floating windows as front window
- add_fresh includes floating windows for border creation
- list_windows shows floating windows in --list output