From de25633f873e43ec40298d25e88fe54747f3df06 Mon Sep 17 00:00:00 2001 From: DeeJanuz <45082401+DeeJanuz@users.noreply.github.com> Date: Sat, 3 Oct 2026 21:17:49 -0600 Subject: [PATCH] Click stability: 32 logical pixels by default, not 8 8 is about 0.2 degrees on a 3.4 m wide 3440-pixel screen 2 m away, so a trigger press turned into a drag unless the hand was very still. 32 (about 0.9 degrees) felt much better in the headset (2026-10-03). Co-Authored-By: Claude Opus 5.5 --- docs/controller-click-stability.md | 8 ++++---- screens/compositor.c | 4 +++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/controller-click-stability.md b/docs/controller-click-stability.md index 5539ced..a7622ad 100644 --- a/docs/controller-click-stability.md +++ b/docs/controller-click-stability.md @@ -1,6 +1,6 @@ # Controller desktop click stability -Trigger presses reach KDE immediately, but controller motion within 8 logical +Trigger presses reach KDE immediately, but controller motion within 32 logical pixels of the press stays at that position until release. Releasing without a motion outside this zone delivers the click at the original position, even if the hand moved during release. Moving outside the zone begins a normal drag immediately; returning to @@ -13,11 +13,11 @@ floating-app title-bar carrying are unaffected. Multi-button gestures keep their existing behavior. A motion onto another desktop monitor starts a drag; cross-monitor motion is not stabilized. -CLI (runtime preferences, reset to 8 on desktop restart): +CLI (runtime preferences, reset to 32 on desktop restart): ```sh input/ft-clickctl status -input/ft-clickctl threshold 8 +input/ft-clickctl threshold 32 input/ft-clickctl threshold 0 # disable without a restart ``` @@ -29,6 +29,6 @@ This is a separate contribution from desktop mouse/controller ownership. Its hardware validation must check small controls, intentional text selection, long presses, cross-monitor dragging and simultaneous mouse use. The existing renderer laser remains tracked; this change stabilizes desktop input rather -than smoothing the visual laser. Default threshold is a starting point to test. +than smoothing the visual laser. The default was 8 at first. That's about 0.2° on a 3.4 m wide 3440-pixel screen 2 m away, and clicking took a very still hand, so it's 32 (about 0.9°) since 2026-10-03. Run `scripts/test-controller-click.sh` for the isolated gesture-state tests. diff --git a/screens/compositor.c b/screens/compositor.c index c582903..e499e4c 100644 --- a/screens/compositor.c +++ b/screens/compositor.c @@ -795,7 +795,9 @@ static bool setup_dmabuf(struct server *s) { int main(int argc, char **argv) { struct server s = {0}; - s.controller_click.threshold = 8; + // About 0.9 degrees on a 3.4 m wide 3440-pixel screen 2 m away; 8 (the first default, + // about 0.2 degrees) needed a very still hand to click (headset test 2026-10-03). + s.controller_click.threshold = 32; for (int i = 0; i < MAX_SCREENS; ++i) s.scale[i] = 1; s.kb_screen = -1; s.rate[FT_FOCUSED] = 0, s.rate[FT_IN_VIEW] = 15, s.rate[FT_HIDDEN] = 1;