evdev-touchpad: Set some options using weston.ini

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.
dev
Armin K 11 years ago committed by Kristian Høgsberg
parent 7ac9f73c7d
commit b502f906db
  1. 26
      shared/config-parser.c
  2. 4
      shared/config-parser.h
  3. 40
      src/evdev-touchpad.c
  4. 5
      weston.ini

@ -335,6 +335,32 @@ weston_config_section_get_uint(struct weston_config_section *section,
return 0;
}
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,

@ -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,

@ -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;

@ -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

Loading…
Cancel
Save