summaryrefslogtreecommitdiff
path: root/src/managers/input/InputManager.cpp
diff options
context:
space:
mode:
authorbea4dev <34712108+bea4dev@users.noreply.github.com>2026-02-10 23:51:51 +0900
committerGitHub <noreply@github.com>2026-02-10 14:51:51 +0000
commit171ad7d3387c8f1f090285ba913805c0bf27a342 (patch)
treea9201b284c016c2d5c86ebe56b31436389f01218 /src/managers/input/InputManager.cpp
parentf16ebef00366d2f85499196b9c7fb702b9f1c547 (diff)
input: fix kinetic scroll (#13233)
Diffstat (limited to 'src/managers/input/InputManager.cpp')
-rw-r--r--src/managers/input/InputManager.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp
index 054677fa..860a4b78 100644
--- a/src/managers/input/InputManager.cpp
+++ b/src/managers/input/InputManager.cpp
@@ -952,6 +952,22 @@ void CInputManager::onMouseWheel(IPointer::SAxisEvent e, SP<IPointer> pointer) {
int32_t deltaDiscrete = std::abs(discrete) != 0 && std::abs(discrete) < 1 ? std::copysign(1, discrete) : std::round(discrete);
g_pSeatManager->sendPointerAxis(e.timeMs, e.axis, delta, deltaDiscrete, value120, e.source, WL_POINTER_AXIS_RELATIVE_DIRECTION_IDENTICAL);
+
+ const bool deferPointerFrame = e.source == WL_POINTER_AXIS_SOURCE_FINGER || e.source == WL_POINTER_AXIS_SOURCE_CONTINUOUS;
+ if (deferPointerFrame) {
+ m_pointerAxisFramePending = true;
+ return;
+ }
+
+ m_pointerAxisFramePending = false;
+ g_pSeatManager->sendPointerFrame();
+}
+
+void CInputManager::onPointerFrame() {
+ if (!m_pointerAxisFramePending)
+ return;
+
+ m_pointerAxisFramePending = false;
g_pSeatManager->sendPointerFrame();
}