{"object_kind":"push","event_name":"push","before":"63f7f2a8097fa050c5e884946427011dba97781a","after":"1d4fb7ae9413bf5b1ed46f512248633c615a5033","ref":"refs/heads/main","ref_protected":false,"checkout_sha":"1d4fb7ae9413bf5b1ed46f512248633c615a5033","message":null,"user_id":9716,"user_name":"Marge Bot","user_username":"marge-bot","user_email":"","user_avatar":"https://gitlab.freedesktop.org/uploads/-/system/user/avatar/9716/marge.png","project_id":147,"project":{"id":147,"name":"libinput","description":"Input device management and event handling library","web_url":"https://gitlab.freedesktop.org/libinput/libinput","avatar_url":null,"git_ssh_url":"git@ssh.gitlab.freedesktop.org:libinput/libinput.git","git_http_url":"https://gitlab.freedesktop.org/libinput/libinput.git","namespace":"libinput","visibility_level":20,"path_with_namespace":"libinput/libinput","default_branch":"main","ci_config_path":"","homepage":"https://gitlab.freedesktop.org/libinput/libinput","url":"git@ssh.gitlab.freedesktop.org:libinput/libinput.git","ssh_url":"git@ssh.gitlab.freedesktop.org:libinput/libinput.git","http_url":"https://gitlab.freedesktop.org/libinput/libinput.git"},"commits":[{"id":"1d4fb7ae9413bf5b1ed46f512248633c615a5033","message":"touchpad: add circular scroll method for round touchpads\n\nAdd a new LIBINPUT_CONFIG_SCROLL_CIRCULAR scroll method for\nphysically round touchpads, where scrolling is triggered by finger\nmotion along the outer ring of the pad. This is the classic circular\nscroll gesture the X11 synaptics driver used to support; it fits the\nround trackpads shipped on the Panasonic Let's Note series (common\nin Japanese corporate deployments) where 2fg scroll is impractical\nbecause of pad size.\n\nBehaviour:\n\n - Zone is decided at touch-down and held for the touch's lifetime:\n a finger that starts on the ring stays a scroll touch even if it\n drifts inward; a finger that starts on the inner disc stays a\n pointer touch even if it drifts outward.\n - The scroll signal is the arc length swept on a virtual scroll\n wheel whose rim sits at the middle of the ring zone. Using a\n fixed reference radius means the same angular rotation produces\n the same scroll regardless of finger radius. The arc-length\n delta is fed through tp_filter_motion_unaccelerated() just like\n 2fg scroll's raw delta, so output is hardware-normalised and\n consistent with 2fg across pad sizes.\n - A ~1.5mm dead zone at the centre suppresses the atan2\n singularity; a finger crossing dead centre would otherwise\n fabricate a scroll spike.\n - Follows libinput's positive-y-is-down convention: clockwise\n motion scrolls down, counterclockwise scrolls up.\n - Integrated with disable-while-typing: an active circular scroll\n suppresses DWT, matching the edge/2fg scroll behaviour.\n\nHardware match is via a new ModelCircularTouchpad quirk. On matched\ndevices circular scroll is advertised exclusively and 2fg/edge\nscroll are suppressed. First and only device in this patch is the\nPanasonic Let's Note CF-SV1 (Synaptics TM3562, 06CB:CDEA), in\nquirks/50-system-panasonic.quirks. Other round touchpads can be\nadded with further quirk entries; the implementation is not\nmodel-specific.\n\nTests in test/test-touchpad.c cover: method exposure (default and\nexclusivity), ring gesture emits scroll only, direction\n(parametrised on cw/ccw and natural scroll), inner-zone drag emits\nonly pointer motion, intent lock (parametrised on start zone),\ncentre dead zone, method switching (NO_SCROLL <=> CIRCULAR), and\nlegacy POINTER_AXIS events carrying FINGER axis source. A synthetic\nLITEST_PANASONIC_CF_SV1 virtual device backs the tests; it carries\nonly the new LITEST_CIRCULAR_TOUCHPAD feature flag so existing edge\nand 2fg scroll tests do not run against it.\n\nlibinput-debug-events, libinput-list-devices, and the shared CLI\nparser learn the new method name.\n\nTested end-to-end on real hardware (Panasonic CF-SV1 under Weston\nwith Chromium).\n\nCloses: #1278\n\nCo-authored-by: Claude Opus 4.7 \nPart-of: \n","title":"touchpad: add circular scroll method for round touchpads","timestamp":"2026-08-19T23:12:17+02:00","url":"https://gitlab.freedesktop.org/libinput/libinput/-/commit/1d4fb7ae9413bf5b1ed46f512248633c615a5033","author":{"name":"Mikio L. Braun","email":"iam@miki.one"},"added":["quirks/50-system-panasonic.quirks","src/evdev-mt-touchpad-circular-scroll.c","test/litest-device-panasonic-cf-sv1.c"],"modified":["meson.build","src/evdev-mt-touchpad-buttons.c","src/evdev-mt-touchpad.c","src/evdev-mt-touchpad.h","src/libinput.c","src/libinput.h","src/quirks.c","src/quirks.h","src/util-libinput.c","test/litest.h","test/test-gestures.c","test/test-touchpad-tap.c","test/test-touchpad.c","tools/libinput-debug-events.man","tools/libinput-list-devices.c","tools/shared.c","tools/test_tool_option_parsing.py"],"removed":[]}],"total_commits_count":1,"push_options":{},"repository":{"name":"libinput","url":"git@ssh.gitlab.freedesktop.org:libinput/libinput.git","description":"Input device management and event handling library","homepage":"https://gitlab.freedesktop.org/libinput/libinput","git_http_url":"https://gitlab.freedesktop.org/libinput/libinput.git","git_ssh_url":"git@ssh.gitlab.freedesktop.org:libinput/libinput.git","visibility_level":20}}