diff --git a/include/hikari/pointer_config.h b/include/hikari/pointer_config.h index 96ade39..727bb99 100644 --- a/include/hikari/pointer_config.h +++ b/include/hikari/pointer_config.h @@ -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) diff --git a/share/man/man1/hikari.md b/share/man/man1/hikari.md index 5b1a462..762f037 100644 --- a/share/man/man1/hikari.md +++ b/share/man/man1/hikari.md @@ -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 diff --git a/src/configuration.c b/src/configuration.c index 9906dd7..39170d5 100644 --- a/src/configuration.c +++ b/src/configuration.c @@ -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)) { diff --git a/src/pointer.c b/src/pointer.c index d4698e1..41cab86 100644 --- a/src/pointer.c +++ b/src/pointer.c @@ -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)); diff --git a/src/pointer_config.c b/src/pointer_config.c index 34f5f19..b4ba2bc 100644 --- a/src/pointer_config.c +++ b/src/pointer_config.c @@ -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);