message: if on trackpad, don't mess with horizontal scrolling.
  trackpad heuristic is 'if 15 minutes of no horizontal scrollwheel events, assume user may have switched to mousewheel'
diff: @@ -131,17 +131,41 @@ export default class IndicatorScrollbar extends React.Component {
  // the harshness of the scroll behaviour. Should be a value between 0 and 1.
  const yRetention = 1.0;
  - // Check for trackpad users every so often to avoid boosting their scroll.
  + // whenever see horizontal scrolling, assume the user is on a trackpad
  + // for at least the next 15 minutes.
  + const now = new Date().getTime();
  + if (Math.abs(e.deltaX) > 0) {
  + this._likelyTrackpadUser = true;
  + this._checkAgainForTrackpad = now + (15 * 60 * 1000); // 15min
  + }
  + else {
  + // if we haven't seen any horizontal scrolling for >15 minutes, assume
  + // the user might have plugged in a mousewheel
  + if (this._likelyTrackpadUser && now >= this._checkAgainForTrackpad) {
  + this._likelyTrackpadUser = false;
  + }
  + }
  +
  + // don't mess with the horizontal scroll for trackpad users
  + // See https://github.com/vector-im/riot-web/issues/10005
  + if (this._likelyTrackpadUser) {
  + return;
  + }
  +
  + // Every 15 minutes, start checking to Check for trackpad users every so often to messing with their scroll
  // See https://github.com/vector-im/riot-web/issues/10005
  const now = new Date().getTime();
  - if (now >= this._checkAgainForTrackpad) {
  - this._likelyTrackpadUser = Math.abs(e.deltaX) > 0;
  + if (this._likelyTrackpadUser && now >= this._checkAgainForTrackpad) {
  + if (Math.abs(e.deltaX) > 0) {
  + this._likelyTrackpadUser = true;
  + }
  this._checkAgainForTrackpad = now + (15 * 60 * 1000); // 15min
  }
  - const safeToBoost = !this._likelyTrackpadUser;
  + if (this._likelyTrackpadUser) return;
  +
  + if (Math.abs(e.deltaX) <= xyThreshold) { // we are vertically scrolling.
  - if (Math.abs(e.deltaX) <= xyThreshold) {
  // HACK: We increase the amount of scroll to counteract smooth scrolling browsers.
  // Smooth scrolling browsers (Firefox) use the relative area to determine the scroll
  // amount, which means the likely small area of content results in a small amount of
  @@ -152,7 +176,7 @@ export default class IndicatorScrollbar extends React.Component {
  const additionalScroll = e.deltaY < 0 ? -50 : 50;
  // noinspection JSSuspiciousNameCombination
  - const val = Math.abs(e.deltaY) < 25 && safeToBoost ? (e.deltaY + additionalScroll) : e.deltaY;
  + const val = Math.abs(e.deltaY) < 25 ? (e.deltaY + additionalScroll) : 0;
  this._scrollElement.scrollLeft += val * yRetention;
  }
  }
  