mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
618 lines
19 KiB
XML
618 lines
19 KiB
XML
|
<?xml version="1.0"?>
|
||
|
|
||
|
<bindings id="tabBindings"
|
||
|
xmlns="http://www.mozilla.org/xbl"
|
||
|
xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||
|
xmlns:xbl="http://www.mozilla.org/xbl">
|
||
|
|
||
|
<binding id="tab-base">
|
||
|
<resources>
|
||
|
<stylesheet src="chrome://global/skin/tabbox.css"/>
|
||
|
</resources>
|
||
|
</binding>
|
||
|
|
||
|
<binding id="tabbox"
|
||
|
extends="chrome://global/content/bindings/tabbox.xml#tab-base">
|
||
|
<implementation implements="nsIDOMEventListener, nsIAccessibleProvider">
|
||
|
<property name="accessible">
|
||
|
<getter>
|
||
|
<![CDATA[
|
||
|
var accService = Components.classes["@mozilla.org/accessibilityService;1"].getService(Components.interfaces.nsIAccessibilityService);
|
||
|
return accService.createXULTabBoxAccessible(this);
|
||
|
]]>
|
||
|
</getter>
|
||
|
</property>
|
||
|
|
||
|
<property name="handleCtrlTab">
|
||
|
<setter>
|
||
|
<![CDATA[
|
||
|
this.setAttribute("handleCtrlTab", val);
|
||
|
return val;
|
||
|
]]>
|
||
|
</setter>
|
||
|
<getter>
|
||
|
<![CDATA[
|
||
|
return (this.getAttribute("handleCtrlTab") != "false");
|
||
|
]]>
|
||
|
</getter>
|
||
|
</property>
|
||
|
|
||
|
<property name="handleCtrlPageUpDown">
|
||
|
<setter>
|
||
|
<![CDATA[
|
||
|
this.setAttribute("handleCtrlPageUpDown", val);
|
||
|
return val;
|
||
|
]]>
|
||
|
</setter>
|
||
|
<getter>
|
||
|
<![CDATA[
|
||
|
return (this.getAttribute("handleCtrlPageUpDown") != "false");
|
||
|
]]>
|
||
|
</getter>
|
||
|
</property>
|
||
|
|
||
|
<property name="tabs">
|
||
|
<getter>
|
||
|
<![CDATA[
|
||
|
var tabs = this.getElementsByTagNameNS(
|
||
|
"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
|
||
|
"tabs");
|
||
|
return tabs.length ? tabs[0] : null;
|
||
|
]]>
|
||
|
</getter>
|
||
|
</property>
|
||
|
|
||
|
<property name="tabpanels">
|
||
|
<getter>
|
||
|
<![CDATA[
|
||
|
var tabpanels = this.getElementsByTagNameNS(
|
||
|
"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
|
||
|
"tabpanels");
|
||
|
return tabpanels.length ? tabpanels[0] : null;
|
||
|
]]>
|
||
|
</getter>
|
||
|
</property>
|
||
|
|
||
|
<property name="selectedIndex"
|
||
|
onget="return this.tabs ? this.tabs.selectedIndex : -1;">
|
||
|
<setter>
|
||
|
<![CDATA[
|
||
|
if (this.tabs)
|
||
|
this.tabs.selectedIndex = val;
|
||
|
return val;
|
||
|
]]>
|
||
|
</setter>
|
||
|
</property>
|
||
|
|
||
|
<property name="selectedTab"
|
||
|
onget="return this.tabs ? this.tabs.selectedItem : null;">
|
||
|
<setter>
|
||
|
<![CDATA[
|
||
|
if (val && this.tabs)
|
||
|
this.tabs.selectedItem = val;
|
||
|
return val;
|
||
|
]]>
|
||
|
</setter>
|
||
|
</property>
|
||
|
|
||
|
<property name="selectedPanel"
|
||
|
onget="return this.tabpanels ? this.tabpanels.selectedPanel : null;">
|
||
|
<setter>
|
||
|
<![CDATA[
|
||
|
if (val && this.tabpanels)
|
||
|
this.tabpanels.selectedPanel = val;
|
||
|
return val;
|
||
|
]]>
|
||
|
</setter>
|
||
|
</property>
|
||
|
|
||
|
<method name="handleEvent">
|
||
|
<parameter name="event"/>
|
||
|
<body>
|
||
|
<![CDATA[
|
||
|
if (!event.isTrusted) {
|
||
|
// Don't let untrusted events mess with tabs.
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
const handleMetaAltArrows = /Mac/.test(navigator.platform);
|
||
|
|
||
|
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);
|
||
|
event.stopPropagation();
|
||
|
event.preventDefault();
|
||
|
}
|
||
|
break;
|
||
|
case event.DOM_VK_PAGE_UP:
|
||
|
if (event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey)
|
||
|
if (this.tabs && this.handleCtrlPageUpDown) {
|
||
|
this.tabs.advanceSelectedTab(-1);
|
||
|
event.stopPropagation();
|
||
|
event.preventDefault();
|
||
|
}
|
||
|
break;
|
||
|
case event.DOM_VK_PAGE_DOWN:
|
||
|
if (event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey)
|
||
|
if (this.tabs && this.handleCtrlPageUpDown) {
|
||
|
this.tabs.advanceSelectedTab(1);
|
||
|
event.stopPropagation();
|
||
|
event.preventDefault();
|
||
|
}
|
||
|
break;
|
||
|
case event.DOM_VK_LEFT:
|
||
|
if (event.metaKey && event.altKey && !event.shiftKey && !event.ctrlKey)
|
||
|
if (this.tabbox.tabs && handleMetaAltArrows) {
|
||
|
var offset = window.getComputedStyle(this.tabbox, "")
|
||
|
.direction == "ltr" ? -1 : 1;
|
||
|
this.tabbox.tabs.advanceSelectedTab(offset);
|
||
|
event.stopPropagation();
|
||
|
event.preventDefault();
|
||
|
}
|
||
|
break;
|
||
|
case event.DOM_VK_RIGHT:
|
||
|
if (event.metaKey && event.altKey && !event.shiftKey && !event.ctrlKey)
|
||
|
if (this.tabbox.tabs && handleMetaAltArrows) {
|
||
|
var offset = window.getComputedStyle(this.tabbox, "")
|
||
|
.direction == "ltr" ? 1 : -1;
|
||
|
this.tabbox.tabs.advanceSelectedTab(offset);
|
||
|
event.stopPropagation();
|
||
|
event.preventDefault();
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
]]>
|
||
|
</body>
|
||
|
</method>
|
||
|
|
||
|
<field name="_eventNode">this</field>
|
||
|
|
||
|
<property name="eventNode" onget="return this._eventNode;">
|
||
|
<setter>
|
||
|
<![CDATA[
|
||
|
if (val != this._eventNode) {
|
||
|
val.addEventListener("keypress", this, false);
|
||
|
this._eventNode.removeEventListener("keypress", this, false);
|
||
|
this._eventNode = val;
|
||
|
}
|
||
|
return val;
|
||
|
]]>
|
||
|
</setter>
|
||
|
</property>
|
||
|
|
||
|
<constructor>
|
||
|
switch (this.getAttribute("eventnode")) {
|
||
|
case "parent": this._eventNode = this.parentNode; break;
|
||
|
case "window": this._eventNode = window; break;
|
||
|
case "document": this._eventNode = document; break;
|
||
|
}
|
||
|
this._eventNode.addEventListener("keypress", this, false);
|
||
|
</constructor>
|
||
|
|
||
|
<destructor>
|
||
|
this._eventNode.removeEventListener("keypress", this, false);
|
||
|
</destructor>
|
||
|
</implementation>
|
||
|
</binding>
|
||
|
|
||
|
<binding id="tabs"
|
||
|
extends="chrome://global/content/bindings/general.xml#basecontrol">
|
||
|
<resources>
|
||
|
<stylesheet src="chrome://global/skin/tabbox.css"/>
|
||
|
</resources>
|
||
|
|
||
|
<content>
|
||
|
<xul:spacer class="tabs-left"/>
|
||
|
<children/>
|
||
|
<xul:spacer class="tabs-right" flex="1"/>
|
||
|
</content>
|
||
|
|
||
|
<implementation implements="nsIDOMXULSelectControlElement, nsIAccessibleProvider">
|
||
|
<constructor>
|
||
|
<![CDATA[
|
||
|
// first and last tabs need to be able to have unique styles
|
||
|
// and also need to select first tab on startup.
|
||
|
if (this.firstChild)
|
||
|
this.firstChild.setAttribute("first-tab", "true");
|
||
|
if (this.lastChild)
|
||
|
this.lastChild.setAttribute("last-tab", "true");
|
||
|
this.selectedIndex = 0;
|
||
|
var o = this.getAttribute("orient");
|
||
|
if (!o)
|
||
|
this.setAttribute("orient", "horizontal");
|
||
|
]]>
|
||
|
</constructor>
|
||
|
|
||
|
<property name="accessibleType" readonly="true">
|
||
|
<getter>
|
||
|
<![CDATA[
|
||
|
return Components.interfaces.nsIAccessibleProvider.XULTabs;
|
||
|
]]>
|
||
|
</getter>
|
||
|
</property>
|
||
|
|
||
|
<property name="itemCount" readonly="true"
|
||
|
onget="return this.childNodes.length"/>
|
||
|
|
||
|
<property name="selectedIndex">
|
||
|
<getter>
|
||
|
<![CDATA[
|
||
|
const tabs = this.childNodes;
|
||
|
for (var i = 0; i < tabs.length; i++) {
|
||
|
if (tabs[i].selected)
|
||
|
return i;
|
||
|
}
|
||
|
return -1;
|
||
|
]]>
|
||
|
</getter>
|
||
|
|
||
|
<setter>
|
||
|
<![CDATA[
|
||
|
const tabs = this.childNodes;
|
||
|
if (0 <= val && val < tabs.length && !tabs[val].selected) {
|
||
|
|
||
|
for (var i = 0; i < tabs.length; i++)
|
||
|
if (i != val && tabs[i].selected)
|
||
|
tabs[i]._selected = false;
|
||
|
|
||
|
tabs[val]._selected = true;
|
||
|
|
||
|
for (var parent = this.parentNode; parent; parent = parent.parentNode) {
|
||
|
if (parent.localName == 'tabbox') {
|
||
|
var tabpanels = parent.tabpanels;
|
||
|
// This will cause an onselect event to fire for the tabpanel element.
|
||
|
if (tabpanels) {
|
||
|
// find an id
|
||
|
var linkedPanelId = tabs[val].linkedPanel;
|
||
|
var linkedPanel = linkedPanelId ? document.getElementById(linkedPanelId) : null;
|
||
|
if (linkedPanel)
|
||
|
tabpanels.selectedPanel = linkedPanel;
|
||
|
else
|
||
|
tabpanels.selectedIndex = val;
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Fire an onselect event for the tabs element.
|
||
|
var event = document.createEvent('Events');
|
||
|
event.initEvent('select', true, true);
|
||
|
this.dispatchEvent(event);
|
||
|
}
|
||
|
return val;
|
||
|
]]>
|
||
|
</setter>
|
||
|
</property>
|
||
|
|
||
|
<property name="selectedItem">
|
||
|
<getter>
|
||
|
<![CDATA[
|
||
|
const tabs = this.childNodes;
|
||
|
for (var i = 0; i < tabs.length; i++) {
|
||
|
if (tabs[i].selected)
|
||
|
return tabs[i];
|
||
|
}
|
||
|
return null;
|
||
|
]]>
|
||
|
</getter>
|
||
|
|
||
|
<setter>
|
||
|
<![CDATA[
|
||
|
if (val && !val.selected) {
|
||
|
const tabs = this.childNodes;
|
||
|
for (var i = 0; i < tabs.length; i++)
|
||
|
if (tabs[i] == val)
|
||
|
this.selectedIndex = i;
|
||
|
}
|
||
|
return val;
|
||
|
]]>
|
||
|
</setter>
|
||
|
</property>
|
||
|
|
||
|
<method name="getIndexOfItem">
|
||
|
<parameter name="item"/>
|
||
|
<body>
|
||
|
<![CDATA[
|
||
|
var children = this.childNodes;
|
||
|
var i = children.length;
|
||
|
while (i--)
|
||
|
if (children[i] == item)
|
||
|
return i;
|
||
|
return -1;
|
||
|
]]>
|
||
|
</body>
|
||
|
</method>
|
||
|
|
||
|
<method name="getItemAtIndex">
|
||
|
<parameter name="index"/>
|
||
|
<body>
|
||
|
<![CDATA[
|
||
|
var children = this.childNodes;
|
||
|
if (index >= 0 && index < children.length)
|
||
|
return children[index];
|
||
|
return null;
|
||
|
]]>
|
||
|
</body>
|
||
|
</method>
|
||
|
|
||
|
<method name="_selectNewTab">
|
||
|
<parameter name="aNewTab"/>
|
||
|
<body>
|
||
|
<![CDATA[
|
||
|
var isTabFocused = false;
|
||
|
try {
|
||
|
isTabFocused =
|
||
|
(document.commandDispatcher.focusedElement == this.selectedItem);
|
||
|
} catch (e) {}
|
||
|
this.selectedItem = aNewTab;
|
||
|
if (isTabFocused) {
|
||
|
aNewTab.focus();
|
||
|
}
|
||
|
else if (this.getAttribute("setfocus") != "false") {
|
||
|
document.commandDispatcher.advanceFocusIntoSubtree(aNewTab);
|
||
|
|
||
|
// Make sure that the focus doesn't move outside the tabbox
|
||
|
for (var parent = this.parentNode; parent; parent = parent.parentNode) {
|
||
|
if (parent.localName == "tabbox") {
|
||
|
try {
|
||
|
var el = document.commandDispatcher.focusedElement;
|
||
|
while (el && el != parent)
|
||
|
el = el.parentNode;
|
||
|
if (el != parent)
|
||
|
aNewTab.focus();
|
||
|
} catch(e) {
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
]]>
|
||
|
</body>
|
||
|
</method>
|
||
|
|
||
|
<method name="advanceSelectedTab">
|
||
|
<parameter name="aDir"/>
|
||
|
<body>
|
||
|
<![CDATA[
|
||
|
var startTab = this.selectedItem;
|
||
|
var next = aDir < 0 ? startTab.previousSibling : startTab.nextSibling;
|
||
|
|
||
|
while (next != startTab && (!next || next.getAttribute("hidden"))) {
|
||
|
if (next && next.getAttribute("hidden"))
|
||
|
next = aDir < 0 ? next.previousSibling : next.nextSibling;
|
||
|
if (!next)
|
||
|
next = aDir < 0 ? this.lastChild : this.firstChild;
|
||
|
}
|
||
|
|
||
|
if (next && next != startTab) {
|
||
|
this._selectNewTab(next);
|
||
|
}
|
||
|
]]>
|
||
|
</body>
|
||
|
</method>
|
||
|
|
||
|
<method name="appendItem">
|
||
|
<parameter name="label"/>
|
||
|
<parameter name="value"/>
|
||
|
<body>
|
||
|
<![CDATA[
|
||
|
var XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
|
||
|
var tab = document.createElementNS(XULNS, "tab");
|
||
|
tab.setAttribute("label", label);
|
||
|
tab.setAttribute("value", value);
|
||
|
this.appendChild(tab);
|
||
|
return tab;
|
||
|
]]>
|
||
|
</body>
|
||
|
</method>
|
||
|
|
||
|
<method name="insertItemAt">
|
||
|
<parameter name="index"/>
|
||
|
<parameter name="label"/>
|
||
|
<parameter name="value"/>
|
||
|
<body>
|
||
|
<![CDATA[
|
||
|
var XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
|
||
|
var tab = document.createElementNS(XULNS, "tab");
|
||
|
tab.setAttribute("label", label);
|
||
|
tab.setAttribute("value", value);
|
||
|
var before = this.getItemAtIndex(index);
|
||
|
if (before)
|
||
|
this.insertBefore(tab, before);
|
||
|
else
|
||
|
this.appendChild(tab);
|
||
|
return tab;
|
||
|
]]>
|
||
|
</body>
|
||
|
</method>
|
||
|
|
||
|
<method name="removeItemAt">
|
||
|
<parameter name="index"/>
|
||
|
<body>
|
||
|
<![CDATA[
|
||
|
var remove = this.getItemAtIndex(index);
|
||
|
if (remove)
|
||
|
this.removeChild(remove);
|
||
|
return remove;
|
||
|
]]>
|
||
|
</body>
|
||
|
</method>
|
||
|
</implementation>
|
||
|
|
||
|
<handlers>
|
||
|
<handler event="DOMMouseScroll" phase="capturing">
|
||
|
<![CDATA[
|
||
|
this.advanceSelectedTab(event.detail);
|
||
|
]]>
|
||
|
</handler>
|
||
|
</handlers>
|
||
|
</binding>
|
||
|
|
||
|
<binding id="tabs-closebutton"
|
||
|
extends="chrome://global/content/bindings/tabbox.xml#tabs">
|
||
|
<content>
|
||
|
<xul:stack>
|
||
|
<xul:spacer class="tabs-left"/>
|
||
|
<xul:toolbarbutton ondblclick="event.stopPropagation();" class="tabs-newbutton" xbl:inherits="oncommand=onnewtab,tooltiptext=tooltiptextnew"/>
|
||
|
</xul:stack>
|
||
|
<xul:hbox flex="1" style="min-width: 1px; overflow: -moz-hidden-unscrollable;">
|
||
|
<children/>
|
||
|
<xul:spacer class="tabs-right" flex="1"/>
|
||
|
</xul:hbox>
|
||
|
<xul:stack>
|
||
|
<xul:spacer class="tabs-right"/>
|
||
|
<xul:hbox class="tabs-closebutton-box" align="center" pack="end">
|
||
|
<xul:toolbarbutton ondblclick="event.stopPropagation();" class="tabs-closebutton close-button" xbl:inherits="disabled=disableclose,oncommand=onclosetab"/>
|
||
|
</xul:hbox>
|
||
|
</xul:stack>
|
||
|
</content>
|
||
|
</binding>
|
||
|
|
||
|
<binding id="tabpanels"
|
||
|
extends="chrome://global/content/bindings/tabbox.xml#tab-base">
|
||
|
<implementation implements="nsIAccessibleProvider">
|
||
|
<property name="accessibleType" readonly="true">
|
||
|
<getter>
|
||
|
<![CDATA[
|
||
|
return Components.interfaces.nsIAccessibleProvider.XULTabPanels;
|
||
|
]]>
|
||
|
</getter>
|
||
|
</property>
|
||
|
|
||
|
<field name="_selectedPanel">null</field>
|
||
|
|
||
|
<property name="selectedIndex">
|
||
|
<getter>
|
||
|
<![CDATA[
|
||
|
var indexStr = this.getAttribute("selectedIndex");
|
||
|
return indexStr ? parseInt(indexStr) : -1;
|
||
|
]]>
|
||
|
</getter>
|
||
|
|
||
|
<setter>
|
||
|
<![CDATA[
|
||
|
var panel = this._selectedPanel;
|
||
|
this._selectedPanel = this.childNodes[val];
|
||
|
this.setAttribute("selectedIndex", val);
|
||
|
if (this._selectedPanel != panel) {
|
||
|
var event = document.createEvent("Events");
|
||
|
event.initEvent("select", true, true);
|
||
|
this.dispatchEvent(event);
|
||
|
}
|
||
|
return val;
|
||
|
]]>
|
||
|
</setter>
|
||
|
</property>
|
||
|
|
||
|
<property name="selectedPanel">
|
||
|
<getter>
|
||
|
<![CDATA[
|
||
|
return this._selectedPanel;
|
||
|
]]>
|
||
|
</getter>
|
||
|
|
||
|
<setter>
|
||
|
<![CDATA[
|
||
|
var selectedIndex = -1;
|
||
|
for (var panel = val; panel != null; panel = panel.previousSibling)
|
||
|
++selectedIndex;
|
||
|
this.selectedIndex = selectedIndex;
|
||
|
return val;
|
||
|
]]>
|
||
|
</setter>
|
||
|
</property>
|
||
|
</implementation>
|
||
|
</binding>
|
||
|
|
||
|
<binding id="tab" display="xul:button"
|
||
|
extends="chrome://global/content/bindings/general.xml#control-item">
|
||
|
<resources>
|
||
|
<stylesheet src="chrome://global/skin/tabbox.css"/>
|
||
|
</resources>
|
||
|
|
||
|
<content>
|
||
|
<xul:hbox class="tab-middle box-inherit" xbl:inherits="align,dir,pack,orient,selected" flex="1">
|
||
|
<xul:image class="tab-icon" xbl:inherits="validate,src=image" anonid="tab-icon"/>
|
||
|
<xul:label class="tab-text" xbl:inherits="value=label,accesskey,crop,disabled" flex="1"/>
|
||
|
</xul:hbox>
|
||
|
</content>
|
||
|
|
||
|
<implementation implements="nsIDOMXULSelectControlItemElement, nsIAccessibleProvider">
|
||
|
<property name="accessibleType" readonly="true">
|
||
|
<getter>
|
||
|
<![CDATA[
|
||
|
return Components.interfaces.nsIAccessibleProvider.XULTab;
|
||
|
]]>
|
||
|
</getter>
|
||
|
</property>
|
||
|
|
||
|
<property name="selected" readonly="true"
|
||
|
onget="return this.getAttribute('selected') == 'true';"/>
|
||
|
|
||
|
<!-- XXX -->
|
||
|
<property name="_selected">
|
||
|
<getter>
|
||
|
return this.getAttribute("selected") == "true" ? true : false;
|
||
|
</getter>
|
||
|
<setter>
|
||
|
this.setAttribute("selected", val);
|
||
|
if (this.previousSibling) {
|
||
|
if (val)
|
||
|
this.previousSibling.setAttribute("beforeselected", val);
|
||
|
else
|
||
|
this.previousSibling.removeAttribute("beforeselected");
|
||
|
}
|
||
|
if (this.nextSibling) {
|
||
|
if (val)
|
||
|
this.nextSibling.setAttribute("afterselected", val);
|
||
|
else
|
||
|
this.nextSibling.removeAttribute("afterselected");
|
||
|
}
|
||
|
return val;
|
||
|
</setter>
|
||
|
</property>
|
||
|
|
||
|
<property name="linkedPanel" onget="return this.getAttribute('linkedpanel')"
|
||
|
onset="this.setAttribute('linkedpanel', val); return val;"/>
|
||
|
</implementation>
|
||
|
|
||
|
<handlers>
|
||
|
<handler event="click" button="0">
|
||
|
<![CDATA[
|
||
|
this.parentNode._selectNewTab(this);
|
||
|
]]>
|
||
|
</handler>
|
||
|
|
||
|
<handler event="keypress" keycode="VK_LEFT">
|
||
|
<![CDATA[
|
||
|
var direction = window.getComputedStyle(this.parentNode, null).direction;
|
||
|
this.parentNode.advanceSelectedTab(direction == 'ltr' ? -1 : 1);
|
||
|
]]>
|
||
|
</handler>
|
||
|
|
||
|
<handler event="keypress" keycode="VK_RIGHT">
|
||
|
<![CDATA[
|
||
|
var direction = window.getComputedStyle(this.parentNode, null).direction;
|
||
|
this.parentNode.advanceSelectedTab(direction == 'ltr' ? 1 : -1);
|
||
|
]]>
|
||
|
</handler>
|
||
|
|
||
|
<handler event="keypress" keycode="VK_UP">
|
||
|
<![CDATA[
|
||
|
this.parentNode.advanceSelectedTab(-1);
|
||
|
]]>
|
||
|
</handler>
|
||
|
|
||
|
<handler event="keypress" keycode="VK_DOWN">
|
||
|
<![CDATA[
|
||
|
this.parentNode.advanceSelectedTab(1);
|
||
|
]]>
|
||
|
</handler>
|
||
|
</handlers>
|
||
|
</binding>
|
||
|
|
||
|
</bindings>
|
||
|
|