зеркало из https://github.com/mozilla/gecko-dev.git
128 строки
4.0 KiB
XML
128 строки
4.0 KiB
XML
<?xml version="1.0"?>
|
|
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
|
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
|
|
|
|
|
<bindings id="toolbarBindings"
|
|
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="toolbar-menubar-autohide">
|
|
<implementation>
|
|
<constructor>
|
|
this._setInactive();
|
|
</constructor>
|
|
<destructor>
|
|
this._setActive();
|
|
</destructor>
|
|
|
|
<field name="_inactiveTimeout">null</field>
|
|
|
|
<field name="_contextMenuListener"><![CDATA[({
|
|
toolbar: this,
|
|
contextMenu: null,
|
|
|
|
get active() {
|
|
return !!this.contextMenu;
|
|
},
|
|
|
|
init(event) {
|
|
var node = event.target;
|
|
while (node != this.toolbar) {
|
|
if (node.localName == "menupopup")
|
|
return;
|
|
node = node.parentNode;
|
|
}
|
|
|
|
var contextMenuId = this.toolbar.getAttribute("context");
|
|
if (!contextMenuId)
|
|
return;
|
|
|
|
this.contextMenu = document.getElementById(contextMenuId);
|
|
if (!this.contextMenu)
|
|
return;
|
|
|
|
this.contextMenu.addEventListener("popupshown", this);
|
|
this.contextMenu.addEventListener("popuphiding", this);
|
|
this.toolbar.addEventListener("mousemove", this);
|
|
},
|
|
handleEvent(event) {
|
|
switch (event.type) {
|
|
case "popupshown":
|
|
this.toolbar.removeEventListener("mousemove", this);
|
|
break;
|
|
case "popuphiding":
|
|
case "mousemove":
|
|
this.toolbar._setInactiveAsync();
|
|
this.toolbar.removeEventListener("mousemove", this);
|
|
this.contextMenu.removeEventListener("popuphiding", this);
|
|
this.contextMenu.removeEventListener("popupshown", this);
|
|
this.contextMenu = null;
|
|
break;
|
|
}
|
|
},
|
|
})]]></field>
|
|
|
|
<method name="_setInactive">
|
|
<body><![CDATA[
|
|
this.setAttribute("inactive", "true");
|
|
]]></body>
|
|
</method>
|
|
|
|
<method name="_setInactiveAsync">
|
|
<body><![CDATA[
|
|
this._inactiveTimeout = setTimeout(function(self) {
|
|
if (self.getAttribute("autohide") == "true") {
|
|
self._inactiveTimeout = null;
|
|
self._setInactive();
|
|
}
|
|
}, 0, this);
|
|
]]></body>
|
|
</method>
|
|
|
|
<method name="_setActive">
|
|
<body><![CDATA[
|
|
if (this._inactiveTimeout) {
|
|
clearTimeout(this._inactiveTimeout);
|
|
this._inactiveTimeout = null;
|
|
}
|
|
this.removeAttribute("inactive");
|
|
]]></body>
|
|
</method>
|
|
</implementation>
|
|
|
|
<handlers>
|
|
<handler event="DOMMenuBarActive" action="this._setActive();"/>
|
|
<handler event="popupshowing" action="this._setActive();"/>
|
|
<handler event="mousedown" button="2" action="this._contextMenuListener.init(event);"/>
|
|
<handler event="DOMMenuBarInactive"><![CDATA[
|
|
if (!this._contextMenuListener.active)
|
|
this._setInactiveAsync();
|
|
]]></handler>
|
|
</handlers>
|
|
</binding>
|
|
|
|
<binding id="toolbar-drag">
|
|
<implementation>
|
|
<field name="_dragBindingAlive">true</field>
|
|
<constructor><![CDATA[
|
|
if (!this._draggableStarted) {
|
|
this._draggableStarted = true;
|
|
try {
|
|
let tmp = {};
|
|
ChromeUtils.import("resource://gre/modules/WindowDraggingUtils.jsm", tmp);
|
|
let draggableThis = new tmp.WindowDraggingElement(this);
|
|
draggableThis.mouseDownCheck = function(e) {
|
|
// Don't move while customizing.
|
|
return this._dragBindingAlive &&
|
|
this.getAttribute("customizing") != "true";
|
|
};
|
|
} catch (e) {}
|
|
}
|
|
]]></constructor>
|
|
</implementation>
|
|
</binding>
|
|
</bindings>
|