Bug 1263975 - XUL scrollbox (e.g. the tab bar) should respond to pixel scrolls by pixel scrolling. r=Enn

MozReview-Commit-ID: FWSBkg9wM7r

--HG--
extra : amend_source : a872853f6801635cb695738658d8ffb0ba26d39b
This commit is contained in:
Markus Stange 2016-01-05 18:35:23 +01:00
parent 346962e281
commit 0c0bc85230

View File

@ -497,12 +497,12 @@
</implementation>
<handlers>
<handler event="DOMMouseScroll"><![CDATA[
<handler event="wheel"><![CDATA[
if (this.orient == "vertical") {
// prevent horizontal scrolling from scrolling a vertical scrollbox
if (event.axis == event.HORIZONTAL_AXIS)
return;
this.scrollByIndex(event.detail);
if (event.deltaMode == event.DOM_DELTA_PIXEL)
this.scrollByPixels(event.deltaY);
else
this.scrollByIndex(event.deltaY);
}
// We allow vertical scrolling to scroll a horizontal scrollbox
// because many users have a vertical scroll wheel but no
@ -511,12 +511,18 @@
// and mouse wheels that support simultaneous scrolling in both axes.
// We do this by scrolling only when the last two scroll events were
// on the same axis as the current scroll event.
// For diagonal scroll events we only respect the dominant axis.
else {
let isVertical = event.axis == event.VERTICAL_AXIS;
let isVertical = Math.abs(event.deltaY) > Math.abs(event.deltaX);
let delta = isVertical ? event.deltaY : event.deltaX;
let scrollByDelta = isVertical && this._isRTLScrollbox ? -delta : delta;
if (this._prevMouseScrolls.every(prev => prev == isVertical))
this.scrollByIndex(isVertical && this._isRTLScrollbox ? -event.detail :
event.detail);
if (this._prevMouseScrolls.every(prev => prev == isVertical)) {
if (event.deltaMode == event.DOM_DELTA_PIXEL)
this.scrollByPixels(scrollByDelta);
else
this.scrollByIndex(scrollByDelta);
}
if (this._prevMouseScrolls.length > 1)
this._prevMouseScrolls.shift();
@ -527,11 +533,6 @@
event.preventDefault();
]]></handler>
<handler event="MozMousePixelScroll"><![CDATA[
event.stopPropagation();
event.preventDefault();
]]></handler>
<handler event="underflow" phase="capturing"><![CDATA[
// filter underflow events which were dispatched on nested scrollboxes
if (event.target != this)