/* -*- 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 */ ChromeUtils.defineESModuleGetters(this, { NimbusFeatures: "resource://nimbus/ExperimentAPI.sys.mjs", }); let delayedStartupTimeoutId = null; 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; } function nonBrowserWindowStartup() { // Disable inappropriate commands / submenus var disabledItems = [ "Browser:SavePage", "Browser:SendLink", "cmd_pageSetup", "cmd_print", "cmd_find", "cmd_findAgain", "viewToolbarsMenu", "viewSidebarMenuMenu", "Browser:Reload", "viewFullZoomMenu", "pageStyleMenu", "repair-text-encoding", "View:PageSource", "View:FullScreen", "enterFullScreenItem", "viewHistorySidebar", "Browser:AddBookmarkAs", "Browser:BookmarkAllTabs", "View:PageInfo", "History:UndoCloseTab", "menu_openFirefoxView", ]; 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 ( window.location.href == "chrome://browser/content/hiddenWindowMac.xhtml" ) { // If no windows are active (i.e. we're the hidden window), disable the // close, minimize and zoom menu commands as well. 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.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) {} } // Hide menuitems that don't apply to private contexts. if (PrivateBrowsingUtils.permanentPrivateBrowsing) { document.getElementById("macDockMenuNewWindow").hidden = true; } if (!PrivateBrowsingUtils.enabled) { document.getElementById("macDockMenuNewPrivateWindow").hidden = true; } if (BrowserUIUtils.quitShortcutDisabled) { document.getElementById("key_quitApplication").remove(); document.getElementById("menu_FileQuitItem").removeAttribute("key"); } } delayedStartupTimeoutId = setTimeout(nonBrowserWindowDelayedStartup, 0); } function nonBrowserWindowDelayedStartup() { delayedStartupTimeoutId = null; // initialise the offline listener BrowserOffline.init(); // initialize the private browsing UI gPrivateBrowsingUI.init(); if (!NimbusFeatures.majorRelease2022.getVariable("firefoxView")) { document.getElementById("menu_openFirefoxView").hidden = true; } } function nonBrowserWindowShutdown() { // If this is the hidden window being closed, release our reference to // the dock menu element to prevent leaks on shutdown if ( window.location.href == "chrome://browser/content/hiddenWindowMac.xhtml" ) { 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 (delayedStartupTimeoutId) { clearTimeout(delayedStartupTimeoutId); return; } BrowserOffline.uninit(); } addEventListener("load", nonBrowserWindowStartup, false); addEventListener("unload", nonBrowserWindowShutdown, false);