Reveal the active pointer with a large animated cursor, or draw a fading laser trail while dragging.
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
EGO-L-004 warning
main loop sources should be removed in disable()
Main loop sources assigned in `enable()` are missing matching removals in `disable()` or its helper methods.
extension.js:693
this._laserPollId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 30, () => {
const ok = this._guard('activation-poll', () => {
this._updateLaserActivation(global.get_pointer()[2], false);
return true;
}, false);
if (ok && this._l
| Version | Status |
|---|---|
| 9 | Active |
| 8 | Rejected |
| 7 | Rejected |
| 6 | Active |
| 5 | Active |
| 4 | Active |
| 3 | Active |
| 2 | Rejected |
| 1 | Rejected |
1. What the subprocess trying to do (line 38 `keyboard.js`)? 2. Selective disable isn't allowed (line 90 `keyboard.js`).
Thanks for the review. 1. The subprocess is a passive keyboard observer for X11 only. On X11, GNOME Shell does not receive key events that go to application windows, so `captured-event` cannot see the activation shortcut or the double Control press while an app has focus. The child process runs the same file (`gjs -m keyboard.js`) and uses `Atspi.DeviceX11.add_key_watcher()`, the AT-SPI API that screen readers use. It writes one line per key event to stdout: keycode, keysym, pressed state, and a timestamp. The extension reads these lines only to match the configured shortcut, the double Control press, and the laser modifiers. Key data is not stored, logged, or sent anywhere. Events are not consumed, so applications still receive every key. It runs in a child process because AT-SPI has no API to remove a key watcher. In a separate process, `disable()` can stop it completely: `stop()` cancels the pending read, calls `force_exit()`, and closes the pipe. The observer does not start on Wayland, and it does not start when keyboard activation and the laser are both off. 2. I removed the early return from `stop()` (line 90). It now always runs the full cleanup, and every step is safe to run more than once. Version 8 contains only these changes.