On Wed, Jul 31, 2013 at 01:41:03AM +0200, Armin K wrote: > 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. > > v4: don't pass diagonal as pointer.
Oh, I committed this v4 of the patch, not the v3, but I'll still take that man page patch :) Kristian > --- > 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..81acbd0 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 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel