Avoid input ANR when an X11 client stops draining motion events
Root cause: touchpad drag handling calls XServer.injectPointerMoveDelta synchronously from Android input dispatch. MotionNotify is flushed through XOutputStream to ClientSocket.write, so a full X11 socket blocks the main thread and Android reports an input-dispatch ANR. The attached Terra Invicta report caught the main thread in native write via TouchpadView.handleFingerMove after three hard ANRs.\n\nThis moves absolute touchpad motion delivery to a daemon worker and coalesces deltas while a previous write is pending. It keeps socket backpressure off the UI thread and bounds queued motion without changing relative-mouse handling.\n\nEvidence paths: app/src/main/java/com/winlator/widget/TouchpadView.java:2158; app/src/main/java/com/winlator/xconnector/XOutputStream.java:113; app/src/main/java/com/winlator/xconnector/ClientSocket.java:48; app/src/main/cpp/winlator/xconnector_epoll.c:224.
Summary by CodeRabbit
- Bug Fixes
- Improved responsiveness during non-relative mouse movement by processing pointer motion asynchronously and combining queued movement.