mirror of
https://github.com/Droid-Deck/DroidDeck.git
synced 2026-11-11 19:11:08 +00:00
* gamescope: a confine is relative only while it holds the X pointer Patch 0128 made every hidden-cursor confine relative. Games that hide the system cursor, draw their own and confine the pointer to their window then took the host lock, and a direct touch drag became camera motion with no button held, so cards and items could not be dragged. A confine now goes relative once the X pointer stays away from the seat position while input moves, as when a game recentres it or clips it to a small rectangle, and returns to absolute when the pointer follows again or the confine ends. Locks and the warp follow rule are unchanged. * gamescope: a constraint without a hint is relative only while the game holds the X pointer Xwayland turns a hidden-cursor grab into a lock with no cursor position hint, so the confine-only rule never applied to games that draw their own cursor (Stardew Valley, Balatro). A hinted constraint is relative at once, as upstream. An unhinted lock or confine goes relative once the X pointer stops following the seat's motion, which a recentring or clipping game does and a drawn-cursor game does not. * gamescope: a pointer constraint is relative only while the game holds the X pointer Stardew Valley's grab with a hidden cursor becomes an Xwayland lock with a cursor position hint, which upstream made relative at once. Without relative mode that lock still follows gamescope's relative motion and touches still place the pointer, so the hold rule now decides for every constraint, hinted or not. * gamescope: a hinted lock starts relative and is released once the X pointer follows Releasing a hinted lock only through the hold rule let a recentring game's first touch swipe press the button. A hinted lock now starts relative as upstream and is released after 30 moving frames on which the X pointer follows the motion gamescope sends, counted from the relative motion while the seat is locked. * gamescope: count away frames within one half-second window * gamescope: a hint that arrives with the game's first warp starts the lock relative * fix(input): end the touch press when a program locks the pointer mid-swipe A game that only shows its pointer lock after its first warp took the first swipe as an absolute drag, with the button held until the finger lifted. The first locked move now ends the forwarded touch before sending deltas. * gamescope: a new focus window or constraint starts its own pointer hold A held state from one constrained window carried over to the next one when focus moved before a reset frame. Track the input focus window and the constraint, and restart the hold when either changes. * gamescope: read the pointer constraint under the wlserver lock GetCursorConstraint asserts the lock is held, so the hold tracker aborted as soon as a program constrained the pointer. * fix(input): a mid-swipe pointer lock ends the touch but keeps a held button The first locked move cancelled the whole direct-touch hold, releasing a right button held by a long press. It now cancels only the forwarded touch; the held button is released when the finger lifts, as before. * fix(input): extra fingers during a locked swipe stay out of the cancelled touch Once a locked swipe has ended the forwarded touch, a second finger restarted it with a new touch-down while the swipe carried on as relative motion. Extra fingers are now ignored until the swipe ends; the final lift still releases a held button. * fix(input): a swipe that ended its touch stays closed until the finger lifts