utils/gatelock/gatelock
Krzysztof kuhy Rudnicki 2d341dd41e
Some checks failed
dependency freshness / dependencies on newest stable (push) Waiting to run
file length / file-length (push) Waiting to run
md-naming / markdown naming convention (push) Waiting to run
palette drift / palette (push) Waiting to run
repo-contract / repo contract (push) Waiting to run
shared gate tests / gate unit tests (push) Waiting to run
gatelock pre-commit / pre-commit (push) Has been cancelled
gatelock tests / test (push) Has been cancelled
gatelock 0.13.0: locks stay clickable together
A keyring prompt (gcr-prompter) that grabbed input before the
leetcode lock armed left the lock visible but unclickable: every
click went to the prompt hidden under it. Each failed
grab_set_global also froze Tk ~1 s, so the lock barely repainted.

- Raise known credential prompts above the lock after 2 s of a
  blocked grab; games and other grabbers stay covered.
- Probe the grab on a side Xlib connection first so a blocked
  grab never stalls the Tk loop (worst gap 1.05 s -> 0.05 s).
- Log the Tk grab error and stop blaming our own claim.
- 1.5 s startup grace in wait_for_turn, and a weaker armed lock
  steps back (windowless, re-arms later) when a stronger one is
  live, so only one lock is ever on screen.
- Real-X checks: verify_prompt_yield, verify_grab_responsive,
  verify_all_lockers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WzxdWZbpxQZj41WpbQPuxB
2026-11-11 12:49:40 +01:00
..
tests gatelock 0.13.0: locks stay clickable together 2026-11-11 12:49:40 +01:00
__init__.py gatelock 0.11.0: Claim.grab_held + held_grabs(), so a reader can tell a locker's X grab is actually held 2026-10-19 11:40:46 +02:00
_arbiter.py gatelock 0.13.0: locks stay clickable together 2026-11-11 12:49:40 +01:00
_arming.py gatelock 0.13.0: locks stay clickable together 2026-11-11 12:49:40 +01:00
_claimfile.py gatelock 0.11.0: Claim.grab_held + held_grabs(), so a reader can tell a locker's X grab is actually held 2026-10-19 11:40:46 +02:00
_claims.py gatelock 0.11.0: Claim.grab_held + held_grabs(), so a reader can tell a locker's X grab is actually held 2026-10-19 11:40:46 +02:00
_config.py gatelock 0.8.1: public recovery/detector handles; declarative types import from _config 2026-09-12 19:41:13 +02:00
_density.py Pin pre-commit's ruff to 0.16.7 and satisfy the CPY001 it brings 2026-09-12 18:11:24 +02:00
_detect.py gatelock: scope pylint to source on 4.0.8 and clear the residue it grades 2026-09-12 19:15:39 +02:00
_escape_types.py Pin pre-commit's ruff to 0.16.7 and satisfy the CPY001 it brings 2026-09-12 18:11:24 +02:00
_escape.py gatelock: scope pylint to source on 4.0.8 and clear the residue it grades 2026-09-12 19:15:39 +02:00
_fitcheck.py gatelock 0.8.1: public recovery/detector handles; declarative types import from _config 2026-09-12 19:41:13 +02:00
_grabprobe.py gatelock 0.13.0: locks stay clickable together 2026-11-11 12:49:40 +01:00
_grabwatch.py Pin pre-commit's ruff to 0.16.7 and satisfy the CPY001 it brings 2026-09-12 18:11:24 +02:00
_guards.py gatelock 0.8.2: wait_for_x_server waits for as long as it takes 2026-09-13 10:19:52 +02:00
_hooks.py Pin pre-commit's ruff to 0.16.7 and satisfy the CPY001 it brings 2026-09-12 18:11:24 +02:00
_keyboard.py Pin pre-commit's ruff to 0.16.7 and satisfy the CPY001 it brings 2026-09-12 18:11:24 +02:00
_output_types.py Pin pre-commit's ruff to 0.16.7 and satisfy the CPY001 it brings 2026-09-12 18:11:24 +02:00
_outputs.py gatelock: scope pylint to source on 4.0.8 and clear the residue it grades 2026-09-12 19:15:39 +02:00
_placement.py gatelock 0.13.0: locks stay clickable together 2026-11-11 12:49:40 +01:00
_preempt.py gatelock 0.13.0: locks stay clickable together 2026-11-11 12:49:40 +01:00
_prompt_names.py gatelock 0.13.0: locks stay clickable together 2026-11-11 12:49:40 +01:00
_prompts_x.py gatelock 0.13.0: locks stay clickable together 2026-11-11 12:49:40 +01:00
_prompts.py gatelock 0.13.0: locks stay clickable together 2026-11-11 12:49:40 +01:00
_queue.py gatelock 0.13.0: locks stay clickable together 2026-11-11 12:49:40 +01:00
_randr.py gatelock: scope pylint to source on 4.0.8 and clear the residue it grades 2026-09-12 19:15:39 +02:00
_recovery_grab.py gatelock 0.13.0: locks stay clickable together 2026-11-11 12:49:40 +01:00
_recovery_types.py gatelock 0.13.0: locks stay clickable together 2026-11-11 12:49:40 +01:00
_recovery.py gatelock 0.13.0: locks stay clickable together 2026-11-11 12:49:40 +01:00
_root.py Pin pre-commit's ruff to 0.16.7 and satisfy the CPY001 it brings 2026-09-12 18:11:24 +02:00
_scrollable.py gatelock 0.8.1: public recovery/detector handles; declarative types import from _config 2026-09-12 19:41:13 +02:00
_scrollfit.py gatelock: scope pylint to source on 4.0.8 and clear the residue it grades 2026-09-12 19:15:39 +02:00
_scrollkeys.py Pin pre-commit's ruff to 0.16.7 and satisfy the CPY001 it brings 2026-09-12 18:11:24 +02:00
_stepback.py gatelock 0.13.0: locks stay clickable together 2026-11-11 12:49:40 +01:00
_surface_types.py Pin pre-commit's ruff to 0.16.7 and satisfy the CPY001 it brings 2026-09-12 18:11:24 +02:00
_surfaces_focus.py Pin pre-commit's ruff to 0.16.7 and satisfy the CPY001 it brings 2026-09-12 18:11:24 +02:00
_surfaces.py gatelock 0.13.0: locks stay clickable together 2026-11-11 12:49:40 +01:00
_textmirror.py Pin pre-commit's ruff to 0.16.7 and satisfy the CPY001 it brings 2026-09-12 18:11:24 +02:00
_theme.py gatelock 0.8.0: LockConfig as behaviour + GrabPolicy + theme records; pylint at 10 2026-09-12 19:36:31 +02:00
_userintent.py Pin pre-commit's ruff to 0.16.7 and satisfy the CPY001 it brings 2026-09-12 18:11:24 +02:00
_vt.py Pin pre-commit's ruff to 0.16.7 and satisfy the CPY001 it brings 2026-09-12 18:11:24 +02:00
_widget_fills.py gatelock 0.8.1: public recovery/detector handles; declarative types import from _config 2026-09-12 19:41:13 +02:00
_window.py gatelock 0.13.0: locks stay clickable together 2026-11-11 12:49:40 +01:00
_xlib.py gatelock 0.13.0: locks stay clickable together 2026-11-11 12:49:40 +01:00
_xrandr.py Pin pre-commit's ruff to 0.16.7 and satisfy the CPY001 it brings 2026-09-12 18:11:24 +02:00
corner_strip.py gatelock 0.12.0: corner strip, 180 s wait 2026-11-07 08:09:40 +01:00
log_integrity.py Pin pre-commit's ruff to 0.16.7 and satisfy the CPY001 it brings 2026-09-12 18:11:24 +02:00
morning_session.py gatelock 0.12.0: corner strip, 180 s wait 2026-11-07 08:09:40 +01:00
night_lockdown.py gatelock 0.10.0: night_lockdown.evening_lockdown_today, so earner gates stop re-arming after tonight's lockdown 2026-10-17 18:23:48 +02:00
widget_group.py Pin pre-commit's ruff to 0.16.7 and satisfy the CPY001 it brings 2026-09-12 18:11:24 +02:00
widgets.py gatelock 0.8.1: public recovery/detector handles; declarative types import from _config 2026-09-12 19:41:13 +02:00