Fix scroll wheel for RDP clients sending high-resolution or zero-position events
Summary
Some RDP clients, notably Microsoft Remote Desktop for Mac, send wheel events with:
- (0,0) as the mouse position — MRD omits cursor coordinates for wheel events
- Sub-120 axis rotation values — macOS smooth scrolling sends high-resolution deltas (1-22 per event) instead of the standard 120 per wheel notch
This caused scrolling to be completely non-functional with MRD on both the Portal and Plasma screencast session paths.
Changes
- InputHandler.cpp: Track last known mouse position from move events and substitute it when a wheel event arrives with a null position
-
PortalSession.cpp: Switch from
NotifyPointerAxisDiscrete(integer steps, truncates sub-120 values to 0) toNotifyPointerAxis(smooth scroll, preserves sub-notch precision) -
PlasmaScreencastV1Session.cpp: Fix
wl_fixed_tconversion usingwl_fixed_from_double()(was passing raw int, making values ~256x smaller than intended) - Both session paths now convert Qt angleDelta (1/8-degree units) to degrees by dividing by 8, producing 15.0 per standard notch — matching libinput's wheel axis convention
Test plan
- Connect with Microsoft Remote Desktop for Mac — scrolling should work in both directions with natural speed
- Connect with xfreerdp/standard RDP client — verify scrolling still works correctly (standard 120-per-notch values)
- Test horizontal scrolling if client supports it
- Verify mouse position is correct during scroll (not jumping to top-left corner)
Edited by realies