Fix #9904
This commit is contained in:
parent
77f2fef6a7
commit
6b9d449b0d
4 changed files with 10 additions and 2 deletions
|
|
@ -257,6 +257,8 @@ Detailed list of changes
|
||||||
|
|
||||||
- Add an option to :opt:`focus_follows_mouse` to only switch focus on drops rather than movement (:pull:`9896`)
|
- Add an option to :opt:`focus_follows_mouse` to only switch focus on drops rather than movement (:pull:`9896`)
|
||||||
|
|
||||||
|
- Fix setting :opt:`momentum_scroll` to zero not *fully* disabling momentum scrolling (:iss:`9904`)
|
||||||
|
|
||||||
|
|
||||||
0.46.2 [2026-03-21]
|
0.46.2 [2026-03-21]
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
|
||||||
1
glfw/internal.h
vendored
1
glfw/internal.h
vendored
|
|
@ -917,6 +917,7 @@ void glfw_handle_scroll_event_for_momentum(_GLFWwindow *w, const GLFWScrollEvent
|
||||||
#else
|
#else
|
||||||
#define momentum_scroll_gesture_detection_timeout_ms 0
|
#define momentum_scroll_gesture_detection_timeout_ms 0
|
||||||
#endif
|
#endif
|
||||||
|
bool glfw_is_momentum_scroll_enabled(void);
|
||||||
|
|
||||||
char* _glfw_strdup(const char* source);
|
char* _glfw_strdup(const char* source);
|
||||||
|
|
||||||
|
|
|
||||||
7
glfw/momentum-scroll.c
vendored
7
glfw/momentum-scroll.c
vendored
|
|
@ -176,13 +176,18 @@ is_suitable_for_momentum(void) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
glfw_is_momentum_scroll_enabled(void) {
|
||||||
|
return s.friction > 0;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
glfw_handle_scroll_event_for_momentum(
|
glfw_handle_scroll_event_for_momentum(
|
||||||
_GLFWwindow *w, const GLFWScrollEvent *ev, bool stopped, bool is_finger_based
|
_GLFWwindow *w, const GLFWScrollEvent *ev, bool stopped, bool is_finger_based
|
||||||
) {
|
) {
|
||||||
const bool is_synthetic_momentum_start_event = stopped && momentum_scroll_gesture_detection_timeout_ms;
|
const bool is_synthetic_momentum_start_event = stopped && momentum_scroll_gesture_detection_timeout_ms;
|
||||||
if (!w) { cancel_existing_scroll(true); return; }
|
if (!w) { cancel_existing_scroll(true); return; }
|
||||||
if (!is_finger_based || ev->offset_type != GLFW_SCROLL_OFFEST_HIGHRES || s.friction < 0 || s.friction >= 1) {
|
if (!is_finger_based || ev->offset_type != GLFW_SCROLL_OFFEST_HIGHRES || !glfw_is_momentum_scroll_enabled()) {
|
||||||
if (ev->x_offset != 0 || ev->y_offset != 0) _glfwInputScroll(w, ev);
|
if (ev->x_offset != 0 || ev->y_offset != 0) _glfwInputScroll(w, ev);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
2
glfw/x11_window.c
vendored
2
glfw/x11_window.c
vendored
|
|
@ -1513,7 +1513,7 @@ handle_xi_motion_event(_GLFWwindow *window, XIDeviceEvent *de) {
|
||||||
};
|
};
|
||||||
|
|
||||||
// For high-resolution, finger-based scrolling, use timer-based momentum scrolling
|
// For high-resolution, finger-based scrolling, use timer-based momentum scrolling
|
||||||
if (d->is_finger_based && type == GLFW_SCROLL_OFFEST_HIGHRES) {
|
if (d->is_finger_based && type == GLFW_SCROLL_OFFEST_HIGHRES && glfw_is_momentum_scroll_enabled()) {
|
||||||
// Reset the timer on each scroll event
|
// Reset the timer on each scroll event
|
||||||
x11_cancel_momentum_scroll_timer();
|
x11_cancel_momentum_scroll_timer();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue