Commits

Commits on April 28, 2026

  1. Revert tag-based exclusion; restore EventShape click-through
    Setting any SLS window tags (bit 1 or bits 1|9) post-creation breaks
    border visibility on Tahoe in our recreate-overlay-on-move lifecycle:
    borders flicker on and disappear during the rapid sync_overlay churn
    that tiling produces. JankyBorders works with tags 1|9 because it
    creates each border window once and moves it via
    SLSTransactionMoveWindowWithGroup; ers releases and recreates the SLS
    window on every geometry change, and Tahoe's compositor handles the
    tagged-then-released window very differently.
    
    Restoring SLSSetWindowEventShape(empty) + SLSSetWindowEventMask(0) for
    click-through; screenshots will again include the overlay until the
    lifecycle is refactored to match JankyBorders'.
    mfwolffe committed
  2. Exclude overlays from screenshots via SLS tag bit 9
    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.
    mfwolffe committed
  3. Revert SLSTransactionSetWindowBoundsPath donut: segfaults on Tahoe
    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.
    mfwolffe committed

Commits on April 27, 2026

  1. Refresh overlay bounds on focus change before hide/unhide
    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.
    mfwolffe committed
  2. Exclude overlays from screen capture via donut bounds path
    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.
    mfwolffe committed
  3. Switch overlay click-through from SLSSetWindowTags to SLSSetWindowEventShape
    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.
    mfwolffe committed

Commits on April 7, 2026

  1. espadonne committed

Commits on April 6, 2026

  1. espadonne committed

Commits on March 30, 2026

Commits on March 23, 2026

  1. revert layer filters to layer!=0, use main_cid for cross-process queries
    - 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
    espadonne committed
  2. accept non-zero window layers for focus detection and bordering
    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
    espadonne committed

Commits on March 22, 2026

  1. espadonne committed