diff options
-rw-r--r-- | include/libinput-properties.h | 6 | ||||
-rw-r--r-- | man/libinput.man | 4 | ||||
-rw-r--r-- | src/xf86libinput.c | 68 |
3 files changed, 69 insertions, 9 deletions
diff --git a/include/libinput-properties.h b/include/libinput-properties.h index 004dac9..71e6208 100644 --- a/include/libinput-properties.h +++ b/include/libinput-properties.h @@ -87,6 +87,12 @@ /* Steps for the custom accel profile: FLOAT, 1 value */ #define LIBINPUT_PROP_ACCEL_CUSTOM_STEP_MOTION "libinput Accel Custom Motion Step" +/* Points for the custom accel profile: FLOAT, N values */ +#define LIBINPUT_PROP_ACCEL_CUSTOM_POINTS_SCROLL "libinput Accel Custom Scroll Points" + +/* Steps for the custom accel profile: FLOAT, 1 value */ +#define LIBINPUT_PROP_ACCEL_CUSTOM_STEP_SCROLL "libinput Accel Custom Scroll Step" + /* Natural scrolling: BOOL, 1 value */ #define LIBINPUT_PROP_NATURAL_SCROLL "libinput Natural Scrolling Enabled" diff --git a/man/libinput.man b/man/libinput.man index 689afa4..7c83ccb 100644 --- a/man/libinput.man +++ b/man/libinput.man @@ -67,6 +67,10 @@ This only applies to the custom profile. Equivalent to AccelPointsFallback but applies to the Motion acceleration function. .BI "Option \*AccelStepMotion\*q \*q" float \*q Equivalent to AccelStepFallback but applies to the Motion acceleration function. +.BI "Option \*AccelPointsScroll\*q \*q" string \*q +Equivalent to AccelPointsFallback but applies to the Scroll acceleration function. +.BI "Option \*AccelStepScroll\*q \*q" float \*q +Equivalent to AccelStepFallback but applies to the Scroll acceleration function. .TP 7 .BI "Option \*qButtonMapping\*q \*q" string \*q Sets the logical button mapping for this device, see diff --git a/src/xf86libinput.c b/src/xf86libinput.c index a465475..642f95f 100644 --- a/src/xf86libinput.c +++ b/src/xf86libinput.c @@ -181,6 +181,7 @@ struct xf86libinput { #if HAVE_LIBINPUT_CUSTOM_ACCEL struct accel_points accel_points_fallback; struct accel_points accel_points_motion; + struct accel_points accel_points_scroll; #endif unsigned char btnmap[MAX_BUTTONS + 1]; @@ -572,6 +573,17 @@ LibinputApplyConfigAccelCustom(struct xf86libinput *driver_data, goto out; } + if (driver_data->options.accel_points_scroll.step > 0 && + driver_data->options.accel_points_scroll.npoints >= 2) { + status = libinput_config_accel_set_points(accel, + LIBINPUT_ACCEL_TYPE_SCROLL, + driver_data->options.accel_points_scroll.step, + driver_data->options.accel_points_scroll.npoints, + driver_data->options.accel_points_scroll.points); + if (status != LIBINPUT_CONFIG_STATUS_SUCCESS) + goto out; + } + status = libinput_device_config_accel_apply(device, accel); success = status == LIBINPUT_CONFIG_STATUS_SUCCESS; out: @@ -2987,6 +2999,13 @@ xf86libinput_parse_accel_points_motion_option(InputInfoPtr pInfo, struct libinpu return xf86libinput_parse_accel_points_option(pInfo, device, "AccelPointsMotion"); } +static inline struct accel_points +xf86libinput_parse_accel_points_scroll_option(InputInfoPtr pInfo, struct libinput_device *device) +{ + return xf86libinput_parse_accel_points_option(pInfo, device, "AccelPointsScroll"); +} + + static inline double xf86libinput_parse_accel_step_option(InputInfoPtr pInfo, struct libinput_device *device, const char *name) { @@ -3021,6 +3040,12 @@ xf86libinput_parse_accel_step_motion_option(InputInfoPtr pInfo, struct libinput_ { return xf86libinput_parse_accel_step_option(pInfo, device, "AccelStepMotion"); } + +static inline double +xf86libinput_parse_accel_step_scroll_option(InputInfoPtr pInfo, struct libinput_device *device) +{ + return xf86libinput_parse_accel_step_option(pInfo, device, "AccelStepScroll"); +} #endif static inline BOOL @@ -3559,9 +3584,11 @@ xf86libinput_parse_options(InputInfoPtr pInfo, options->accel_profile = xf86libinput_parse_accel_profile_option(pInfo, device); #if HAVE_LIBINPUT_CUSTOM_ACCEL options->accel_points_fallback = xf86libinput_parse_accel_points_fallback_option(pInfo, device); - options->accel_points_motion = xf86libinput_parse_accel_points_motion_option(pInfo, device); options->accel_points_fallback.step = xf86libinput_parse_accel_step_fallback_option(pInfo, device); + options->accel_points_motion = xf86libinput_parse_accel_points_motion_option(pInfo, device); options->accel_points_motion.step = xf86libinput_parse_accel_step_motion_option(pInfo, device); + options->accel_points_scroll = xf86libinput_parse_accel_points_scroll_option(pInfo, device); + options->accel_points_scroll.step = xf86libinput_parse_accel_step_scroll_option(pInfo, device); #endif options->natural_scrolling = xf86libinput_parse_natscroll_option(pInfo, device); options->sendevents = xf86libinput_parse_sendevents_option(pInfo, device); @@ -4024,10 +4051,12 @@ static Atom prop_accel; static Atom prop_accel_default; static Atom prop_accel_profile_enabled; #if HAVE_LIBINPUT_CUSTOM_ACCEL -static Atom prop_accel_points_motion; static Atom prop_accel_points_fallback; -static Atom prop_accel_step_motion; static Atom prop_accel_step_fallback; +static Atom prop_accel_points_motion; +static Atom prop_accel_step_motion; +static Atom prop_accel_points_scroll; +static Atom prop_accel_step_scroll; #endif static Atom prop_accel_profile_default; static Atom prop_accel_profiles_available; @@ -4469,6 +4498,8 @@ LibinputSetPropertyAccelPoints(DeviceIntPtr dev, accel_points = &driver_data->options.accel_points_fallback; else if (atom == prop_accel_points_motion) accel_points = &driver_data->options.accel_points_motion; + else if (atom == prop_accel_points_scroll) + accel_points = &driver_data->options.accel_points_scroll; for (size_t idx = 0; idx < val->size; idx++) accel_points->points[idx] = data[idx]; @@ -4511,6 +4542,8 @@ LibinputSetPropertyAccelStep(DeviceIntPtr dev, driver_data->options.accel_points_fallback.step = *data; else if (atom == prop_accel_step_motion) driver_data->options.accel_points_motion.step = *data; + else if (atom == prop_accel_step_scroll) + driver_data->options.accel_points_scroll.step = *data; } return Success; @@ -5166,9 +5199,13 @@ LibinputSetProperty(DeviceIntPtr dev, Atom atom, XIPropertyValuePtr val, else if (atom == prop_accel_profile_enabled) rc = LibinputSetPropertyAccelProfile(dev, atom, val, checkonly); #if HAVE_LIBINPUT_CUSTOM_ACCEL - else if (atom == prop_accel_points_fallback || atom == prop_accel_points_motion) + else if (atom == prop_accel_points_fallback || + atom == prop_accel_points_motion || + atom == prop_accel_points_scroll) rc = LibinputSetPropertyAccelPoints(dev, atom, val, checkonly); - else if (atom == prop_accel_step_fallback || atom == prop_accel_step_motion) + else if (atom == prop_accel_step_fallback || + atom == prop_accel_step_motion || + atom == prop_accel_step_scroll) rc = LibinputSetPropertyAccelStep(dev, atom, val, checkonly); #endif else if (atom == prop_natural_scroll) @@ -5456,14 +5493,18 @@ LibinputInitAccelProperty(DeviceIntPtr dev, #if HAVE_LIBINPUT_CUSTOM_ACCEL float custom_points_fallback[CUSTOM_ACCEL_NPOINTS_MAX] = {0}; float custom_points_motion[CUSTOM_ACCEL_NPOINTS_MAX] = {0}; + float custom_points_scroll[CUSTOM_ACCEL_NPOINTS_MAX] = {0}; size_t custom_npoints_fallback = driver_data->options.accel_points_fallback.npoints; size_t custom_npoints_motion = driver_data->options.accel_points_motion.npoints; + size_t custom_npoints_scroll = driver_data->options.accel_points_scroll.npoints; float custom_step_fallback = driver_data->options.accel_points_fallback.step; float custom_step_motion = driver_data->options.accel_points_motion.step; + float custom_step_scroll = driver_data->options.accel_points_scroll.step; for (size_t idx = 0; idx < CUSTOM_ACCEL_NPOINTS_MAX; idx++) { custom_points_fallback[idx] = driver_data->options.accel_points_fallback.points[idx]; custom_points_motion[idx] = driver_data->options.accel_points_motion.points[idx]; + custom_points_scroll[idx] = driver_data->options.accel_points_scroll.points[idx]; } #endif @@ -5568,19 +5609,28 @@ LibinputInitAccelProperty(DeviceIntPtr dev, prop_float, 32, custom_npoints_fallback, custom_points_fallback); + prop_accel_step_fallback = LibinputMakeProperty(dev, + LIBINPUT_PROP_ACCEL_CUSTOM_STEP_FALLBACK, + prop_float, 32, 1, + &custom_step_fallback); prop_accel_points_motion = LibinputMakeProperty(dev, LIBINPUT_PROP_ACCEL_CUSTOM_POINTS_MOTION, prop_float, 32, custom_npoints_motion, custom_points_motion); - prop_accel_step_fallback = LibinputMakeProperty(dev, - LIBINPUT_PROP_ACCEL_CUSTOM_STEP_FALLBACK, - prop_float, 32, 1, - &custom_step_fallback); prop_accel_step_motion = LibinputMakeProperty(dev, LIBINPUT_PROP_ACCEL_CUSTOM_STEP_MOTION, prop_float, 32, 1, &custom_step_motion); + prop_accel_points_scroll = LibinputMakeProperty(dev, + LIBINPUT_PROP_ACCEL_CUSTOM_POINTS_SCROLL, + prop_float, 32, + custom_npoints_scroll, + custom_points_scroll); + prop_accel_step_scroll = LibinputMakeProperty(dev, + LIBINPUT_PROP_ACCEL_CUSTOM_STEP_SCROLL, + prop_float, 32, 1, + &custom_step_scroll); #endif } |