Bug 655004, cancel mouse scroll event and key events for grid datepicker and trees, prevents scroll events from bubbling up in tests, r=neil

This commit is contained in:
Neil Deakin 2011-07-01 20:52:30 -04:00
parent 2a9ee7ba0c
commit 2973a0228b
4 changed files with 72 additions and 23 deletions

View File

@ -15,7 +15,10 @@
onpopuphidden="testtag_finish()"> onpopuphidden="testtag_finish()">
<datepicker id="datepicker"/> <datepicker id="datepicker"/>
<datepicker id="datepicker-popup" type="popup"/> <datepicker id="datepicker-popup" type="popup"/>
<datepicker id="datepicker-grid" type="grid"/> <hbox onDOMMouseScroll="mouseScrolled = event.getPreventDefault();"
onkeypress="pageDownScrolled = event.getPreventDefault();">
<datepicker id="datepicker-grid" type="grid"/>
</hbox>
</hbox> </hbox>
<!-- Test-only key bindings, but must not conflict with the application. --> <!-- Test-only key bindings, but must not conflict with the application. -->
@ -36,6 +39,9 @@
<script> <script>
<![CDATA[ <![CDATA[
var mouseScrolled = false;
var pageDownScrolled = false;
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
function testtag_datepickers() function testtag_datepickers()
@ -50,6 +56,16 @@ function testtag_datepickers()
function testtag_finish() function testtag_finish()
{ {
ok(!document.getElementById("datepicker-popup").open, "datepicker popup open false again"); ok(!document.getElementById("datepicker-popup").open, "datepicker popup open false again");
var dpgrid = document.getElementById("datepicker-grid");
dpgrid.focus();
synthesizeMouseScroll(dpgrid, 5, 5, { delta: 10 });
is(mouseScrolled, true, "mouse scrolled default prevented");
is(dpgrid.displayedMonth, 2, "mouse scroll changed month");
synthesizeKey("VK_PAGE_DOWN", { });
is(pageDownScrolled, true, "page down scrolled default prevented");
SimpleTest.finish(); SimpleTest.finish();
} }

View File

@ -334,11 +334,18 @@ function testtag_tree_TreeSelection_UI(tree, testid, multiple)
selection.currentIndex = 0; selection.currentIndex = 0;
tree.focus(); tree.focus();
var keyPressDefaultPrevented = 0;
function keyPressListener(event) {
keyPressDefaultPrevented++;
}
// check that cursor up and down keys navigate up and down // check that cursor up and down keys navigate up and down
// select event fires after a delay so don't expect it. The reason it fires after a delay // select event fires after a delay so don't expect it. The reason it fires after a delay
// is so that cursor navigation allows quicking skimming over a set of items without // is so that cursor navigation allows quicking skimming over a set of items without
// actually firing events in-between, improving performance. The select event will only // actually firing events in-between, improving performance. The select event will only
// be fired on the row where the cursor stops. // be fired on the row where the cursor stops.
window.addEventListener("keypress", keyPressListener, false);
synthesizeKeyExpectEvent("VK_DOWN", {}, tree, "!select", "key down"); synthesizeKeyExpectEvent("VK_DOWN", {}, tree, "!select", "key down");
testtag_tree_TreeSelection_State(tree, testid + "key down", 1, [1], 0); testtag_tree_TreeSelection_State(tree, testid + "key down", 1, [1], 0);
@ -599,6 +606,9 @@ function testtag_tree_TreeSelection_UI(tree, testid, multiple)
// restore the scroll position to the start of the page // restore the scroll position to the start of the page
synthesizeKey("VK_HOME", {}); synthesizeKey("VK_HOME", {});
window.removeEventListener("keypress", keyPressListener, false);
is(keyPressDefaultPrevented, multiple ? 63 : 40, "key press default prevented");
} }
function testtag_tree_UI_editing(tree, testid, rowInfo) function testtag_tree_UI_editing(tree, testid, rowInfo)
@ -1181,13 +1191,23 @@ function testtag_tree_mousescroll(aTree)
is(aTree.treeBoxObject.getFirstVisibleRow(), aStart, "mouse-scroll horizontal starting " + aStart + " delta " + aDelta is(aTree.treeBoxObject.getFirstVisibleRow(), aStart, "mouse-scroll horizontal starting " + aStart + " delta " + aDelta
+ " eventType " + aKind.eventType + " hasPixels " + aKind.hasPixels); + " eventType " + aKind.eventType + " hasPixels " + aKind.hasPixels);
} }
var defaultPrevented = 0;
function mouseScrollListener(event) {
defaultPrevented++;
}
window.addEventListener("DOMMouseScroll", mouseScrollListener, false);
kinds.forEach(function(aKind) { kinds.forEach(function(aKind) {
helper(2, -1, aKind); helper(2, -1, aKind);
helper(2, 1, aKind); helper(2, 1, aKind);
helper(2, -2, aKind); helper(2, -2, aKind);
helper(2, 2, aKind); helper(2, 2, aKind);
}); });
window.removeEventListener("DOMMouseScroll", mouseScrollListener, false);
is(defaultPrevented, 16, "mouse scroll event default prevented");
} }
function synthesizeColumnDrag(aTree, aMouseDownColumnNumber, aMouseUpColumnNumber, aAfter) function synthesizeColumnDrag(aTree, aMouseDownColumnNumber, aMouseUpColumnNumber, aAfter)

View File

@ -1217,7 +1217,8 @@
} }
]]> ]]>
</handler> </handler>
<handler event="DOMMouseScroll"> <handler event="MozMousePixelScroll" preventdefault="true"/>
<handler event="DOMMouseScroll" preventdefault="true">
<![CDATA[ <![CDATA[
this._increaseOrDecreaseMonth(event.detail < 0 ? -1 : 1); this._increaseOrDecreaseMonth(event.detail < 0 ? -1 : 1);
]]> ]]>
@ -1230,9 +1231,9 @@
action="this._increaseOrDecreaseDateFromEvent(event, -7);"/> action="this._increaseOrDecreaseDateFromEvent(event, -7);"/>
<handler event="keypress" keycode="VK_DOWN" <handler event="keypress" keycode="VK_DOWN"
action="this._increaseOrDecreaseDateFromEvent(event, 7);"/> action="this._increaseOrDecreaseDateFromEvent(event, 7);"/>
<handler event="keypress" keycode="VK_PAGE_UP" <handler event="keypress" keycode="VK_PAGE_UP" preventdefault="true"
action="this._increaseOrDecreaseMonth(-1);"/> action="this._increaseOrDecreaseMonth(-1);"/>
<handler event="keypress" keycode="VK_PAGE_DOWN" <handler event="keypress" keycode="VK_PAGE_DOWN" preventdefault="true"
action="this._increaseOrDecreaseMonth(1);"/> action="this._increaseOrDecreaseMonth(1);"/>
</handlers> </handlers>
</binding> </binding>

View File

@ -685,7 +685,8 @@
</implementation> </implementation>
<handlers> <handlers>
<handler event="DOMMouseScroll"> <handler event="MozMousePixelScroll" preventdefault="true"/>
<handler event="DOMMouseScroll" preventdefault="true">
<![CDATA[ <![CDATA[
if (this._editingColumn) if (this._editingColumn)
return; return;
@ -701,7 +702,7 @@
this.treeBoxObject.scrollByLines(rows); this.treeBoxObject.scrollByLines(rows);
]]> ]]>
</handler> </handler>
<handler event="MozSwipeGesture"> <handler event="MozSwipeGesture" preventdefault="true">
<![CDATA[ <![CDATA[
// Figure out which row to show // Figure out which row to show
let targetRow = 0; let targetRow = 0;
@ -754,7 +755,8 @@
return; return;
var row = this.currentIndex; var row = this.currentIndex;
var column = this.view.selection.currentColumn; var column = this.view.selection.currentColumn;
this.startEditing(row, column); if (this.startEditing(row, column))
event.preventDefault();
]]> ]]>
</handler> </handler>
#endif // XP_MACOSX #endif // XP_MACOSX
@ -789,8 +791,10 @@
} }
if (checkContainers) { if (checkContainers) {
if (this.changeOpenState(this.currentIndex, false)) if (this.changeOpenState(this.currentIndex, false)) {
event.preventDefault();
return; return;
}
else { else {
var parentIndex = this.view.getParentIndex(this.currentIndex); var parentIndex = this.view.getParentIndex(this.currentIndex);
if (parentIndex >= 0) { if (parentIndex >= 0) {
@ -799,6 +803,7 @@
} }
this.view.selection.select(parentIndex); this.view.selection.select(parentIndex);
this.treeBoxObject.ensureRowIsVisible(parentIndex); this.treeBoxObject.ensureRowIsVisible(parentIndex);
event.preventDefault();
return; return;
} }
} }
@ -809,6 +814,7 @@
if (col) { if (col) {
this.view.selection.currentColumn = col; this.view.selection.currentColumn = col;
this.treeBoxObject.ensureCellIsVisible(row, col); this.treeBoxObject.ensureCellIsVisible(row, col);
event.preventDefault();
} }
} }
]]> ]]>
@ -833,8 +839,10 @@
} }
if (checkContainers) { if (checkContainers) {
if (this.changeOpenState(row, true)) if (this.changeOpenState(row, true)) {
event.preventDefault();
return; return;
}
else { else {
var c = row + 1; var c = row + 1;
var view = this.view; var view = this.view;
@ -851,6 +859,7 @@
} }
this.view.selection.timedSelect(c, this._selectDelay); this.view.selection.timedSelect(c, this._selectDelay);
this.treeBoxObject.ensureRowIsVisible(c); this.treeBoxObject.ensureRowIsVisible(c);
event.preventDefault();
return; return;
} }
} }
@ -861,33 +870,34 @@
if (col) { if (col) {
this.view.selection.currentColumn = col; this.view.selection.currentColumn = col;
this.treeBoxObject.ensureCellIsVisible(row, col); this.treeBoxObject.ensureCellIsVisible(row, col);
event.preventDefault();
} }
} }
]]> ]]>
</handler> </handler>
<handler event="keypress" keycode="VK_UP" <handler event="keypress" keycode="VK_UP" preventdefault="true"
modifiers="accel any" action="_moveByOffset(-1, 0, event);"/> modifiers="accel any" action="_moveByOffset(-1, 0, event);"/>
<handler event="keypress" keycode="VK_DOWN" <handler event="keypress" keycode="VK_DOWN" preventdefault="true"
modifiers="accel any" action="_moveByOffset(1, this.view.rowCount - 1, event);"/> modifiers="accel any" action="_moveByOffset(1, this.view.rowCount - 1, event);"/>
<handler event="keypress" keycode="VK_UP" <handler event="keypress" keycode="VK_UP" preventdefault="true"
modifiers="accel any, shift" action="_moveByOffsetShift(-1, 0, event);"/> modifiers="accel any, shift" action="_moveByOffsetShift(-1, 0, event);"/>
<handler event="keypress" keycode="VK_DOWN" <handler event="keypress" keycode="VK_DOWN" preventdefault="true"
modifiers="accel any, shift" action="_moveByOffsetShift(1, this.view.rowCount - 1, event);"/> modifiers="accel any, shift" action="_moveByOffsetShift(1, this.view.rowCount - 1, event);"/>
<handler event="keypress" keycode="VK_PAGE_UP" <handler event="keypress" keycode="VK_PAGE_UP" preventdefault="true"
modifiers="accel any" action="_moveByPage(-1, 0, event);"/> modifiers="accel any" action="_moveByPage(-1, 0, event);"/>
<handler event="keypress" keycode="VK_PAGE_DOWN" <handler event="keypress" keycode="VK_PAGE_DOWN" preventdefault="true"
modifiers="accel any" action="_moveByPage(1, this.view.rowCount - 1, event);"/> modifiers="accel any" action="_moveByPage(1, this.view.rowCount - 1, event);"/>
<handler event="keypress" keycode="VK_PAGE_UP" <handler event="keypress" keycode="VK_PAGE_UP" preventdefault="true"
modifiers="accel any, shift" action="_moveByPageShift(-1, 0, event);"/> modifiers="accel any, shift" action="_moveByPageShift(-1, 0, event);"/>
<handler event="keypress" keycode="VK_PAGE_DOWN" <handler event="keypress" keycode="VK_PAGE_DOWN" preventdefault="true"
modifiers="accel any, shift" action="_moveByPageShift(1, this.view.rowCount - 1, event);"/> modifiers="accel any, shift" action="_moveByPageShift(1, this.view.rowCount - 1, event);"/>
<handler event="keypress" keycode="VK_HOME" <handler event="keypress" keycode="VK_HOME" preventdefault="true"
modifiers="accel any" action="_moveToEdge(0, event);"/> modifiers="accel any" action="_moveToEdge(0, event);"/>
<handler event="keypress" keycode="VK_END" <handler event="keypress" keycode="VK_END" preventdefault="true"
modifiers="accel any" action="_moveToEdge(this.view.rowCount - 1, event);"/> modifiers="accel any" action="_moveToEdge(this.view.rowCount - 1, event);"/>
<handler event="keypress" keycode="VK_HOME" <handler event="keypress" keycode="VK_HOME" preventdefault="true"
modifiers="accel any, shift" action="_moveToEdgeShift(0, event);"/> modifiers="accel any, shift" action="_moveToEdgeShift(0, event);"/>
<handler event="keypress" keycode="VK_END" <handler event="keypress" keycode="VK_END" preventdefault="true"
modifiers="accel any, shift" action="_moveToEdgeShift(this.view.rowCount - 1, event);"/> modifiers="accel any, shift" action="_moveToEdgeShift(this.view.rowCount - 1, event);"/>
<handler event="keypress"> <handler event="keypress">
<![CDATA[ <![CDATA[
@ -899,6 +909,7 @@
if (!this.view.selection.isSelected(c) || if (!this.view.selection.isSelected(c) ||
(!this.view.selection.single && this._isAccelPressed(event))) { (!this.view.selection.single && this._isAccelPressed(event))) {
this.view.selection.toggleSelect(c); this.view.selection.toggleSelect(c);
event.preventDefault();
} }
} }
else if (!this.disableKeyNavigation && event.charCode > 0 && else if (!this.disableKeyNavigation && event.charCode > 0 &&
@ -909,7 +920,8 @@
this.view.selection.timedSelect(l, this._selectDelay); this.view.selection.timedSelect(l, this._selectDelay);
this.treeBoxObject.ensureRowIsVisible(l); this.treeBoxObject.ensureRowIsVisible(l);
} }
} event.preventDefault();
}
]]> ]]>
</handler> </handler>
</handlers> </handlers>