This patch adds 3 new options to weston.ini to allow the user to change default constant_accel_factor, min_accel_factor and max_accel_factor. If no options are set, it falls back using defaults as it did before.
v2: create weston_config_section_get_double and use it instead of manualy converting string to double. v3: add default values in weston_config_get_double instead of using conditionals. --- shared/config-parser.c | 26 ++++++++++++++++++++++++++ shared/config-parser.h | 4 ++++ src/evdev-touchpad.c | 40 +++++++++++++++++++++++++++++++++++----- weston.ini | 5 +++++ 4 files changed, 70 insertions(+), 5 deletions(-) diff --git a/shared/config-parser.c b/shared/config-parser.c index 4e6cf7f..f98209c 100644 --- a/shared/config-parser.c +++ b/shared/config-parser.c @@ -337,6 +337,32 @@ weston_config_section_get_uint(struct weston_config_section *section, WL_EXPORT int +weston_config_section_get_double(struct weston_config_section *section, + const char *key, + double *value, double default_value) +{ + struct weston_config_entry *entry; + char *end; + + entry = config_section_get_entry(section, key); + if (entry == NULL) { + *value = default_value; + errno = ENOENT; + return -1; + } + + *value = strtod(entry->value, &end); + if (*end != '\0') { + *value = default_value; + errno = EINVAL; + return -1; + } + + return 0; +} + +WL_EXPORT +int weston_config_section_get_string(struct weston_config_section *section, const char *key, char **value, const char *default_value) diff --git a/shared/config-parser.h b/shared/config-parser.h index 794e09c..410a7ef 100644 --- a/shared/config-parser.h +++ b/shared/config-parser.h @@ -88,6 +88,10 @@ weston_config_section_get_uint(struct weston_config_section *section, const char *key, uint32_t *value, uint32_t default_value); int +weston_config_section_get_double(struct weston_config_section *section, + const char *key, + double *value, double default_value); +int weston_config_section_get_string(struct weston_config_section *section, const char *key, char **value, diff --git a/src/evdev-touchpad.c b/src/evdev-touchpad.c index 53300ce..e727e49 100644 --- a/src/evdev-touchpad.c +++ b/src/evdev-touchpad.c @@ -26,10 +26,12 @@ #include <math.h> #include <string.h> #include <stdbool.h> +#include <unistd.h> #include <linux/input.h> #include "filter.h" #include "evdev.h" +#include "../shared/config-parser.h" /* Default values */ #define DEFAULT_CONSTANT_ACCEL_NUMERATOR 50 @@ -670,6 +672,38 @@ struct evdev_dispatch_interface touchpad_interface = { touchpad_destroy }; +static void +touchpad_parse_config(struct touchpad_dispatch *touchpad, double *diagonal) +{ + struct weston_config *config; + struct weston_config_section *s; + int config_fd; + + double constant_accel_factor; + double min_accel_factor; + double max_accel_factor; + + config_fd = open_config_file("weston.ini"); + config = weston_config_parse(config_fd); + close(config_fd); + + s = weston_config_get_section(config, "touchpad", NULL, NULL); + weston_config_section_get_double(s, "constant_accel_factor", + &constant_accel_factor, + DEFAULT_CONSTANT_ACCEL_NUMERATOR); + weston_config_section_get_double(s, "min_accel_factor", + &min_accel_factor, + DEFAULT_MIN_ACCEL_FACTOR); + weston_config_section_get_double(s, "max_accel_factor", + &max_accel_factor, + DEFAULT_MAX_ACCEL_FACTOR); + + touchpad->constant_accel_factor = + constant_accel_factor / *diagonal; + touchpad->min_accel_factor = min_accel_factor; + touchpad->max_accel_factor = max_accel_factor; +} + static int touchpad_init(struct touchpad_dispatch *touchpad, struct evdev_device *device) @@ -710,11 +744,7 @@ touchpad_init(struct touchpad_dispatch *touchpad, height = abs(device->abs.max_y - device->abs.min_y); diagonal = sqrt(width*width + height*height); - touchpad->constant_accel_factor = - DEFAULT_CONSTANT_ACCEL_NUMERATOR / diagonal; - - touchpad->min_accel_factor = DEFAULT_MIN_ACCEL_FACTOR; - touchpad->max_accel_factor = DEFAULT_MAX_ACCEL_FACTOR; + touchpad_parse_config(touchpad, &diagonal); touchpad->hysteresis.margin_x = diagonal / DEFAULT_HYSTERESIS_MARGIN_DENOMINATOR; diff --git a/weston.ini b/weston.ini index f2abceb..ff0f3ba 100644 --- a/weston.ini +++ b/weston.ini @@ -57,3 +57,8 @@ path=/usr/libexec/weston-keyboard #name=X1 #mode=1024x768 #transform=flipped-270 + +#[touchpad] +#constant_accel_factor = 50 +#min_accel_factor = 0.16 +#max_accel_factor = 1.0 -- 1.8.3.4 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel