Compare commits

...
Author SHA1 Message Date
DeeJanuzandClaude Opus 5.5 de25633f87 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 <noreply@anthropic.com>
2026-10-03 21:17:49 -06:00
DeeJanuzandClaude Opus 5.5 53a1836dbb Merge branch reset-button (a reset button next to each screen's grab bar, clickable in VR games) into experimental
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 21:15:51 -06:00
2 changed files with 7 additions and 5 deletions

No files matched your search

+4 -4
View File
@@ -1,6 +1,6 @@
# Controller desktop click stability # 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 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 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 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; existing behavior. A motion onto another desktop monitor starts a drag;
cross-monitor motion is not stabilized. 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 ```sh
input/ft-clickctl status input/ft-clickctl status
input/ft-clickctl threshold 8 input/ft-clickctl threshold 32
input/ft-clickctl threshold 0 # disable without a restart 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, hardware validation must check small controls, intentional text selection,
long presses, cross-monitor dragging and simultaneous mouse use. The existing long presses, cross-monitor dragging and simultaneous mouse use. The existing
renderer laser remains tracked; this change stabilizes desktop input rather 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. Run `scripts/test-controller-click.sh` for the isolated gesture-state tests.
+3 -1
View File
@@ -795,7 +795,9 @@ static bool setup_dmabuf(struct server *s) {
int main(int argc, char **argv) { int main(int argc, char **argv) {
struct server s = {0}; 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; for (int i = 0; i < MAX_SCREENS; ++i) s.scale[i] = 1;
s.kb_screen = -1; s.kb_screen = -1;
s.rate[FT_FOCUSED] = 0, s.rate[FT_IN_VIEW] = 15, s.rate[FT_HIDDEN] = 1; s.rate[FT_FOCUSED] = 0, s.rate[FT_IN_VIEW] = 15, s.rate[FT_HIDDEN] = 1;