deskflow/src/lib/platform
neon12345 22a4b135f0 Accumulate smooth scroll into full wheel clicks on server
fix(platform/ei): accumulate smooth scroll into full wheel clicks on server

On Wayland, two-finger smooth scroll events are delivered as per-frame pixel
deltas (e.g. 0.26, 0.53, 1.05 px per event).  The previous code quantized
these at the pixel level via `modf()` — any accumulated integer pixel (even
just 1) triggered a wheel event whose value was `pixels * 12`, i.e. 12, 24
or 36 units.  Because the deskflow protocol uses 120 units per standard
wheel click, these fractional clicks were silently dropped by the client
compositor and the user saw nothing on the secondary screen until a
very large/fast stroke pushed enough pixels through.

Switch to wheel-click-level accumulation: smooth scroll pixel deltas are
now scaled to fractional wheel-clicks (0.1 per pixel, keeping the 10 px ==
1 click convention) and only dispatched to the client when at least one
full 120-unit click has accumulated.  This uses `std::trunc()` (toward
zero) instead of `std::floor()` to avoid spurious clicks on negative
scroll values.

Physical mouse wheels (discrete scroll events, EI_EVENT_SCROLL_DISCRETE)
are unaffected and continue to be forwarded immediately as-is.

- `EiScreen.cpp`: replace `modf()` pixel quantization with fractional
  wheel-click accumulation using `std::trunc()`.
- `ScrollRemainder` struct comment: clarify the unit is now fractional
  wheel-clicks rather than pixels.
2026-08-10 23:31:59 +01:00
..
CMakeLists.txt build: simplify link for platform library 2026-08-06 13:59:27 +01:00
EiClipboard.cpp refactor: Use mutex to protect m_open / m_time in EiClipboard 2026-06-19 08:26:51 -04:00
EiClipboard.h refactor: Use mutex to protect m_open / m_time in EiClipboard 2026-06-19 08:26:51 -04:00
EiEventQueueBuffer.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
EiEventQueueBuffer.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
EiKeyState.cpp fix: preserve locked modifiers on ei backend 2026-08-04 14:33:05 -04:00
EiKeyState.h fix: preserve locked modifiers on ei backend 2026-08-04 14:33:05 -04:00
EiScreen.cpp Accumulate smooth scroll into full wheel clicks on server 2026-08-10 23:31:59 +01:00
EiScreen.h fix: release EIS emulation grab when idle so client screens can sleep 2026-07-20 12:52:21 -04:00
IMSWindowsClipboardFacade.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
IOSXKeyResource.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
IOSXKeyResource.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsClipboard.cpp refactor: Use mutex to protect m_time in MSWindowsClipboard 2026-06-19 08:26:51 -04:00
MSWindowsClipboard.h refactor: Use mutex to protect m_time in MSWindowsClipboard 2026-06-19 08:26:51 -04:00
MSWindowsClipboardAnyTextConverter.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsClipboardAnyTextConverter.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsClipboardBitmapConverter.cpp fix: handle top-down DIB images in clipboard bitmap converter 2026-08-03 22:17:26 +01:00
MSWindowsClipboardBitmapConverter.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsClipboardFacade.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsClipboardFacade.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsClipboardHTMLConverter.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsClipboardHTMLConverter.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsClipboardUTF16Converter.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsClipboardUTF16Converter.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsDebugOutputter.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsDebugOutputter.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsDesks.cpp refactor: replace use of insert for std::maps with try_emplace 2026-06-22 10:27:35 -04:00
MSWindowsDesks.h fix(client): restore relative cursor positions locally 2026-06-10 15:34:27 +01:00
MSWindowsEventQueueBuffer.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsEventQueueBuffer.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsHandle.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsHook.cpp fix: resync Windows keys from low-level hook state 2026-08-10 21:52:37 +01:00
MSWindowsHook.h fix: resync Windows keys from low-level hook state 2026-08-10 21:52:37 +01:00
MSWindowsKeyState.cpp fix: resync Windows keys from low-level hook state 2026-08-10 21:52:37 +01:00
MSWindowsKeyState.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsPowerManager.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsPowerManager.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsProcess.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsProcess.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsScreen.cpp fix: preserve resolved Windows key button 2026-08-10 21:52:37 +01:00
MSWindowsScreen.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsScreenSaver.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsScreenSaver.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsSession.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsSession.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsWatchdog.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
MSWindowsWatchdog.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXAutoTypes.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXClipboard.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXClipboard.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXClipboardAnyBitmapConverter.cpp chore: OSXClipboardAnyBitmapConverter remove unused includes 2025-11-07 15:54:19 -05:00
OSXClipboardAnyBitmapConverter.h refactor: IClipboard::EFormat => enum class Clipboard::Format 2025-07-31 13:41:29 +01:00
OSXClipboardAnyTextConverter.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXClipboardAnyTextConverter.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXClipboardBMPConverter.cpp fix(macos): update BMP handling to support extended headers and improve pixel offset calculation 2026-05-19 17:48:58 +01:00
OSXClipboardBMPConverter.h fix(macos): update BMP handling to support extended headers and improve pixel offset calculation 2026-05-19 17:48:58 +01:00
OSXClipboardHTMLConverter.cpp refactor: IClipboard::EFormat => enum class Clipboard::Format 2025-07-31 13:41:29 +01:00
OSXClipboardHTMLConverter.h refactor: IClipboard::EFormat => enum class Clipboard::Format 2025-07-31 13:41:29 +01:00
OSXClipboardTextConverter.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXClipboardTextConverter.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXClipboardUTF8Converter.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXClipboardUTF8Converter.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXClipboardUTF16Converter.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXClipboardUTF16Converter.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXCocoaApp.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXCocoaApp.m chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXEventQueueBuffer.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXEventQueueBuffer.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXKeyState.cpp feat(macos): preserve the left/right side of modifier keys on the client 2026-08-10 17:33:48 -04:00
OSXKeyState.h feat(macos): preserve the left/right side of modifier keys on the client 2026-08-10 17:33:48 -04:00
OSXMediaKeySupport.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXMediaKeySupport.m chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXPasteboardPeeker.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXPasteboardPeeker.m chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXPowerManager.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXPowerManager.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXScreen.h fix(mac): ensure background clicks work correctly on macOS 27 2026-07-20 12:11:22 +01:00
OSXScreen.mm fix(mac): invalidate event tap CFMachPort on disable 2026-08-08 12:31:15 -04:00
OSXScreenSaver.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXScreenSaver.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXScreenSaverControl.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXScreenSaverUtil.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXScreenSaverUtil.m refactor: Reuse compliance 2025-01-27 17:05:47 -05:00
OSXUchrKeyResource.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
OSXUchrKeyResource.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
PortalClipboard.cpp feat: clipboard support for portal remote desktop 2026-06-18 22:06:37 +01:00
PortalClipboard.h feat: clipboard support for portal remote desktop 2026-06-18 22:06:37 +01:00
PortalInputCapture.cpp fix(wayland): Corrects the cursor coordinates mapping at primary desktop 2026-08-04 09:42:22 -04:00
PortalInputCapture.h refactor: PortalInputCapture remove extra private section in header 2026-06-19 08:14:54 -04:00
PortalRemoteDesktop.cpp refactor: make PortalRemoteDesktop:handleSessionTransfer a const 2026-06-19 08:14:54 -04:00
PortalRemoteDesktop.h refactor: make PortalRemoteDesktop:handleSessionTransfer a const 2026-06-19 08:14:54 -04:00
XDGKeyUtil.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
XDGKeyUtil.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
XDGPortalRegistry.h chore: move platform/Wayland.h -> common/PlatformInfo.h 2025-11-06 09:12:18 -05:00
XDGPowerManager.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
XDGPowerManager.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
XWindowsClipboard.cpp fix: reivse scoped_lock to avoid deadlock for XWindowsClipboard 2026-07-08 13:27:50 +01:00
XWindowsClipboard.h refactor: use Mutex to protect vars in XWindowClipboard 2026-06-19 08:26:51 -04:00
XWindowsClipboardAnyBitmapConverter.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
XWindowsClipboardAnyBitmapConverter.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
XWindowsClipboardBMPConverter.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
XWindowsClipboardBMPConverter.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
XWindowsClipboardHTMLConverter.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
XWindowsClipboardHTMLConverter.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
XWindowsClipboardTextConverter.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
XWindowsClipboardTextConverter.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
XWindowsClipboardUCS2Converter.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
XWindowsClipboardUCS2Converter.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
XWindowsClipboardUTF8Converter.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
XWindowsClipboardUTF8Converter.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
XWindowsConfig.h.in chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
XWindowsEventQueueBuffer.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
XWindowsEventQueueBuffer.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
XWindowsKeyState.cpp refactor: replace use of insert for std::maps with try_emplace 2026-06-22 10:27:35 -04:00
XWindowsKeyState.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
XWindowsScreen.cpp fix: release keys before x11 kb map refresh 2026-08-10 22:07:00 +01:00
XWindowsScreen.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
XWindowsScreenSaver.cpp refactor: replace use of insert for std::maps with try_emplace 2026-06-22 10:27:35 -04:00
XWindowsScreenSaver.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
XWindowsUtil.cpp chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00
XWindowsUtil.h chore: update 'Synergy App Ltd' copyright (company renamed) 2026-06-09 00:06:11 -04:00