зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1290965
- Prevent command from firing when click has prevented default on the XUL element. r=enn
MozReview-Commit-ID: 5lMw3hFCe3e --HG-- extra : rebase_source : eb722858c00720aef34c82080d567829ec0f581e
This commit is contained in:
Родитель
f796c32cc7
Коммит
45911f854e
|
@ -1753,6 +1753,12 @@ nsXULElement::ClickWithInputSource(uint16_t aInputSource, bool aIsTrustedEvent)
|
||||||
status = nsEventStatus_eIgnore; // reset status
|
status = nsEventStatus_eIgnore; // reset status
|
||||||
EventDispatcher::Dispatch(static_cast<nsIContent*>(this),
|
EventDispatcher::Dispatch(static_cast<nsIContent*>(this),
|
||||||
context, &eventClick, nullptr, &status);
|
context, &eventClick, nullptr, &status);
|
||||||
|
|
||||||
|
// If the click has been prevented, lets skip the command call
|
||||||
|
// this is how a physical click works
|
||||||
|
if (status == nsEventStatus_eConsumeNoDefault) {
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,3 +38,4 @@ support-files =
|
||||||
skip-if = os == "android"
|
skip-if = os == "android"
|
||||||
[test_bug1069772.xul]
|
[test_bug1069772.xul]
|
||||||
skip-if = os == "android"
|
skip-if = os == "android"
|
||||||
|
[test_bug1290965.xul]
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
|
||||||
|
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:h="http://www.w3.org/1999/xhtml">
|
||||||
|
<script type="application/javascript"
|
||||||
|
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
|
||||||
|
<toolbarbutton oncommand="++countera;" id="a">A</toolbarbutton>
|
||||||
|
<toolbarbutton oncommand="++counterb;" id="b">B</toolbarbutton>
|
||||||
|
<script type="text/javascript">
|
||||||
|
<![CDATA[
|
||||||
|
let aEl = document.getElementById('a');
|
||||||
|
let bEl = document.getElementById('b');
|
||||||
|
let countera = 0;
|
||||||
|
let counterb = 0;
|
||||||
|
|
||||||
|
aEl.addEventListener('click', function (aEvent) {
|
||||||
|
aEvent.preventDefault();
|
||||||
|
let cmdEvent = document.createEvent("xulcommandevent");
|
||||||
|
cmdEvent.initCommandEvent("command", true, true, window, 0,
|
||||||
|
aEvent.ctrlKey, aEvent.altKey, aEvent.shiftKey,
|
||||||
|
aEvent.metaKey, null);
|
||||||
|
aEvent.currentTarget.dispatchEvent(cmdEvent);
|
||||||
|
});
|
||||||
|
|
||||||
|
bEl.addEventListener('click', function (aEvent) {
|
||||||
|
let cmdEvent = document.createEvent("xulcommandevent");
|
||||||
|
cmdEvent.initCommandEvent("command", true, true, window, 0,
|
||||||
|
aEvent.ctrlKey, aEvent.altKey, aEvent.shiftKey,
|
||||||
|
aEvent.metaKey, null);
|
||||||
|
aEvent.currentTarget.dispatchEvent(cmdEvent);
|
||||||
|
});
|
||||||
|
|
||||||
|
bEl.click();
|
||||||
|
aEl.click();
|
||||||
|
|
||||||
|
is(countera, 1, "Counter should be one as event fires once");
|
||||||
|
is(counterb, 2, "Counter should be two as event fires twice");
|
||||||
|
]]>
|
||||||
|
</script>
|
||||||
|
</window>
|
Загрузка…
Ссылка в новой задаче