Sets tag bits (1<<1) | (1<<9) on every overlay window: bit 1 is
kCGSIgnoreForEvents (click-through), bit 9 hides the window from
ScreenCaptureKit, the screenshot picker, and screen recordings.
Mirrors JankyBorders' approach (.refs/JankyBorders/src/border.c:290
and .refs/JankyBorders/src/misc/window.h:266).
Tags are now set BEFORE SLWindowContextCreate / drawing, which is the
critical difference from the prior tag-based attempt that poisoned
SLSNewWindow on stack-cycle recreates. Removes the now-redundant
SLSSetWindowEventShape/Mask, SLSSetWindowSharingState, and
SLSSetWindowClientPerceivedType bindings.
The guessed FFI signature for SLSTransactionSetWindowBoundsPath does
not match Tahoe's actual ABI — calling it crashes ers with SIGSEGV
during overlay creation, which leaves tarmac with no border renderer.
Removing the donut path; capture-exclusion now relies solely on the
SharingState/ClientPerceivedType advisories. Screenshots will once
again include the overlay border, but borders themselves come back.
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