зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1008772 part.1 tabs should handle non-printable keys with keydown event handlers in the system group rather than keypress event handlers in the normal group r=smaug+enndeakin
This commit is contained in:
Родитель
2ad17a72df
Коммит
c29c2b90ca
|
@ -2885,7 +2885,7 @@
|
|||
onget="return this.mCurrentBrowser.isSyntheticDocument;"
|
||||
readonly="true"/>
|
||||
|
||||
<method name="_handleKeyEvent">
|
||||
<method name="_handleKeyDownEvent">
|
||||
<parameter name="aEvent"/>
|
||||
<body><![CDATA[
|
||||
if (!aEvent.isTrusted) {
|
||||
|
@ -2896,21 +2896,44 @@
|
|||
if (aEvent.altKey)
|
||||
return;
|
||||
|
||||
// Don't check if the event was already consumed because tab
|
||||
// navigation should always work for better user experience.
|
||||
|
||||
if (aEvent.ctrlKey && aEvent.shiftKey && !aEvent.metaKey) {
|
||||
switch (aEvent.keyCode) {
|
||||
case aEvent.DOM_VK_PAGE_UP:
|
||||
this.moveTabBackward();
|
||||
aEvent.stopPropagation();
|
||||
aEvent.preventDefault();
|
||||
return;
|
||||
case aEvent.DOM_VK_PAGE_DOWN:
|
||||
this.moveTabForward();
|
||||
aEvent.stopPropagation();
|
||||
aEvent.preventDefault();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef XP_MACOSX
|
||||
if (aEvent.ctrlKey && !aEvent.shiftKey && !aEvent.metaKey &&
|
||||
aEvent.keyCode == KeyEvent.DOM_VK_F4 &&
|
||||
!this.mCurrentTab.pinned) {
|
||||
this.removeCurrentTab({animate: true});
|
||||
aEvent.preventDefault();
|
||||
}
|
||||
#endif
|
||||
]]></body>
|
||||
</method>
|
||||
|
||||
<method name="_handleKeyPressEvent">
|
||||
<parameter name="aEvent"/>
|
||||
<body><![CDATA[
|
||||
if (!aEvent.isTrusted) {
|
||||
// Don't let untrusted events mess with tabs.
|
||||
return;
|
||||
}
|
||||
|
||||
if (aEvent.altKey)
|
||||
return;
|
||||
|
||||
// We need to take care of FAYT-watching as long as the findbar
|
||||
// isn't initialized. The checks on aEvent are copied from
|
||||
// _shouldFastFind (see findbar.xml).
|
||||
|
@ -2940,17 +2963,8 @@
|
|||
if (window.getComputedStyle(this, null).direction == "ltr")
|
||||
offset *= -1;
|
||||
this.tabContainer.advanceSelectedTab(offset, true);
|
||||
aEvent.stopPropagation();
|
||||
aEvent.preventDefault();
|
||||
}
|
||||
#else
|
||||
if (aEvent.ctrlKey && !aEvent.shiftKey && !aEvent.metaKey &&
|
||||
aEvent.keyCode == KeyEvent.DOM_VK_F4 &&
|
||||
!this.mCurrentTab.pinned) {
|
||||
this.removeCurrentTab({animate: true});
|
||||
aEvent.stopPropagation();
|
||||
aEvent.preventDefault();
|
||||
}
|
||||
#endif
|
||||
]]></body>
|
||||
</method>
|
||||
|
@ -2982,8 +2996,11 @@
|
|||
<parameter name="aEvent"/>
|
||||
<body><![CDATA[
|
||||
switch (aEvent.type) {
|
||||
case "keydown":
|
||||
this._handleKeyDownEvent(aEvent);
|
||||
break;
|
||||
case "keypress":
|
||||
this._handleKeyEvent(aEvent);
|
||||
this._handleKeyPressEvent(aEvent);
|
||||
break;
|
||||
case "sizemodechange":
|
||||
if (aEvent.target == window) {
|
||||
|
@ -3050,7 +3067,9 @@
|
|||
this.mCurrentBrowser = document.getAnonymousElementByAttribute(this, "anonid", "initialBrowser");
|
||||
|
||||
this.mCurrentTab = this.tabContainer.firstChild;
|
||||
document.addEventListener("keypress", this, false);
|
||||
let els = Cc["@mozilla.org/eventlistenerservice;1"].getService(Ci.nsIEventListenerService);
|
||||
els.addSystemEventListener(document, "keydown", this, false);
|
||||
els.addSystemEventListener(document, "keypress", this, false);
|
||||
window.addEventListener("sizemodechange", this, false);
|
||||
|
||||
var uniqueId = this._generateUniquePanelID();
|
||||
|
@ -3128,7 +3147,9 @@
|
|||
this.mTabListeners[i].destroy();
|
||||
this.mTabListeners[i] = null;
|
||||
}
|
||||
document.removeEventListener("keypress", this, false);
|
||||
let els = Cc["@mozilla.org/eventlistenerservice;1"].getService(Ci.nsIEventListenerService);
|
||||
els.removeSystemEventListener(document, "keydown", this, false);
|
||||
els.removeSystemEventListener(document, "keypress", this, false);
|
||||
window.removeEventListener("sizemodechange", this, false);
|
||||
|
||||
if (gMultiProcessBrowser) {
|
||||
|
@ -4247,7 +4268,7 @@
|
|||
event.stopPropagation();
|
||||
]]></handler>
|
||||
|
||||
<handler event="keypress"><![CDATA[
|
||||
<handler event="keydown" group="system"><![CDATA[
|
||||
if (event.altKey || event.shiftKey ||
|
||||
#ifdef XP_MACOSX
|
||||
!event.metaKey)
|
||||
|
@ -4256,6 +4277,9 @@
|
|||
#endif
|
||||
return;
|
||||
|
||||
// Don't check if the event was already consumed because tab navigation
|
||||
// should work always for better user experience.
|
||||
|
||||
switch (event.keyCode) {
|
||||
case KeyEvent.DOM_VK_UP:
|
||||
this.tabbrowser.moveTabBackward();
|
||||
|
@ -4274,11 +4298,10 @@
|
|||
this.tabbrowser.moveTabToEnd();
|
||||
break;
|
||||
default:
|
||||
// Stop the keypress event for the above keyboard
|
||||
// Consume the keydown event for the above keyboard
|
||||
// shortcuts only.
|
||||
return;
|
||||
}
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
]]></handler>
|
||||
|
||||
|
|
|
@ -147,12 +147,14 @@
|
|||
return;
|
||||
}
|
||||
|
||||
// Don't check if the event was already consumed because tab
|
||||
// navigation should always work for better user experience.
|
||||
|
||||
switch (event.keyCode) {
|
||||
case event.DOM_VK_TAB:
|
||||
if (event.ctrlKey && !event.altKey && !event.metaKey)
|
||||
if (this.tabs && this.handleCtrlTab) {
|
||||
this.tabs.advanceSelectedTab(event.shiftKey ? -1 : 1, true);
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
}
|
||||
break;
|
||||
|
@ -160,7 +162,6 @@
|
|||
if (event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey)
|
||||
if (this.tabs && this.handleCtrlPageUpDown) {
|
||||
this.tabs.advanceSelectedTab(-1, true);
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
}
|
||||
break;
|
||||
|
@ -168,7 +169,6 @@
|
|||
if (event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey)
|
||||
if (this.tabs && this.handleCtrlPageUpDown) {
|
||||
this.tabs.advanceSelectedTab(1, true);
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
}
|
||||
break;
|
||||
|
@ -178,7 +178,6 @@
|
|||
var offset = window.getComputedStyle(this, "")
|
||||
.direction == "ltr" ? -1 : 1;
|
||||
this.tabs.advanceSelectedTab(offset, true);
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
}
|
||||
break;
|
||||
|
@ -188,7 +187,6 @@
|
|||
var offset = window.getComputedStyle(this, "")
|
||||
.direction == "ltr" ? 1 : -1;
|
||||
this.tabs.advanceSelectedTab(offset, true);
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
}
|
||||
break;
|
||||
|
@ -203,8 +201,12 @@
|
|||
<setter>
|
||||
<![CDATA[
|
||||
if (val != this._eventNode) {
|
||||
val.addEventListener("keypress", this, false);
|
||||
this._eventNode.removeEventListener("keypress", this, false);
|
||||
const nsIEventListenerService =
|
||||
Components.interfaces.nsIEventListenerService;
|
||||
let els = Components.classes["@mozilla.org/eventlistenerservice;1"]
|
||||
.getService(nsIEventListenerService);
|
||||
els.addSystemEventListener(val, "keydown", this, false);
|
||||
els.removeSystemEventListener(this._eventNode, "keydown", this, false);
|
||||
this._eventNode = val;
|
||||
}
|
||||
return val;
|
||||
|
@ -218,11 +220,19 @@
|
|||
case "window": this._eventNode = window; break;
|
||||
case "document": this._eventNode = document; break;
|
||||
}
|
||||
this._eventNode.addEventListener("keypress", this, false);
|
||||
const nsIEventListenerService =
|
||||
Components.interfaces.nsIEventListenerService;
|
||||
let els = Components.classes["@mozilla.org/eventlistenerservice;1"]
|
||||
.getService(nsIEventListenerService);
|
||||
els.addSystemEventListener(this._eventNode, "keydown", this, false);
|
||||
</constructor>
|
||||
|
||||
<destructor>
|
||||
this._eventNode.removeEventListener("keypress", this, false);
|
||||
const nsIEventListenerService =
|
||||
Components.interfaces.nsIEventListenerService;
|
||||
let els = Components.classes["@mozilla.org/eventlistenerservice;1"]
|
||||
.getService(nsIEventListenerService);
|
||||
els.removeSystemEventListener(this._eventNode, "keydown", this, false);
|
||||
</destructor>
|
||||
</implementation>
|
||||
</binding>
|
||||
|
@ -806,39 +816,39 @@
|
|||
]]>
|
||||
</handler>
|
||||
|
||||
<handler event="keypress" keycode="VK_LEFT">
|
||||
<handler event="keydown" keycode="VK_LEFT" group="system" preventdefault="true">
|
||||
<![CDATA[
|
||||
var direction = window.getComputedStyle(this.parentNode, null).direction;
|
||||
this.parentNode.advanceSelectedTab(direction == 'ltr' ? -1 : 1, this.arrowKeysShouldWrap);
|
||||
]]>
|
||||
</handler>
|
||||
|
||||
<handler event="keypress" keycode="VK_RIGHT">
|
||||
<handler event="keydown" keycode="VK_RIGHT" group="system" preventdefault="true">
|
||||
<![CDATA[
|
||||
var direction = window.getComputedStyle(this.parentNode, null).direction;
|
||||
this.parentNode.advanceSelectedTab(direction == 'ltr' ? 1 : -1, this.arrowKeysShouldWrap);
|
||||
]]>
|
||||
</handler>
|
||||
|
||||
<handler event="keypress" keycode="VK_UP">
|
||||
<handler event="keydown" keycode="VK_UP" group="system" preventdefault="true">
|
||||
<![CDATA[
|
||||
this.parentNode.advanceSelectedTab(-1, this.arrowKeysShouldWrap);
|
||||
]]>
|
||||
</handler>
|
||||
|
||||
<handler event="keypress" keycode="VK_DOWN">
|
||||
<handler event="keydown" keycode="VK_DOWN" group="system" preventdefault="true">
|
||||
<![CDATA[
|
||||
this.parentNode.advanceSelectedTab(1, this.arrowKeysShouldWrap);
|
||||
]]>
|
||||
</handler>
|
||||
|
||||
<handler event="keypress" keycode="VK_HOME">
|
||||
<handler event="keydown" keycode="VK_HOME" group="system" preventdefault="true">
|
||||
<![CDATA[
|
||||
this.parentNode._selectNewTab(this.parentNode.childNodes[0]);
|
||||
]]>
|
||||
</handler>
|
||||
|
||||
<handler event="keypress" keycode="VK_END">
|
||||
<handler event="keydown" keycode="VK_END" group="system" preventdefault="true">
|
||||
<![CDATA[
|
||||
var tabs = this.parentNode.childNodes;
|
||||
this.parentNode._selectNewTab(tabs[tabs.length - 1], -1);
|
||||
|
|
Загрузка…
Ссылка в новой задаче