зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1473160 - Move non browser window startup and shutdown functionality into a separate JS file;r=Gijs
These are mac-only functions used to support the dock and application menu for non browser windows (anything that includes macWindow.inc.xul). Make this more straightforward by splitting the code out into a new script file that gets loaded directly by macWindow.inc.xul rather than unconditionally adding the functions and only calling them when needed. MozReview-Commit-ID: 8y3rij5vqyh --HG-- extra : rebase_source : 4e9aae343a41ed497e7da1e2c7acab3d42fea8a2
This commit is contained in:
Родитель
6f76698fc0
Коммит
916ffe84c9
|
@ -1943,102 +1943,6 @@ var gBrowserInit = {
|
|||
},
|
||||
};
|
||||
|
||||
if (AppConstants.platform == "macosx") {
|
||||
// nonBrowserWindowStartup(), nonBrowserWindowDelayedStartup(), and
|
||||
// nonBrowserWindowShutdown() are used for non-browser windows in
|
||||
// macWindow.inc.xul
|
||||
gBrowserInit.nonBrowserWindowStartup = function() {
|
||||
// Disable inappropriate commands / submenus
|
||||
var disabledItems = ["Browser:SavePage",
|
||||
"Browser:SendLink", "cmd_pageSetup", "cmd_print", "cmd_find", "cmd_findAgain",
|
||||
"viewToolbarsMenu", "viewSidebarMenuMenu", "Browser:Reload",
|
||||
"viewFullZoomMenu", "pageStyleMenu", "charsetMenu", "View:PageSource", "View:FullScreen",
|
||||
"viewHistorySidebar", "Browser:AddBookmarkAs", "Browser:BookmarkAllTabs",
|
||||
"View:PageInfo", "History:UndoCloseTab"];
|
||||
var element;
|
||||
|
||||
for (let disabledItem of disabledItems) {
|
||||
element = document.getElementById(disabledItem);
|
||||
if (element)
|
||||
element.setAttribute("disabled", "true");
|
||||
}
|
||||
|
||||
// Show menus that are only visible in non-browser windows
|
||||
let shownItems = ["menu_openLocation"];
|
||||
for (let shownItem of shownItems) {
|
||||
element = document.getElementById(shownItem);
|
||||
if (element)
|
||||
element.removeAttribute("hidden");
|
||||
}
|
||||
|
||||
// If no windows are active (i.e. we're the hidden window), disable the close, minimize
|
||||
// and zoom menu commands as well
|
||||
if (window.location.href == "chrome://browser/content/hiddenWindow.xul") {
|
||||
var hiddenWindowDisabledItems = ["cmd_close", "minimizeWindow", "zoomWindow"];
|
||||
for (let hiddenWindowDisabledItem of hiddenWindowDisabledItems) {
|
||||
element = document.getElementById(hiddenWindowDisabledItem);
|
||||
if (element)
|
||||
element.setAttribute("disabled", "true");
|
||||
}
|
||||
|
||||
// also hide the window-list separator
|
||||
element = document.getElementById("sep-window-list");
|
||||
element.setAttribute("hidden", "true");
|
||||
|
||||
// Setup the dock menu.
|
||||
let dockMenuElement = document.getElementById("menu_mac_dockmenu");
|
||||
if (dockMenuElement != null) {
|
||||
let nativeMenu = Cc["@mozilla.org/widget/standalonenativemenu;1"]
|
||||
.createInstance(Ci.nsIStandaloneNativeMenu);
|
||||
|
||||
try {
|
||||
nativeMenu.init(dockMenuElement);
|
||||
|
||||
let dockSupport = Cc["@mozilla.org/widget/macdocksupport;1"]
|
||||
.getService(Ci.nsIMacDockSupport);
|
||||
dockSupport.dockMenu = nativeMenu;
|
||||
} catch (e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (PrivateBrowsingUtils.permanentPrivateBrowsing) {
|
||||
document.getElementById("macDockMenuNewWindow").hidden = true;
|
||||
}
|
||||
if (!PrivateBrowsingUtils.enabled) {
|
||||
document.getElementById("macDockMenuNewPrivateWindow").hidden = true;
|
||||
}
|
||||
|
||||
this._delayedStartupTimeoutId = setTimeout(this.nonBrowserWindowDelayedStartup.bind(this), 0);
|
||||
};
|
||||
|
||||
gBrowserInit.nonBrowserWindowDelayedStartup = function() {
|
||||
this._delayedStartupTimeoutId = null;
|
||||
|
||||
// initialise the offline listener
|
||||
BrowserOffline.init();
|
||||
|
||||
// initialize the private browsing UI
|
||||
gPrivateBrowsingUI.init();
|
||||
|
||||
};
|
||||
|
||||
gBrowserInit.nonBrowserWindowShutdown = function() {
|
||||
let dockSupport = Cc["@mozilla.org/widget/macdocksupport;1"]
|
||||
.getService(Ci.nsIMacDockSupport);
|
||||
dockSupport.dockMenu = null;
|
||||
|
||||
// If nonBrowserWindowDelayedStartup hasn't run yet, we have no work to do -
|
||||
// just cancel the pending timeout and return;
|
||||
if (this._delayedStartupTimeoutId) {
|
||||
clearTimeout(this._delayedStartupTimeoutId);
|
||||
return;
|
||||
}
|
||||
|
||||
BrowserOffline.uninit();
|
||||
};
|
||||
}
|
||||
|
||||
function HandleAppCommandEvent(evt) {
|
||||
switch (evt.command) {
|
||||
case "Back":
|
||||
|
@ -6517,7 +6421,8 @@ var LanguageDetectionListener = {
|
|||
}
|
||||
};
|
||||
|
||||
|
||||
// Note that this is also called from non-browser windows on OSX, which do
|
||||
// share menu items but not much else. See nonbrowser-mac.js.
|
||||
var BrowserOffline = {
|
||||
_inited: false,
|
||||
|
||||
|
@ -7493,6 +7398,8 @@ const gAccessibilityServiceIndicator = {
|
|||
}
|
||||
};
|
||||
|
||||
// Note that this is also called from non-browser windows on OSX, which do
|
||||
// share menu items but not much else. See nonbrowser-mac.js.
|
||||
var gPrivateBrowsingUI = {
|
||||
init: function PBUI_init() {
|
||||
// Do nothing for normal windows
|
||||
|
|
|
@ -15,22 +15,7 @@
|
|||
# that they can be shared with browser.xul.
|
||||
#include global-scripts.inc
|
||||
|
||||
<script type="application/javascript">
|
||||
function OpenBrowserWindowFromDockMenu(options) {
|
||||
let win = OpenBrowserWindow(options);
|
||||
win.addEventListener("load", function listener() {
|
||||
win.removeEventListener("load", listener);
|
||||
let dockSupport = Cc["@mozilla.org/widget/macdocksupport;1"]
|
||||
.getService(Ci.nsIMacDockSupport);
|
||||
dockSupport.activateApplication(true);
|
||||
});
|
||||
|
||||
return win;
|
||||
}
|
||||
|
||||
addEventListener("load", function() { gBrowserInit.nonBrowserWindowStartup() }, false);
|
||||
addEventListener("unload", function() { gBrowserInit.nonBrowserWindowShutdown() }, false);
|
||||
</script>
|
||||
<script type="application/javascript" src="chrome://browser/content/nonbrowser-mac.js"></script>
|
||||
|
||||
# All sets except for popupsets (commands, keys, stringbundles and broadcasters)
|
||||
# *must* go into the browser-sets.inc file so that they can be shared with
|
||||
|
|
|
@ -0,0 +1,111 @@
|
|||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
|
||||
* 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/. */
|
||||
|
||||
/* eslint-env mozilla/browser-window */
|
||||
|
||||
function OpenBrowserWindowFromDockMenu(options) {
|
||||
let win = OpenBrowserWindow(options);
|
||||
win.addEventListener("load", function() {
|
||||
let dockSupport = Cc["@mozilla.org/widget/macdocksupport;1"]
|
||||
.getService(Ci.nsIMacDockSupport);
|
||||
dockSupport.activateApplication(true);
|
||||
}, { once: true });
|
||||
|
||||
return win;
|
||||
}
|
||||
|
||||
gBrowserInit.nonBrowserWindowStartup = function() {
|
||||
// Disable inappropriate commands / submenus
|
||||
var disabledItems = ["Browser:SavePage",
|
||||
"Browser:SendLink", "cmd_pageSetup", "cmd_print", "cmd_find", "cmd_findAgain",
|
||||
"viewToolbarsMenu", "viewSidebarMenuMenu", "Browser:Reload",
|
||||
"viewFullZoomMenu", "pageStyleMenu", "charsetMenu", "View:PageSource", "View:FullScreen",
|
||||
"viewHistorySidebar", "Browser:AddBookmarkAs", "Browser:BookmarkAllTabs",
|
||||
"View:PageInfo", "History:UndoCloseTab"];
|
||||
var element;
|
||||
|
||||
for (let disabledItem of disabledItems) {
|
||||
element = document.getElementById(disabledItem);
|
||||
if (element)
|
||||
element.setAttribute("disabled", "true");
|
||||
}
|
||||
|
||||
// Show menus that are only visible in non-browser windows
|
||||
let shownItems = ["menu_openLocation"];
|
||||
for (let shownItem of shownItems) {
|
||||
element = document.getElementById(shownItem);
|
||||
if (element)
|
||||
element.removeAttribute("hidden");
|
||||
}
|
||||
|
||||
// If no windows are active (i.e. we're the hidden window), disable the close, minimize
|
||||
// and zoom menu commands as well
|
||||
if (window.location.href == "chrome://browser/content/hiddenWindow.xul") {
|
||||
var hiddenWindowDisabledItems = ["cmd_close", "minimizeWindow", "zoomWindow"];
|
||||
for (let hiddenWindowDisabledItem of hiddenWindowDisabledItems) {
|
||||
element = document.getElementById(hiddenWindowDisabledItem);
|
||||
if (element)
|
||||
element.setAttribute("disabled", "true");
|
||||
}
|
||||
|
||||
// also hide the window-list separator
|
||||
element = document.getElementById("sep-window-list");
|
||||
element.setAttribute("hidden", "true");
|
||||
|
||||
// Setup the dock menu.
|
||||
let dockMenuElement = document.getElementById("menu_mac_dockmenu");
|
||||
if (dockMenuElement != null) {
|
||||
let nativeMenu = Cc["@mozilla.org/widget/standalonenativemenu;1"]
|
||||
.createInstance(Ci.nsIStandaloneNativeMenu);
|
||||
|
||||
try {
|
||||
nativeMenu.init(dockMenuElement);
|
||||
|
||||
let dockSupport = Cc["@mozilla.org/widget/macdocksupport;1"]
|
||||
.getService(Ci.nsIMacDockSupport);
|
||||
dockSupport.dockMenu = nativeMenu;
|
||||
} catch (e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (PrivateBrowsingUtils.permanentPrivateBrowsing) {
|
||||
document.getElementById("macDockMenuNewWindow").hidden = true;
|
||||
}
|
||||
if (!PrivateBrowsingUtils.enabled) {
|
||||
document.getElementById("macDockMenuNewPrivateWindow").hidden = true;
|
||||
}
|
||||
|
||||
this._delayedStartupTimeoutId = setTimeout(this.nonBrowserWindowDelayedStartup.bind(this), 0);
|
||||
};
|
||||
|
||||
gBrowserInit.nonBrowserWindowDelayedStartup = function() {
|
||||
this._delayedStartupTimeoutId = null;
|
||||
|
||||
// initialise the offline listener
|
||||
BrowserOffline.init();
|
||||
|
||||
// initialize the private browsing UI
|
||||
gPrivateBrowsingUI.init();
|
||||
|
||||
};
|
||||
|
||||
gBrowserInit.nonBrowserWindowShutdown = function() {
|
||||
let dockSupport = Cc["@mozilla.org/widget/macdocksupport;1"]
|
||||
.getService(Ci.nsIMacDockSupport);
|
||||
dockSupport.dockMenu = null;
|
||||
|
||||
// If nonBrowserWindowDelayedStartup hasn't run yet, we have no work to do -
|
||||
// just cancel the pending timeout and return;
|
||||
if (this._delayedStartupTimeoutId) {
|
||||
clearTimeout(this._delayedStartupTimeoutId);
|
||||
return;
|
||||
}
|
||||
|
||||
BrowserOffline.uninit();
|
||||
};
|
||||
|
||||
addEventListener("load", function() { gBrowserInit.nonBrowserWindowStartup() }, false);
|
||||
addEventListener("unload", function() { gBrowserInit.nonBrowserWindowShutdown() }, false);
|
|
@ -104,6 +104,7 @@ browser.jar:
|
|||
#ifdef XP_MACOSX
|
||||
# XXX: We should exclude this one as well (bug 71895)
|
||||
* content/browser/hiddenWindow.xul (content/hiddenWindow.xul)
|
||||
content/browser/nonbrowser-mac.js (content/nonbrowser-mac.js)
|
||||
#endif
|
||||
#ifndef XP_MACOSX
|
||||
* content/browser/webrtcIndicator.xul (content/webrtcIndicator.xul)
|
||||
|
|
Загрузка…
Ссылка в новой задаче