Add `accel-profile` configuration

Pointer devices should be able to configure *flat*, *adaptive* and *none* as
acceleration profiles.
This commit is contained in:
Maxim Tarasov 2020-11-26 09:23:21 +00:00
parent 502e18bb38
commit e967148e54
5 changed files with 41 additions and 0 deletions

View File

@ -14,6 +14,7 @@ struct hikari_pointer_config {
char *name;
HIKARI_OPTION(accel, double);
HIKARI_OPTION(accel_profile, enum libinput_config_accel_profile);
HIKARI_OPTION(disable_while_typing, enum libinput_config_dwt_state);
HIKARI_OPTION(middle_emulation, enum libinput_config_middle_emulation_state);
HIKARI_OPTION(natural_scrolling, bool);
@ -36,6 +37,7 @@ hikari_pointer_config_merge(struct hikari_pointer_config *pointer_config,
struct hikari_pointer_config *default_config);
HIKARI_OPTION_FUNS(pointer, accel, double)
HIKARI_OPTION_FUNS(pointer, accel_profile, enum libinput_config_accel_profile)
HIKARI_OPTION_FUNS(pointer, disable_while_typing, bool)
HIKARI_OPTION_FUNS(pointer, middle_emulation, bool);
HIKARI_OPTION_FUNS(pointer, natural_scrolling, bool)

View File

@ -964,6 +964,11 @@ are available.
Sets mouse acceleration for the pointer device to a value between **-1** and
**1**.
* **accel-profile**
Sets mouse acceleration profile for the pointer device to the given mode.
Valid values are *none*, *flat* and *adaptive*.
* **disable-while-typing**
Enable or disable *disable-while-typing* if available. This setting expects a

View File

@ -984,6 +984,32 @@ parse_pointer_config(struct hikari_pointer_config *pointer_config,
}
hikari_pointer_config_set_accel(pointer_config, accel);
} else if (!strcmp(key, "accel-profile")) {
const char *accel_profile;
if (!ucl_object_tostring_safe(cur, &accel_profile)) {
fprintf(stderr,
"configuration error: expected string \"%s\" for "
"\"accel-profile\"\n",
pointer_name);
goto done;
}
if (!strcmp(accel_profile, "none")) {
hikari_pointer_config_set_accel_profile(
pointer_config, LIBINPUT_CONFIG_ACCEL_PROFILE_NONE);
} else if (!strcmp(accel_profile, "flat")) {
hikari_pointer_config_set_accel_profile(
pointer_config, LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT);
} else if (!strcmp(accel_profile, "adaptive")) {
hikari_pointer_config_set_accel_profile(
pointer_config, LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE);
} else {
fprintf(stderr,
"configuration error: unkown \"accel-profile\" \"%s\" for \"%s\"\n",
accel_profile,
pointer_name);
goto done;
}
} else if (!strcmp(key, "scroll-method")) {
const char *scroll_method;
if (!ucl_object_tostring_safe(cur, &scroll_method)) {

View File

@ -47,6 +47,11 @@ hikari_pointer_configure(struct hikari_pointer *pointer,
libinput_device, hikari_pointer_config_get_accel(pointer_config));
}
if (hikari_pointer_config_has_accel_profile(pointer_config)) {
libinput_device_config_accel_set_profile(libinput_device,
hikari_pointer_config_get_accel_profile(pointer_config));
}
if (hikari_pointer_config_has_scroll_button(pointer_config)) {
libinput_device_config_scroll_set_button(libinput_device,
hikari_pointer_config_get_scroll_button(pointer_config));

View File

@ -16,6 +16,8 @@ hikari_pointer_config_init(
strcpy(pointer_config->name, name);
hikari_pointer_config_init_accel(pointer_config, 0);
hikari_pointer_config_init_accel_profile(
pointer_config, LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE);
hikari_pointer_config_init_disable_while_typing(pointer_config, false);
hikari_pointer_config_init_middle_emulation(
pointer_config, LIBINPUT_CONFIG_MIDDLE_EMULATION_DISABLED);
@ -40,6 +42,7 @@ hikari_pointer_config_merge(struct hikari_pointer_config *pointer_config,
#define MERGE(option) \
hikari_pointer_config_merge_##option(pointer_config, default_config);
MERGE(accel);
MERGE(accel_profile);
MERGE(disable_while_typing);
MERGE(middle_emulation);
MERGE(natural_scrolling);