From 72968e5a8e6b2aa8db24fe12082e4d3afd0f29a5 Mon Sep 17 00:00:00 2001 From: meeeee3 <68552560+meeeee3@users.noreply.github.com> Date: Fri, 19 Dec 2025 14:19:10 +0800 Subject: [PATCH] feat: add wheel scroll factor --- src/config/parse_config.h | 6 +++++- src/config/preset.h | 2 ++ src/mango.c | 9 +++++---- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/config/parse_config.h b/src/config/parse_config.h index 4b944d1..6174b4b 100644 --- a/src/config/parse_config.h +++ b/src/config/parse_config.h @@ -261,7 +261,7 @@ typedef struct { uint32_t click_method; uint32_t send_events_mode; uint32_t button_map; - + double axis_scroll_factor; int smartgaps; uint32_t gappih; uint32_t gappiv; @@ -1451,6 +1451,8 @@ void parse_option(Config *config, char *key, char *value) { config->send_events_mode = atoi(value); } else if (strcmp(key, "button_map") == 0) { config->button_map = atoi(value); + } else if (strcmp(key, "axis_scroll_factor") == 0) { + config->axis_scroll_factor = atof(value); } else if (strcmp(key, "gappih") == 0) { config->gappih = atoi(value); } else if (strcmp(key, "gappiv") == 0) { @@ -2713,6 +2715,7 @@ void override_config(void) { click_method = CLAMP_INT(config.click_method, 0, 2); send_events_mode = CLAMP_INT(config.send_events_mode, 0, 2); button_map = CLAMP_INT(config.button_map, 0, 1); + axis_scroll_factor = CLAMP_FLOAT(config.axis_scroll_factor, 0.1f, 10.0f); // 外观设置 gappih = CLAMP_INT(config.gappih, 0, 1000); @@ -2822,6 +2825,7 @@ void set_value_default() { config.exchange_cross_monitor = exchange_cross_monitor; config.scratchpad_cross_monitor = scratchpad_cross_monitor; config.focus_cross_tag = focus_cross_tag; + config.axis_scroll_factor = axis_scroll_factor; config.view_current_to_back = view_current_to_back; config.single_scratchpad = single_scratchpad; config.xwayland_persistence = xwayland_persistence; diff --git a/src/config/preset.h b/src/config/preset.h index 52c26a5..402a062 100644 --- a/src/config/preset.h +++ b/src/config/preset.h @@ -178,6 +178,8 @@ LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER enum libinput_config_click_method click_method = LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS; +double axis_scroll_factor = 1.0; + /* You can choose between: LIBINPUT_CONFIG_SEND_EVENTS_ENABLED LIBINPUT_CONFIG_SEND_EVENTS_DISABLED diff --git a/src/mango.c b/src/mango.c index c6df704..68fa155 100644 --- a/src/mango.c +++ b/src/mango.c @@ -1718,10 +1718,11 @@ axisnotify(struct wl_listener *listener, void *data) { * implemented checking the event's orientation and the delta of the event */ /* Notify the client with pointer focus of the axis event. */ - wlr_seat_pointer_notify_axis(seat, // 滚轮事件发送给客户端也就是窗口 - event->time_msec, event->orientation, - event->delta, event->delta_discrete, - event->source, event->relative_direction); + wlr_seat_pointer_notify_axis( + seat, // 滚轮事件发送给客户端也就是窗口 + event->time_msec, event->orientation, event->delta * axis_scroll_factor, + roundf(event->delta_discrete * axis_scroll_factor), event->source, + event->relative_direction); } int ongesture(struct wlr_pointer_swipe_end_event *event) {