935818b21a
* Increased content processes to 8 * Added capability to search through open tabs from the tab overflow menu * New backend for the storage.local WebExtensions API, providing I/O performance improvements when the extension updates a small subset of the stored data * WebExtension keyboard shortcuts can now be managed or overridden from about:addons * Improved scrolling behavior: Firefox will now attempt to keep content from jumping around while a page is loading by supporting scroll anchoring * New about:privatebrowsing with search * A certificate error page now notifies the user of the name of the certificate issuer that breaks HTTPs connections on intercepted connections to help troubleshooting possible anti-virus software issues. * Fixed an performance issue some Linux users experienced with the Downloads panel (bmo#1517101) * Firefox now blocks all autoplay media with sound by default. Users can add individual sites to an exceptions list or turn the blocking off. * System title bar is hidden by default to match Gnome guideline MFSA 2019-07 (bsc#1129821) * CVE-2019-9790 (bmo#1525145) Use-after-free when removing in-use DOM elements * CVE-2019-9791 (bmo#1530958) Type inference is incorrect for constructors entered through on-stack replacement with IonMonkey * CVE-2019-9792 (bmo#1532599) IonMonkey leaks JS_OPTIMIZED_OUT magic value to script OBS-URL: https://build.opensuse.org/package/show/mozilla:Factory/MozillaFirefox?expand=0&rev=723
1837 lines
86 KiB
Diff
1837 lines
86 KiB
Diff
# HG changeset patch
|
|
# Parent 87262204aa945e6fce864193d103a93659bf76f6
|
|
|
|
diff --git a/browser/base/content/browser-kde.xul b/browser/base/content/browser-kde.xul
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/browser/base/content/browser-kde.xul
|
|
@@ -0,0 +1,1408 @@
|
|
+#filter substitution
|
|
+<?xml version="1.0"?>
|
|
+# -*- Mode: HTML -*-
|
|
+#
|
|
+# 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/.
|
|
+
|
|
+<!-- The "global.css" stylesheet is imported first to allow other stylesheets to
|
|
+ override rules using selectors with the same specificity. This applies to
|
|
+ both "content" and "skin" packages, which bug 1385444 will unify later. -->
|
|
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
|
|
+
|
|
+<!-- While these stylesheets are defined in Toolkit, they are only used in the
|
|
+ main browser window, so we can load them here. Bug 1474241 is on file to
|
|
+ consider moving these widgets to the "browser" folder. -->
|
|
+<?xml-stylesheet href="chrome://global/content/tabprompts.css" type="text/css"?>
|
|
+<?xml-stylesheet href="chrome://global/skin/tabprompts.css" type="text/css"?>
|
|
+
|
|
+<?xml-stylesheet href="chrome://browser/content/browser.css" type="text/css"?>
|
|
+<?xml-stylesheet href="chrome://browser/content/tabbrowser.css" type="text/css"?>
|
|
+<?xml-stylesheet href="chrome://browser/content/downloads/downloads.css" type="text/css"?>
|
|
+<?xml-stylesheet href="chrome://browser/content/places/places.css" type="text/css"?>
|
|
+<?xml-stylesheet href="chrome://browser/content/usercontext/usercontext.css" type="text/css"?>
|
|
+<?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
|
|
+<?xml-stylesheet href="chrome://browser/skin/controlcenter/panel.css" type="text/css"?>
|
|
+<?xml-stylesheet href="chrome://browser/skin/customizableui/panelUI.css" type="text/css"?>
|
|
+<?xml-stylesheet href="chrome://browser/skin/downloads/downloads.css" type="text/css"?>
|
|
+<?xml-stylesheet href="chrome://browser/skin/searchbar.css" type="text/css"?>
|
|
+<?xml-stylesheet href="chrome://browser/skin/places/tree-icons.css" type="text/css"?>
|
|
+<?xml-stylesheet href="chrome://browser/skin/places/editBookmark.css" type="text/css"?>
|
|
+<?xml-stylesheet href="chrome://browser/skin/compacttheme.css" type="text/css" alternate="yes" title="Light/Dark"?>
|
|
+
|
|
+# All DTD information is stored in a separate file so that it can be shared by
|
|
+# hiddenWindow.xul.
|
|
+<!DOCTYPE window [
|
|
+#include browser-doctype.inc
|
|
+]>
|
|
+
|
|
+<window id="main-window"
|
|
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
+ xmlns:svg="http://www.w3.org/2000/svg"
|
|
+ xmlns:html="http://www.w3.org/1999/xhtml"
|
|
+ xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
|
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
|
+ title="&mainWindow.title;"
|
|
+ title_normal="&mainWindow.title;"
|
|
+#ifdef XP_MACOSX
|
|
+ title_privatebrowsing="&mainWindow.title;&mainWindow.titlemodifiermenuseparator;&mainWindow.titlePrivateBrowsingSuffix;"
|
|
+ titledefault="&mainWindow.title;"
|
|
+ titlemodifier=""
|
|
+ titlemodifier_normal=""
|
|
+ titlemodifier_privatebrowsing="&mainWindow.titlePrivateBrowsingSuffix;"
|
|
+#else
|
|
+ title_privatebrowsing="&mainWindow.titlemodifier; &mainWindow.titlePrivateBrowsingSuffix;"
|
|
+ titlemodifier="&mainWindow.titlemodifier;"
|
|
+ titlemodifier_normal="&mainWindow.titlemodifier;"
|
|
+ titlemodifier_privatebrowsing="&mainWindow.titlemodifier; &mainWindow.titlePrivateBrowsingSuffix;"
|
|
+#endif
|
|
+#ifdef XP_WIN
|
|
+ chromemargin="0,2,2,2"
|
|
+#else
|
|
+ chromemargin="0,-1,-1,-1"
|
|
+#endif
|
|
+ tabsintitlebar="true"
|
|
+ titlemenuseparator="&mainWindow.titlemodifiermenuseparator;"
|
|
+ windowtype="navigator:browser"
|
|
+ macanimationtype="document"
|
|
+ screenX="4" screenY="4"
|
|
+ fullscreenbutton="true"
|
|
+ sizemode="normal"
|
|
+ retargetdocumentfocus="urlbar"
|
|
+ persist="screenX screenY width height sizemode"
|
|
+#ifdef BROWSER_XHTML
|
|
+ hidden="true"
|
|
+ mozpersist=""
|
|
+#endif
|
|
+ >
|
|
+
|
|
+# All JS files which are needed by browser.xul and other top level windows to
|
|
+# support MacOS specific features *must* go into the global-scripts.inc file so
|
|
+# that they can be shared with macWindow.inc.xul.
|
|
+#include global-scripts.inc
|
|
+
|
|
+<script type="application/javascript"
|
|
+#ifdef BROWSER_XHTML
|
|
+xmlns="http://www.w3.org/1999/xhtml"
|
|
+#endif
|
|
+>
|
|
+ Services.scriptloader.loadSubScript("chrome://global/content/contentAreaUtils.js", this);
|
|
+ Services.scriptloader.loadSubScript("chrome://browser/content/browser-captivePortal.js", this);
|
|
+ Services.scriptloader.loadSubScript("chrome://browser/content/browser-compacttheme.js", this);
|
|
+ Services.scriptloader.loadSubScript("chrome://browser/content/browser-contentblocking.js", this);
|
|
+#ifdef MOZ_DATA_REPORTING
|
|
+ Services.scriptloader.loadSubScript("chrome://browser/content/browser-data-submission-info-bar.js", this);
|
|
+#endif
|
|
+#ifndef MOZILLA_OFFICIAL
|
|
+ Services.scriptloader.loadSubScript("chrome://browser/content/browser-development-helpers.js", this);
|
|
+#endif
|
|
+ Services.scriptloader.loadSubScript("chrome://browser/content/browser-media.js", this);
|
|
+ Services.scriptloader.loadSubScript("chrome://browser/content/browser-pageActions.js", this);
|
|
+ Services.scriptloader.loadSubScript("chrome://browser/content/browser-plugins.js", this);
|
|
+ Services.scriptloader.loadSubScript("chrome://browser/content/browser-sidebar.js", this);
|
|
+ Services.scriptloader.loadSubScript("chrome://browser/content/browser-tabsintitlebar.js", this);
|
|
+ Services.scriptloader.loadSubScript("chrome://browser/content/tabbrowser.js", this);
|
|
+ Services.scriptloader.loadSubScript("chrome://browser/content/search/searchbar.js", this);
|
|
+
|
|
+ window.onload = gBrowserInit.onLoad.bind(gBrowserInit);
|
|
+ window.onunload = gBrowserInit.onUnload.bind(gBrowserInit);
|
|
+ window.onclose = WindowIsClosing;
|
|
+
|
|
+#ifdef BROWSER_XHTML
|
|
+ window.addEventListener("readystatechange", () => {
|
|
+ // We initially hide the window to prevent layouts during parse. This lets us
|
|
+ // avoid accidental XBL construction and better match browser.xul (see Bug 1497975).
|
|
+ gBrowserInit.onBeforeInitialXULLayout();
|
|
+ document.documentElement.removeAttribute("hidden");
|
|
+ }, { once: true, capture: true });
|
|
+#else
|
|
+ window.addEventListener("MozBeforeInitialXULLayout",
|
|
+ gBrowserInit.onBeforeInitialXULLayout.bind(gBrowserInit), { once: true });
|
|
+#endif
|
|
+ // The listener of DOMContentLoaded must be set on window, rather than
|
|
+ // document, because the window can go away before the event is fired.
|
|
+ // In that case, we don't want to initialize anything, otherwise we
|
|
+ // may be leaking things because they will never be destroyed after.
|
|
+ window.addEventListener("DOMContentLoaded",
|
|
+ gBrowserInit.onDOMContentLoaded.bind(gBrowserInit), { once: true });
|
|
+</script>
|
|
+
|
|
+# All sets except for popupsets (commands, keys, and stringbundles)
|
|
+# *must* go into the browser-sets.inc file so that they can be shared with other
|
|
+# top level windows in macWindow.inc.xul.
|
|
+#include browser-sets.inc
|
|
+
|
|
+ <popupset id="mainPopupSet">
|
|
+ <menupopup id="tabContextMenu"
|
|
+ onpopupshowing="if (event.target == this) TabContextMenu.updateContextMenu(this);"
|
|
+ onpopuphidden="if (event.target == this) TabContextMenu.contextTab = null;">
|
|
+ <menuitem id="context_reloadTab" label="&reloadTab.label;" accesskey="&reloadTab.accesskey;"
|
|
+ oncommand="gBrowser.reloadTab(TabContextMenu.contextTab);"/>
|
|
+ <menuitem id="context_reloadSelectedTabs" label="&reloadTabs.label;" hidden="true"
|
|
+ accesskey="&reloadTabs.accesskey;"
|
|
+ oncommand="gBrowser.reloadMultiSelectedTabs();"/>
|
|
+ <menuitem id="context_toggleMuteTab" oncommand="TabContextMenu.contextTab.toggleMuteAudio();"/>
|
|
+ <menuitem id="context_toggleMuteSelectedTabs" hidden="true"
|
|
+ oncommand="gBrowser.toggleMuteAudioOnMultiSelectedTabs(TabContextMenu.contextTab);"/>
|
|
+ <menuitem id="context_pinTab" label="&pinTab.label;"
|
|
+ accesskey="&pinTab.accesskey;"
|
|
+ oncommand="gBrowser.pinTab(TabContextMenu.contextTab);"/>
|
|
+ <menuitem id="context_unpinTab" label="&unpinTab.label;" hidden="true"
|
|
+ accesskey="&unpinTab.accesskey;"
|
|
+ oncommand="gBrowser.unpinTab(TabContextMenu.contextTab);"/>
|
|
+ <menuitem id="context_pinSelectedTabs" label="&pinSelectedTabs.label;" hidden="true"
|
|
+ accesskey="&pinSelectedTabs.accesskey;"
|
|
+ oncommand="gBrowser.pinMultiSelectedTabs();"/>
|
|
+ <menuitem id="context_unpinSelectedTabs" label="&unpinSelectedTabs.label;" hidden="true"
|
|
+ accesskey="&unpinSelectedTabs.accesskey;"
|
|
+ oncommand="gBrowser.unpinMultiSelectedTabs();"/>
|
|
+ <menuitem id="context_duplicateTab" label="&duplicateTab.label;"
|
|
+ accesskey="&duplicateTab.accesskey;"
|
|
+ oncommand="duplicateTabIn(TabContextMenu.contextTab, 'tab');"/>
|
|
+ <menuitem id="context_duplicateTabs" label="&duplicateTabs.label;"
|
|
+ accesskey="&duplicateTabs.accesskey;"
|
|
+ oncommand="TabContextMenu.duplicateSelectedTabs();"/>
|
|
+ <menuseparator/>
|
|
+ <menuitem id="context_selectAllTabs" label="&selectAllTabs.label;" accesskey="&selectAllTabs.accesskey;"
|
|
+ oncommand="gBrowser.selectAllTabs();"/>
|
|
+ <menuitem id="context_bookmarkSelectedTabs"
|
|
+ hidden="true"
|
|
+ label="&bookmarkSelectedTabs.label;"
|
|
+ accesskey="&bookmarkSelectedTabs.accesskey;"
|
|
+ oncommand="PlacesCommandHook.bookmarkPages(PlacesCommandHook.uniqueSelectedPages);"/>
|
|
+ <menuitem id="context_bookmarkTab"
|
|
+ label="&bookmarkTab.label;"
|
|
+ accesskey="&bookmarkTab.accesskey;"
|
|
+ oncommand="PlacesCommandHook.bookmarkPages(PlacesCommandHook.getUniquePages([TabContextMenu.contextTab]));"/>
|
|
+ <menu id="context_reopenInContainer"
|
|
+ label="&reopenInContainer.label;"
|
|
+ accesskey="&reopenInContainer.accesskey;"
|
|
+ hidden="true">
|
|
+ <menupopup oncommand="TabContextMenu.reopenInContainer(event);"
|
|
+ onpopupshowing="TabContextMenu.createReopenInContainerMenu(event);"/>
|
|
+ </menu>
|
|
+ <menu id="context_moveTabOptions"
|
|
+ multiselectcontextlabel="&moveSelectedTabOptions.label;"
|
|
+ multiselectcontextaccesskey="&moveSelectedTabOptions.accesskey;"
|
|
+ nonmultiselectcontextlabel="&moveTabOptions.label;"
|
|
+ nonmultiselectcontextaccesskey="&moveTabOptions.accesskey;">
|
|
+ <menupopup id="moveTabOptionsMenu">
|
|
+ <menuitem id="context_moveToStart"
|
|
+ label="&moveToStart.label;"
|
|
+ accesskey="&moveToStart.accesskey;"
|
|
+ tbattr="tabbrowser-multiple"
|
|
+ oncommand="gBrowser.moveTabsToStart(TabContextMenu.contextTab);"/>
|
|
+ <menuitem id="context_moveToEnd"
|
|
+ label="&moveToEnd.label;"
|
|
+ accesskey="&moveToEnd.accesskey;"
|
|
+ tbattr="tabbrowser-multiple"
|
|
+ oncommand="gBrowser.moveTabsToEnd(TabContextMenu.contextTab);"/>
|
|
+ <menuitem id="context_openTabInWindow" label="&moveToNewWindow.label;"
|
|
+ accesskey="&moveToNewWindow.accesskey;"
|
|
+ tbattr="tabbrowser-multiple"
|
|
+ oncommand="gBrowser.replaceTabsWithWindow(TabContextMenu.contextTab);"/>
|
|
+ </menupopup>
|
|
+ </menu>
|
|
+ <menu id="context_sendTabToDevice"
|
|
+ class="sync-ui-item">
|
|
+ <menupopup id="context_sendTabToDevicePopupMenu"
|
|
+ onpopupshowing="gSync.populateSendTabToDevicesMenu(event.target, TabContextMenu.contextTab.linkedBrowser.currentURI.spec, TabContextMenu.contextTab.linkedBrowser.contentTitle, TabContextMenu.contextTab.multiselected);"/>
|
|
+ </menu>
|
|
+ <menuseparator/>
|
|
+ <menuitem id="context_closeTabsToTheEnd" label="&closeTabsToTheEnd.label;" accesskey="&closeTabsToTheEnd.accesskey;"
|
|
+ oncommand="gBrowser.removeTabsToTheEndFrom(TabContextMenu.contextTab, {animate: true});"/>
|
|
+ <menuitem id="context_closeOtherTabs" label="&closeOtherTabs.label;" accesskey="&closeOtherTabs.accesskey;"
|
|
+ oncommand="gBrowser.removeAllTabsBut(TabContextMenu.contextTab);"/>
|
|
+ <menuitem id="context_undoCloseTab"
|
|
+ label="&undoCloseTab.label;"
|
|
+ accesskey="&undoCloseTab.accesskey;"
|
|
+ observes="History:UndoCloseTab"/>
|
|
+ <menuitem id="context_closeTab" label="&closeTab.label;" accesskey="&closeTab.accesskey;"
|
|
+ oncommand="gBrowser.removeTab(TabContextMenu.contextTab, { animate: true });"/>
|
|
+ <menuitem id="context_closeSelectedTabs" label="&closeTabs.label;"
|
|
+ hidden="true" accesskey="&closeTabs.accesskey;"
|
|
+ oncommand="gBrowser.removeMultiSelectedTabs();"/>
|
|
+ </menupopup>
|
|
+
|
|
+ <!-- bug 415444/582485: event.stopPropagation is here for the cloned version
|
|
+ of this menupopup -->
|
|
+ <menupopup id="backForwardMenu"
|
|
+ onpopupshowing="return FillHistoryMenu(event.target);"
|
|
+ oncommand="gotoHistoryIndex(event); event.stopPropagation();"
|
|
+ onclick="checkForMiddleClick(this, event);"/>
|
|
+ <tooltip id="aHTMLTooltip" page="true"/>
|
|
+ <tooltip id="remoteBrowserTooltip"/>
|
|
+
|
|
+ <!-- for search and content formfill/pw manager -->
|
|
+
|
|
+ <panel type="autocomplete-richlistbox"
|
|
+ id="PopupAutoComplete"
|
|
+ role="group"
|
|
+ noautofocus="true"
|
|
+ hidden="true"
|
|
+ overflowpadding="4"
|
|
+ norolluponanchor="true"
|
|
+ nomaxresults="true" />
|
|
+
|
|
+ <!-- for search with one-off buttons -->
|
|
+ <panel type="autocomplete-richlistbox"
|
|
+ id="PopupSearchAutoComplete"
|
|
+ role="group"
|
|
+ noautofocus="true"
|
|
+ hidden="true" />
|
|
+
|
|
+ <!-- for url bar autocomplete -->
|
|
+ <panel type="autocomplete-richlistbox"
|
|
+ id="PopupAutoCompleteRichResult"
|
|
+ role="group"
|
|
+ noautofocus="true"
|
|
+ hidden="true"
|
|
+ flip="none"
|
|
+ level="parent"
|
|
+ overflowpadding="15" />
|
|
+
|
|
+ <!-- for url bar autocomplete -->
|
|
+ <panel id="urlbar-results"
|
|
+ role="group"
|
|
+ noautofocus="true"
|
|
+ hidden="true"
|
|
+ flip="none"
|
|
+ consumeoutsideclicks="never"
|
|
+ norolluponanchor="true"
|
|
+ level="parent">
|
|
+ <html:div class="urlbarView-body-outer">
|
|
+ <html:div class="urlbarView-body-inner">
|
|
+ <!-- TODO: add search suggestions notification -->
|
|
+ <html:div class="urlbarView-results"/>
|
|
+ </html:div>
|
|
+ </html:div>
|
|
+ <hbox class="search-one-offs"
|
|
+ compact="true"
|
|
+ includecurrentengine="true"
|
|
+ disabletab="true"/>
|
|
+ </panel>
|
|
+
|
|
+ <!-- for date/time picker. consumeoutsideclicks is set to never, so that
|
|
+ clicks on the anchored input box are never consumed. -->
|
|
+ <panel id="DateTimePickerPanel"
|
|
+ type="arrow"
|
|
+ hidden="true"
|
|
+ orient="vertical"
|
|
+ noautofocus="true"
|
|
+ norolluponanchor="true"
|
|
+ consumeoutsideclicks="never"
|
|
+ level="parent"
|
|
+ tabspecific="true">
|
|
+ </panel>
|
|
+
|
|
+ <!-- for select dropdowns. The menupopup is what shows the list of options,
|
|
+ and the popuponly menulist makes things like the menuactive attributes
|
|
+ work correctly on the menupopup. ContentSelectDropdown expects the
|
|
+ popuponly menulist to be its immediate parent. -->
|
|
+ <menulist popuponly="true" id="ContentSelectDropdown" hidden="true">
|
|
+ <menupopup rolluponmousewheel="true"
|
|
+ activateontab="true" position="after_start"
|
|
+ level="parent"
|
|
+#ifdef XP_WIN
|
|
+ consumeoutsideclicks="false" ignorekeys="shortcuts"
|
|
+#endif
|
|
+ />
|
|
+ </menulist>
|
|
+
|
|
+ <!-- for invalid form error message -->
|
|
+ <panel id="invalid-form-popup" type="arrow" orient="vertical" noautofocus="true" hidden="true" level="parent">
|
|
+ <description/>
|
|
+ </panel>
|
|
+
|
|
+ <panel id="editBookmarkPanel"
|
|
+ type="arrow"
|
|
+ orient="vertical"
|
|
+ ignorekeys="true"
|
|
+ hidden="true"
|
|
+ tabspecific="true"
|
|
+ aria-labelledby="editBookmarkPanelTitle">
|
|
+ <box class="panel-header">
|
|
+ <label id="editBookmarkPanelTitle"/>
|
|
+ </box>
|
|
+ <html:div id="editBookmarkPanelFaviconContainer">
|
|
+ <html:img id="editBookmarkPanelFavicon"/>
|
|
+ </html:div>
|
|
+ <box id="editBookmarkPanelImage"/>
|
|
+#include ../../components/places/content/editBookmarkPanel.inc.xul
|
|
+ <vbox id="editBookmarkPanelBottomContent"
|
|
+ flex="1">
|
|
+ <checkbox id="editBookmarkPanel_showForNewBookmarks"
|
|
+ label="&editBookmark.showForNewBookmarks.label;"
|
|
+ accesskey="&editBookmark.showForNewBookmarks.accesskey;"
|
|
+ oncommand="StarUI.onShowForNewBookmarksCheckboxCommand();"/>
|
|
+ </vbox>
|
|
+ <hbox id="editBookmarkPanelBottomButtons"
|
|
+ class="panel-footer"
|
|
+ style="min-width: &editBookmark.panel.width;;">
|
|
+#ifdef XP_UNIX
|
|
+ <button id="editBookmarkPanelDoneButton"
|
|
+ class="editBookmarkPanelBottomButton"
|
|
+ label="&editBookmark.done.label;"
|
|
+ default="true"
|
|
+ oncommand="StarUI.panel.hidePopup();"/>
|
|
+ <button id="editBookmarkPanelRemoveButton"
|
|
+ class="editBookmarkPanelBottomButton"
|
|
+ oncommand="StarUI.removeBookmarkButtonCommand();"/>
|
|
+#else
|
|
+ <button id="editBookmarkPanelRemoveButton"
|
|
+ class="editBookmarkPanelBottomButton"
|
|
+ oncommand="StarUI.removeBookmarkButtonCommand();"/>
|
|
+ <button id="editBookmarkPanelDoneButton"
|
|
+ class="editBookmarkPanelBottomButton"
|
|
+ label="&editBookmark.done.label;"
|
|
+ default="true"
|
|
+ oncommand="StarUI.panel.hidePopup();"/>
|
|
+#endif
|
|
+ </hbox>
|
|
+ </panel>
|
|
+
|
|
+ <!-- UI tour experience -->
|
|
+ <panel id="UITourTooltip"
|
|
+ type="arrow"
|
|
+ hidden="true"
|
|
+ noautofocus="true"
|
|
+ noautohide="true"
|
|
+ align="start"
|
|
+ orient="vertical"
|
|
+ role="alert">
|
|
+ <vbox>
|
|
+ <hbox id="UITourTooltipBody">
|
|
+ <image id="UITourTooltipIcon"/>
|
|
+ <vbox flex="1">
|
|
+ <hbox id="UITourTooltipTitleContainer">
|
|
+ <label id="UITourTooltipTitle" flex="1"/>
|
|
+ <toolbarbutton id="UITourTooltipClose" class="close-icon"
|
|
+ tooltiptext="&uiTour.infoPanel.close;"/>
|
|
+ </hbox>
|
|
+ <description id="UITourTooltipDescription" flex="1"/>
|
|
+ </vbox>
|
|
+ </hbox>
|
|
+ <hbox id="UITourTooltipButtons" flex="1" align="center"/>
|
|
+ </vbox>
|
|
+ </panel>
|
|
+ <!-- type="default" forces frames to be created so that the panel's size can be determined -->
|
|
+ <panel id="UITourHighlightContainer"
|
|
+ type="default"
|
|
+ hidden="true"
|
|
+ noautofocus="true"
|
|
+ noautohide="true"
|
|
+ flip="none"
|
|
+ consumeoutsideclicks="false"
|
|
+ mousethrough="always">
|
|
+ <box id="UITourHighlight"></box>
|
|
+ </panel>
|
|
+
|
|
+ <panel id="sidebarMenu-popup"
|
|
+ class="cui-widget-panel"
|
|
+ role="group"
|
|
+ type="arrow"
|
|
+ hidden="true"
|
|
+ flip="slide"
|
|
+ orient="vertical"
|
|
+ position="bottomcenter topleft">
|
|
+ <toolbarbutton id="sidebar-switcher-bookmarks"
|
|
+ type="checkbox"
|
|
+ label="&bookmarksButton.label;"
|
|
+ class="subviewbutton subviewbutton-iconic"
|
|
+ key="viewBookmarksSidebarKb"
|
|
+ oncommand="SidebarUI.show('viewBookmarksSidebar');"/>
|
|
+ <toolbarbutton id="sidebar-switcher-history"
|
|
+ type="checkbox"
|
|
+ label="&historyButton.label;"
|
|
+ class="subviewbutton subviewbutton-iconic"
|
|
+ key="key_gotoHistory"
|
|
+ oncommand="SidebarUI.show('viewHistorySidebar');"/>
|
|
+ <toolbarbutton id="sidebar-switcher-tabs"
|
|
+ type="checkbox"
|
|
+ label="&syncedTabs.sidebar.label;"
|
|
+ class="subviewbutton subviewbutton-iconic sync-ui-item"
|
|
+ oncommand="SidebarUI.show('viewTabsSidebar');"/>
|
|
+ <toolbarseparator/>
|
|
+ <!-- Extension toolbarbuttons go here. -->
|
|
+ <toolbarseparator id="sidebar-extensions-separator"/>
|
|
+ <toolbarbutton id="sidebar-reverse-position"
|
|
+ class="subviewbutton"
|
|
+ oncommand="SidebarUI.reversePosition()"/>
|
|
+ <toolbarseparator/>
|
|
+ <toolbarbutton label="&sidebarMenuClose.label;"
|
|
+ class="subviewbutton"
|
|
+ oncommand="SidebarUI.hide()"/>
|
|
+ </panel>
|
|
+
|
|
+ <menupopup id="toolbar-context-menu"
|
|
+ onpopupshowing="onViewToolbarsPopupShowing(event, document.getElementById('viewToolbarsMenuSeparator')); ToolbarContextMenu.updateDownloadsAutoHide(this); ToolbarContextMenu.updateExtension(this)">
|
|
+ <menuitem oncommand="ToolbarContextMenu.openAboutAddonsForContextAction(this.parentElement)"
|
|
+ accesskey="&customizeMenu.manageExtension.accesskey;"
|
|
+ label="&customizeMenu.manageExtension.label;"
|
|
+ contexttype="toolbaritem"
|
|
+ class="customize-context-manageExtension"/>
|
|
+ <menuitem oncommand="ToolbarContextMenu.removeExtensionForContextAction(this.parentElement)"
|
|
+ accesskey="&customizeMenu.removeExtension.accesskey;"
|
|
+ label="&customizeMenu.removeExtension.label;"
|
|
+ contexttype="toolbaritem"
|
|
+ class="customize-context-removeExtension"/>
|
|
+ <menuseparator/>
|
|
+ <menuitem oncommand="gCustomizeMode.addToPanel(document.popupNode)"
|
|
+ accesskey="&customizeMenu.pinToOverflowMenu.accesskey;"
|
|
+ label="&customizeMenu.pinToOverflowMenu.label;"
|
|
+ contexttype="toolbaritem"
|
|
+ class="customize-context-moveToPanel"/>
|
|
+ <menuitem id="toolbar-context-autohide-downloads-button"
|
|
+ oncommand="ToolbarContextMenu.onDownloadsAutoHideChange(event);"
|
|
+ type="checkbox"
|
|
+ accesskey="&customizeMenu.autoHideDownloadsButton.accesskey;"
|
|
+ label="&customizeMenu.autoHideDownloadsButton.label;"
|
|
+ contexttype="toolbaritem"/>
|
|
+ <menuitem oncommand="gCustomizeMode.removeFromArea(document.popupNode)"
|
|
+ accesskey="&customizeMenu.removeFromToolbar.accesskey;"
|
|
+ label="&customizeMenu.removeFromToolbar.label;"
|
|
+ contexttype="toolbaritem"
|
|
+ class="customize-context-removeFromToolbar"/>
|
|
+ <menuitem id="toolbar-context-reloadSelectedTab"
|
|
+ contexttype="tabbar"
|
|
+ oncommand="gBrowser.reloadMultiSelectedTabs();"
|
|
+ label="&toolbarContextMenu.reloadSelectedTab.label;"
|
|
+ accesskey="&toolbarContextMenu.reloadSelectedTab.accesskey;"/>
|
|
+ <menuitem id="toolbar-context-reloadSelectedTabs"
|
|
+ contexttype="tabbar"
|
|
+ oncommand="gBrowser.reloadMultiSelectedTabs();"
|
|
+ label="&toolbarContextMenu.reloadSelectedTabs.label;"
|
|
+ accesskey="&toolbarContextMenu.reloadSelectedTabs.accesskey;"/>
|
|
+ <menuitem id="toolbar-context-bookmarkSelectedTab"
|
|
+ contexttype="tabbar"
|
|
+ oncommand="PlacesCommandHook.bookmarkPages(PlacesCommandHook.uniqueSelectedPages);"
|
|
+ label="&toolbarContextMenu.bookmarkSelectedTab.label;"
|
|
+ accesskey="&toolbarContextMenu.bookmarkSelectedTab.accesskey;"/>
|
|
+ <menuitem id="toolbar-context-bookmarkSelectedTabs"
|
|
+ contexttype="tabbar"
|
|
+ oncommand="PlacesCommandHook.bookmarkPages(PlacesCommandHook.uniqueSelectedPages);"
|
|
+ label="&toolbarContextMenu.bookmarkSelectedTabs.label;"
|
|
+ accesskey="&toolbarContextMenu.bookmarkSelectedTabs.accesskey;"/>
|
|
+ <menuitem id="toolbar-context-selectAllTabs"
|
|
+ contexttype="tabbar"
|
|
+ oncommand="gBrowser.selectAllTabs();"
|
|
+ label="&toolbarContextMenu.selectAllTabs.label;"
|
|
+ accesskey="&toolbarContextMenu.selectAllTabs.accesskey;"/>
|
|
+ <menuitem id="toolbar-context-undoCloseTab"
|
|
+ contexttype="tabbar"
|
|
+ label="&toolbarContextMenu.undoCloseTab.label;"
|
|
+ accesskey="&toolbarContextMenu.undoCloseTab.accesskey;"
|
|
+ observes="History:UndoCloseTab"/>
|
|
+ <menuseparator/>
|
|
+ <menuseparator id="viewToolbarsMenuSeparator"/>
|
|
+ <!-- XXXgijs: we're using oncommand handler here to avoid the event being
|
|
+ redirected to the command element, thus preventing
|
|
+ listeners on the menupopup or further up the tree from
|
|
+ seeing the command event pass by. The observes attribute is
|
|
+ here so that the menuitem is still disabled and re-enabled
|
|
+ correctly. -->
|
|
+ <menuitem oncommand="gCustomizeMode.enter()"
|
|
+ observes="cmd_CustomizeToolbars"
|
|
+ class="viewCustomizeToolbar"
|
|
+ label="&viewCustomizeToolbar.label;"
|
|
+ accesskey="&viewCustomizeToolbar.accesskey;"/>
|
|
+ </menupopup>
|
|
+
|
|
+ <menupopup id="blockedPopupOptions"
|
|
+ onpopupshowing="gPopupBlockerObserver.fillPopupList(event);"
|
|
+ onpopuphiding="gPopupBlockerObserver.onPopupHiding(event);">
|
|
+ <menuitem id="blockedPopupAllowSite"
|
|
+ accesskey="&allowPopups.accesskey;"
|
|
+ oncommand="gPopupBlockerObserver.toggleAllowPopupsForSite(event);"/>
|
|
+ <menuitem
|
|
+#ifdef XP_WIN
|
|
+ label="&editPopupSettings.label;"
|
|
+#else
|
|
+ label="&editPopupSettingsUnix.label;"
|
|
+#endif
|
|
+ accesskey="&editPopupSettings.accesskey;"
|
|
+ oncommand="gPopupBlockerObserver.editPopupSettings();"/>
|
|
+ <menuitem id="blockedPopupDontShowMessage"
|
|
+ accesskey="&dontShowMessage.accesskey;"
|
|
+ type="checkbox"
|
|
+ oncommand="gPopupBlockerObserver.dontShowMessage();"/>
|
|
+ <menuseparator id="blockedPopupsSeparator"/>
|
|
+ </menupopup>
|
|
+
|
|
+ <menupopup id="autohide-context"
|
|
+ onpopupshowing="FullScreen.getAutohide(this.firstChild);">
|
|
+ <menuitem type="checkbox" label="&fullScreenAutohide.label;"
|
|
+ accesskey="&fullScreenAutohide.accesskey;"
|
|
+ oncommand="FullScreen.setAutohide();"/>
|
|
+ <menuseparator/>
|
|
+ <menuitem label="&fullScreenExit.label;"
|
|
+ accesskey="&fullScreenExit.accesskey;"
|
|
+ oncommand="BrowserFullScreen();"/>
|
|
+ </menupopup>
|
|
+
|
|
+ <menupopup id="contentAreaContextMenu" pagemenu="#page-menu-separator"
|
|
+ onpopupshowing="if (event.target != this)
|
|
+ return true;
|
|
+ gContextMenu = new nsContextMenu(this, event.shiftKey);
|
|
+ if (gContextMenu.shouldDisplay)
|
|
+ updateEditUIVisibility();
|
|
+ return gContextMenu.shouldDisplay;"
|
|
+ onpopuphiding="if (event.target != this)
|
|
+ return;
|
|
+ gContextMenu.hiding();
|
|
+ gContextMenu = null;
|
|
+ updateEditUIVisibility();">
|
|
+#include browser-context.inc
|
|
+ </menupopup>
|
|
+
|
|
+#include ../../components/places/content/placesContextMenu.inc.xul
|
|
+
|
|
+ <panel id="ctrlTab-panel" hidden="true" norestorefocus="true" level="top">
|
|
+ <hbox id="ctrlTab-previews"/>
|
|
+ <hbox id="ctrlTab-showAll-container" pack="center"/>
|
|
+ </panel>
|
|
+
|
|
+ <panel id="pageActionPanel"
|
|
+ class="cui-widget-panel"
|
|
+ role="group"
|
|
+ type="arrow"
|
|
+ hidden="true"
|
|
+ flip="slide"
|
|
+ photon="true"
|
|
+ position="bottomcenter topright"
|
|
+ tabspecific="true"
|
|
+ noautofocus="true"
|
|
+ pocket-title="&saveToPocketCmd.label;"
|
|
+ copyURL-title="&pageAction.copyLink.label;"
|
|
+ emailLink-title="&emailPageCmd.label;"
|
|
+ sendToDevice-notReadyTitle="&sendToDevice.syncNotReady.label;"
|
|
+ shareURL-title="&pageAction.shareUrl.label;"
|
|
+ shareMore-label="&pageAction.shareMore.label;">
|
|
+ <panelmultiview id="pageActionPanelMultiView"
|
|
+ mainViewId="pageActionPanelMainView"
|
|
+ viewCacheId="appMenu-viewCache">
|
|
+ <panelview id="pageActionPanelMainView"
|
|
+ context="pageActionContextMenu"
|
|
+ class="PanelUI-subView">
|
|
+ <vbox class="panel-subview-body"/>
|
|
+ </panelview>
|
|
+ </panelmultiview>
|
|
+ </panel>
|
|
+
|
|
+ <panel id="confirmation-hint"
|
|
+ role="alert"
|
|
+ type="arrow"
|
|
+ hidden="true"
|
|
+ flip="slide"
|
|
+ position="bottomcenter topright"
|
|
+ tabspecific="true"
|
|
+ noautofocus="true">
|
|
+ <hbox id="confirmation-hint-checkmark-animation-container">
|
|
+ <image id="confirmation-hint-checkmark-image"/>
|
|
+ </hbox>
|
|
+ <label id="confirmation-hint-message"/>
|
|
+ </panel>
|
|
+
|
|
+ <menupopup id="pageActionContextMenu"
|
|
+ onpopupshowing="BrowserPageActions.onContextMenuShowing(event, this);">
|
|
+ <menuitem class="pageActionContextMenuItem builtInUnpinned"
|
|
+ label="&pageAction.addToUrlbar.label;"
|
|
+ oncommand="BrowserPageActions.togglePinningForContextAction();"/>
|
|
+ <menuitem class="pageActionContextMenuItem builtInPinned"
|
|
+ label="&pageAction.removeFromUrlbar.label;"
|
|
+ oncommand="BrowserPageActions.togglePinningForContextAction();"/>
|
|
+ <menuitem class="pageActionContextMenuItem extensionUnpinned"
|
|
+ label="&pageAction.addToUrlbar.label;"
|
|
+ oncommand="BrowserPageActions.togglePinningForContextAction();"/>
|
|
+ <menuitem class="pageActionContextMenuItem extensionPinned"
|
|
+ label="&pageAction.removeFromUrlbar.label;"
|
|
+ oncommand="BrowserPageActions.togglePinningForContextAction();"/>
|
|
+ <menuseparator class="pageActionContextMenuItem extensionPinned extensionUnpinned"/>
|
|
+ <menuitem class="pageActionContextMenuItem extensionPinned extensionUnpinned"
|
|
+ label="&pageAction.manageExtension.label;"
|
|
+ oncommand="BrowserPageActions.openAboutAddonsForContextAction();"/>
|
|
+ </menupopup>
|
|
+
|
|
+#include ../../components/places/content/bookmarksHistoryTooltip.inc.xul
|
|
+
|
|
+ <tooltip id="tabbrowser-tab-tooltip" onpopupshowing="gBrowser.createTooltip(event);"/>
|
|
+
|
|
+ <tooltip id="back-button-tooltip">
|
|
+ <description class="tooltip-label" value="&backButton.tooltip;"/>
|
|
+#ifdef XP_MACOSX
|
|
+ <description class="tooltip-label" value="&backForwardButtonMenuMac.tooltip;"/>
|
|
+#else
|
|
+ <description class="tooltip-label" value="&backForwardButtonMenu.tooltip;"/>
|
|
+#endif
|
|
+ </tooltip>
|
|
+
|
|
+ <tooltip id="forward-button-tooltip">
|
|
+ <description class="tooltip-label" value="&forwardButton.tooltip;"/>
|
|
+#ifdef XP_MACOSX
|
|
+ <description class="tooltip-label" value="&backForwardButtonMenuMac.tooltip;"/>
|
|
+#else
|
|
+ <description class="tooltip-label" value="&backForwardButtonMenu.tooltip;"/>
|
|
+#endif
|
|
+ </tooltip>
|
|
+
|
|
+#include popup-notifications.inc
|
|
+
|
|
+#include ../../components/customizableui/content/panelUI.inc.xul
|
|
+#include ../../components/controlcenter/content/panel.inc.xul
|
|
+#include ../../components/downloads/content/downloadsPanel.inc.xul
|
|
+#include browser-allTabsMenu.inc.xul
|
|
+
|
|
+ <hbox id="downloads-animation-container" mousethrough="always">
|
|
+ <vbox id="downloads-notification-anchor" hidden="true">
|
|
+ <vbox id="downloads-indicator-notification"/>
|
|
+ </vbox>
|
|
+ </hbox>
|
|
+
|
|
+ <tooltip id="dynamic-shortcut-tooltip"
|
|
+ onpopupshowing="UpdateDynamicShortcutTooltipText(this);"/>
|
|
+
|
|
+ <menupopup id="SyncedTabsSidebarContext">
|
|
+ <menuitem label="&syncedTabs.context.open.label;"
|
|
+ accesskey="&syncedTabs.context.open.accesskey;"
|
|
+ id="syncedTabsOpenSelected" where="current"/>
|
|
+ <menuitem label="&syncedTabs.context.openInNewTab.label;"
|
|
+ accesskey="&syncedTabs.context.openInNewTab.accesskey;"
|
|
+ id="syncedTabsOpenSelectedInTab" where="tab"/>
|
|
+ <menuitem label="&syncedTabs.context.openInNewWindow.label;"
|
|
+ accesskey="&syncedTabs.context.openInNewWindow.accesskey;"
|
|
+ id="syncedTabsOpenSelectedInWindow" where="window"/>
|
|
+ <menuitem label="&syncedTabs.context.openInNewPrivateWindow.label;"
|
|
+ accesskey="&syncedTabs.context.openInNewPrivateWindow.accesskey;"
|
|
+ id="syncedTabsOpenSelectedInPrivateWindow" where="window" private="true"/>
|
|
+ <menuseparator/>
|
|
+ <menuitem label="&syncedTabs.context.bookmarkSingleTab.label;"
|
|
+ accesskey="&syncedTabs.context.bookmarkSingleTab.accesskey;"
|
|
+ id="syncedTabsBookmarkSelected"/>
|
|
+ <menuitem label="&syncedTabs.context.copy.label;"
|
|
+ accesskey="&syncedTabs.context.copy.accesskey;"
|
|
+ id="syncedTabsCopySelected"/>
|
|
+ <menuseparator/>
|
|
+ <menuitem label="&syncedTabs.context.openAllInTabs.label;"
|
|
+ accesskey="&syncedTabs.context.openAllInTabs.accesskey;"
|
|
+ id="syncedTabsOpenAllInTabs"/>
|
|
+ <menuitem label="&syncedTabs.context.managedevices.label;"
|
|
+ accesskey="&syncedTabs.context.managedevices.accesskey;"
|
|
+ id="syncedTabsManageDevices"
|
|
+ oncommand="gSync.openDevicesManagementPage('syncedtabs-sidebar');"/>
|
|
+ <menuitem label="&syncSyncNowItem.label;"
|
|
+ accesskey="&syncSyncNowItem.accesskey;"
|
|
+ id="syncedTabsRefresh"/>
|
|
+ </menupopup>
|
|
+ <menupopup id="SyncedTabsSidebarTabsFilterContext"
|
|
+ class="textbox-contextmenu">
|
|
+ <menuitem label="&undoCmd.label;"
|
|
+ accesskey="&undoCmd.accesskey;"
|
|
+ cmd="cmd_undo"/>
|
|
+ <menuseparator/>
|
|
+ <menuitem label="&cutCmd.label;"
|
|
+ accesskey="&cutCmd.accesskey;"
|
|
+ cmd="cmd_cut"/>
|
|
+ <menuitem label="©Cmd.label;"
|
|
+ accesskey="©Cmd.accesskey;"
|
|
+ cmd="cmd_copy"/>
|
|
+ <menuitem label="&pasteCmd.label;"
|
|
+ accesskey="&pasteCmd.accesskey;"
|
|
+ cmd="cmd_paste"/>
|
|
+ <menuitem label="&deleteCmd.label;"
|
|
+ accesskey="&deleteCmd.accesskey;"
|
|
+ cmd="cmd_delete"/>
|
|
+ <menuseparator/>
|
|
+ <menuitem label="&selectAllCmd.label;"
|
|
+ accesskey="&selectAllCmd.accesskey;"
|
|
+ cmd="cmd_selectAll"/>
|
|
+ <menuseparator/>
|
|
+ <menuitem label="&syncSyncNowItem.label;"
|
|
+ accesskey="&syncSyncNowItem.accesskey;"
|
|
+ id="syncedTabsRefreshFilter"/>
|
|
+ </menupopup>
|
|
+
|
|
+ <hbox id="statuspanel" inactive="true" layer="true">
|
|
+ <hbox id="statuspanel-inner">
|
|
+ <label id="statuspanel-label"
|
|
+ role="status"
|
|
+ aria-live="off"
|
|
+ flex="1"
|
|
+ crop="end"/>
|
|
+ </hbox>
|
|
+ </hbox>
|
|
+ </popupset>
|
|
+ <box id="appMenu-viewCache" hidden="true"/>
|
|
+
|
|
+ <toolbox id="navigator-toolbox">
|
|
+
|
|
+ <vbox id="titlebar">
|
|
+ <!-- Menu -->
|
|
+ <toolbar type="menubar" id="toolbar-menubar"
|
|
+ class="browser-toolbar chromeclass-menubar titlebar-color"
|
|
+ customizable="true"
|
|
+ mode="icons"
|
|
+#ifdef MENUBAR_CAN_AUTOHIDE
|
|
+ toolbarname="&menubarCmd.label;"
|
|
+ accesskey="&menubarCmd.accesskey;"
|
|
+ autohide="true"
|
|
+#endif
|
|
+ context="toolbar-context-menu">
|
|
+ <toolbaritem id="menubar-items" align="center">
|
|
+# The entire main menubar is placed into browser-menubar.inc, so that it can be
|
|
+# shared with other top level windows in macWindow.inc.xul.
|
|
+#include browser-menubar.inc
|
|
+ </toolbaritem>
|
|
+ <spacer flex="1" skipintoolbarset="true" ordinal="1000"/>
|
|
+#include titlebar-items.inc.xul
|
|
+ </toolbar>
|
|
+
|
|
+ <toolbar id="TabsToolbar"
|
|
+ class="browser-toolbar titlebar-color"
|
|
+ fullscreentoolbar="true"
|
|
+ customizable="true"
|
|
+ customizationtarget="TabsToolbar-customization-target"
|
|
+ mode="icons"
|
|
+ aria-label="&tabsToolbar.label;"
|
|
+ context="toolbar-context-menu"
|
|
+ flex="1">
|
|
+
|
|
+ <hbox class="titlebar-spacer" type="pre-tabs"/>
|
|
+
|
|
+ <hbox flex="1" align="end" class="toolbar-items">
|
|
+ <hbox id="TabsToolbar-customization-target" flex="1">
|
|
+ <tabs id="tabbrowser-tabs"
|
|
+ flex="1"
|
|
+ setfocus="false"
|
|
+ tooltip="tabbrowser-tab-tooltip"
|
|
+ stopwatchid="FX_TAB_CLICK_MS">
|
|
+ <tab class="tabbrowser-tab" selected="true" visuallyselected="true" fadein="true"/>
|
|
+ </tabs>
|
|
+
|
|
+ <toolbarbutton id="new-tab-button"
|
|
+ class="toolbarbutton-1 chromeclass-toolbar-additional"
|
|
+ label="&tabCmd.label;"
|
|
+ command="cmd_newNavigatorTab"
|
|
+ onclick="checkForMiddleClick(this, event);"
|
|
+ tooltip="dynamic-shortcut-tooltip"
|
|
+ ondrop="newTabButtonObserver.onDrop(event)"
|
|
+ ondragover="newTabButtonObserver.onDragOver(event)"
|
|
+ ondragenter="newTabButtonObserver.onDragOver(event)"
|
|
+ ondragexit="newTabButtonObserver.onDragExit(event)"
|
|
+ cui-areatype="toolbar"
|
|
+ removable="true"/>
|
|
+
|
|
+ <toolbarbutton id="alltabs-button"
|
|
+ class="toolbarbutton-1 chromeclass-toolbar-additional tabs-alltabs-button badged-button"
|
|
+ oncommand="gTabsPanel.showAllTabsPanel();"
|
|
+ label="&listAllTabs.label;"
|
|
+ tooltiptext="&listAllTabs.label;"
|
|
+ removable="false"/>
|
|
+ </hbox>
|
|
+ </hbox>
|
|
+
|
|
+ <hbox class="titlebar-spacer" type="post-tabs"/>
|
|
+
|
|
+#ifndef XP_MACOSX
|
|
+ <button class="accessibility-indicator" tooltiptext="&accessibilityIndicator.tooltip;"
|
|
+ aria-live="polite"/>
|
|
+ <hbox class="private-browsing-indicator"/>
|
|
+#endif
|
|
+
|
|
+#include titlebar-items.inc.xul
|
|
+
|
|
+#ifdef XP_MACOSX
|
|
+ <!-- OS X does not natively support RTL for its titlebar items, so we prevent this secondary
|
|
+ buttonbox from reversing order in RTL by forcing an LTR direction. -->
|
|
+ <hbox id="titlebar-secondary-buttonbox" dir="ltr">
|
|
+ <button class="accessibility-indicator" tooltiptext="&accessibilityIndicator.tooltip;" aria-live="polite"/>
|
|
+ <hbox class="private-browsing-indicator"/>
|
|
+ <hbox id="titlebar-fullscreen-button"/>
|
|
+ </hbox>
|
|
+#endif
|
|
+ </toolbar>
|
|
+
|
|
+ </vbox>
|
|
+
|
|
+ <toolbar id="nav-bar"
|
|
+ class="browser-toolbar"
|
|
+ aria-label="&navbarCmd.label;"
|
|
+ fullscreentoolbar="true" mode="icons" customizable="true"
|
|
+ customizationtarget="nav-bar-customization-target"
|
|
+ overflowable="true"
|
|
+ overflowbutton="nav-bar-overflow-button"
|
|
+ overflowtarget="widget-overflow-list"
|
|
+ overflowpanel="widget-overflow"
|
|
+ context="toolbar-context-menu">
|
|
+
|
|
+ <hbox id="nav-bar-customization-target" flex="1">
|
|
+ <toolbarbutton id="back-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
|
|
+ label="&backCmd.label;"
|
|
+ removable="false" overflows="false"
|
|
+ keepbroadcastattributeswhencustomizing="true"
|
|
+ command="Browser:BackOrBackDuplicate"
|
|
+ onclick="checkForMiddleClick(this, event);"
|
|
+ tooltip="back-button-tooltip"
|
|
+ context="backForwardMenu"/>
|
|
+ <toolbarbutton id="forward-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
|
|
+ label="&forwardCmd.label;"
|
|
+ removable="false" overflows="false"
|
|
+ keepbroadcastattributeswhencustomizing="true"
|
|
+ command="Browser:ForwardOrForwardDuplicate"
|
|
+ onclick="checkForMiddleClick(this, event);"
|
|
+ tooltip="forward-button-tooltip"
|
|
+ context="backForwardMenu"/>
|
|
+ <toolbaritem id="stop-reload-button" class="chromeclass-toolbar-additional"
|
|
+ title="&reloadCmd.label;"
|
|
+ removable="true" overflows="false">
|
|
+ <toolbarbutton id="reload-button" class="toolbarbutton-1"
|
|
+ label="&reloadCmd.label;"
|
|
+ command="Browser:ReloadOrDuplicate"
|
|
+ onclick="checkForMiddleClick(this, event);"
|
|
+ tooltip="dynamic-shortcut-tooltip">
|
|
+ <box class="toolbarbutton-animatable-box">
|
|
+ <image class="toolbarbutton-animatable-image"/>
|
|
+ </box>
|
|
+ </toolbarbutton>
|
|
+ <toolbarbutton id="stop-button" class="toolbarbutton-1"
|
|
+ label="&stopCmd.label;"
|
|
+ command="Browser:Stop"
|
|
+ tooltip="dynamic-shortcut-tooltip">
|
|
+ <box class="toolbarbutton-animatable-box">
|
|
+ <image class="toolbarbutton-animatable-image"/>
|
|
+ </box>
|
|
+ </toolbarbutton>
|
|
+ </toolbaritem>
|
|
+ <toolbarbutton id="home-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
|
|
+ removable="true"
|
|
+ label="&homeButton.label;"
|
|
+ ondragover="homeButtonObserver.onDragOver(event)"
|
|
+ ondragenter="homeButtonObserver.onDragOver(event)"
|
|
+ ondrop="homeButtonObserver.onDrop(event)"
|
|
+ ondragexit="homeButtonObserver.onDragExit(event)"
|
|
+ key="goHome"
|
|
+ onclick="BrowserHome(event);"
|
|
+ cui-areatype="toolbar"
|
|
+ tooltiptext="&homeButton.defaultPage.tooltip;"/>
|
|
+ <toolbarspring cui-areatype="toolbar" class="chromeclass-toolbar-additional"/>
|
|
+ <toolbaritem id="urlbar-container" flex="400" persist="width"
|
|
+ removable="false"
|
|
+ class="chromeclass-location" overflows="false">
|
|
+ <textbox id="urlbar" flex="1"
|
|
+ placeholder="&urlbar.placeholder2;"
|
|
+ defaultPlaceholder="&urlbar.placeholder2;"
|
|
+ focused="true"
|
|
+ type="autocomplete"
|
|
+ autocompletesearch="unifiedcomplete"
|
|
+ autocompletesearchparam="enable-actions"
|
|
+ autocompletepopup="PopupAutoCompleteRichResult"
|
|
+ completeselectedindex="true"
|
|
+ tabscrolling="true"
|
|
+ newlines="stripsurroundingwhitespace"
|
|
+ ontextentered="this.handleCommand(param);"
|
|
+ ontextreverted="return this.handleRevert();"
|
|
+ pageproxystate="invalid">
|
|
+ <!-- Use onclick instead of normal popup= syntax since the popup
|
|
+ code fires onmousedown, and hence eats our favicon drag events. -->
|
|
+ <box id="identity-box" role="button"
|
|
+ align="center"
|
|
+ aria-label="&urlbar.viewSiteInfo.label;"
|
|
+ onclick="gIdentityHandler.handleIdentityButtonEvent(event);"
|
|
+ onkeypress="gIdentityHandler.handleIdentityButtonEvent(event);"
|
|
+ ondragstart="gIdentityHandler.onDragStart(event);">
|
|
+ <image id="identity-icon"
|
|
+ consumeanchor="identity-box"
|
|
+ onclick="PageProxyClickHandler(event);"/>
|
|
+ <image id="sharing-icon" mousethrough="always"/>
|
|
+ <box id="tracking-protection-icon-box" animationsenabled="true">
|
|
+ <image id="tracking-protection-icon"/>
|
|
+ <box id="tracking-protection-icon-animatable-box" flex="1">
|
|
+ <image id="tracking-protection-icon-animatable-image" flex="1"/>
|
|
+ </box>
|
|
+ </box>
|
|
+ <box id="blocked-permissions-container" align="center">
|
|
+ <image data-permission-id="geo" class="blocked-permission-icon geo-icon" role="button"
|
|
+ tooltiptext="&urlbar.geolocationBlocked.tooltip;"/>
|
|
+ <image data-permission-id="desktop-notification" class="blocked-permission-icon desktop-notification-icon" role="button"
|
|
+ tooltiptext="&urlbar.webNotificationsBlocked.tooltip;"/>
|
|
+ <image data-permission-id="camera" class="blocked-permission-icon camera-icon" role="button"
|
|
+ tooltiptext="&urlbar.cameraBlocked.tooltip;"/>
|
|
+ <image data-permission-id="microphone" class="blocked-permission-icon microphone-icon" role="button"
|
|
+ tooltiptext="&urlbar.microphoneBlocked.tooltip;"/>
|
|
+ <image data-permission-id="screen" class="blocked-permission-icon screen-icon" role="button"
|
|
+ tooltiptext="&urlbar.screenBlocked.tooltip;"/>
|
|
+ <image data-permission-id="persistent-storage" class="blocked-permission-icon persistent-storage-icon" role="button"
|
|
+ tooltiptext="&urlbar.persistentStorageBlocked.tooltip;"/>
|
|
+ <image data-permission-id="popup" class="blocked-permission-icon popup-icon" role="button"
|
|
+ tooltiptext="&urlbar.popupBlocked.tooltip;"/>
|
|
+ <image data-permission-id="autoplay-media" class="blocked-permission-icon autoplay-media-icon" role="button"
|
|
+ tooltiptext="&urlbar.autoplayMediaBlocked.tooltip;"/>
|
|
+ <image data-permission-id="canvas" class="blocked-permission-icon canvas-icon" role="button"
|
|
+ tooltiptext="&urlbar.canvasBlocked.tooltip;"/>
|
|
+ <image data-permission-id="plugin:flash" class="blocked-permission-icon plugin-icon" role="button"
|
|
+ tooltiptext="&urlbar.flashPluginBlocked.tooltip;"/>
|
|
+ <image data-permission-id="midi" class="blocked-permission-icon midi-icon" role="button"
|
|
+ tooltiptext="&urlbar.midiBlocked.tooltip;"/>
|
|
+ </box>
|
|
+ <box id="notification-popup-box"
|
|
+ hidden="true"
|
|
+ onmouseover="document.getElementById('identity-box').classList.add('no-hover');"
|
|
+ onmouseout="document.getElementById('identity-box').classList.remove('no-hover');"
|
|
+ align="center">
|
|
+ <image id="default-notification-icon" class="notification-anchor-icon" role="button"
|
|
+ tooltiptext="&urlbar.defaultNotificationAnchor.tooltip;"/>
|
|
+ <image id="geo-notification-icon" class="notification-anchor-icon geo-icon" role="button"
|
|
+ tooltiptext="&urlbar.geolocationNotificationAnchor.tooltip;"/>
|
|
+ <image id="autoplay-media-notification-icon" class="notification-anchor-icon autoplay-media-icon" role="button"
|
|
+ tooltiptext="&urlbar.autoplayNotificationAnchor.tooltip;"/>
|
|
+ <image id="addons-notification-icon" class="notification-anchor-icon install-icon" role="button"
|
|
+ tooltiptext="&urlbar.addonsNotificationAnchor.tooltip;"/>
|
|
+ <image id="canvas-notification-icon" class="notification-anchor-icon" role="button"
|
|
+ tooltiptext="&urlbar.canvasNotificationAnchor.tooltip;"/>
|
|
+ <image id="indexedDB-notification-icon" class="notification-anchor-icon indexedDB-icon" role="button"
|
|
+ tooltiptext="&urlbar.indexedDBNotificationAnchor.tooltip;"/>
|
|
+ <image id="password-notification-icon" class="notification-anchor-icon login-icon" role="button"
|
|
+ tooltiptext="&urlbar.passwordNotificationAnchor.tooltip;"/>
|
|
+ <stack id="plugins-notification-icon" class="notification-anchor-icon" role="button" align="center"
|
|
+ tooltiptext="&urlbar.pluginsNotificationAnchor.tooltip;">
|
|
+ <image class="plugin-icon" />
|
|
+ <image id="plugin-icon-badge" />
|
|
+ </stack>
|
|
+ <image id="web-notifications-notification-icon" class="notification-anchor-icon desktop-notification-icon" role="button"
|
|
+ tooltiptext="&urlbar.webNotificationAnchor.tooltip;"/>
|
|
+ <image id="webRTC-shareDevices-notification-icon" class="notification-anchor-icon camera-icon" role="button"
|
|
+ tooltiptext="&urlbar.webRTCShareDevicesNotificationAnchor.tooltip;"/>
|
|
+ <image id="webRTC-shareMicrophone-notification-icon" class="notification-anchor-icon microphone-icon" role="button"
|
|
+ tooltiptext="&urlbar.webRTCShareMicrophoneNotificationAnchor.tooltip;"/>
|
|
+ <image id="webRTC-shareScreen-notification-icon" class="notification-anchor-icon screen-icon" role="button"
|
|
+ tooltiptext="&urlbar.webRTCShareScreenNotificationAnchor.tooltip;"/>
|
|
+ <image id="servicesInstall-notification-icon" class="notification-anchor-icon service-icon" role="button"
|
|
+ tooltiptext="&urlbar.servicesNotificationAnchor.tooltip;"/>
|
|
+ <image id="translate-notification-icon" class="notification-anchor-icon translation-icon" role="button"
|
|
+ tooltiptext="&urlbar.translateNotificationAnchor.tooltip;"/>
|
|
+ <image id="translated-notification-icon" class="notification-anchor-icon translation-icon in-use" role="button"
|
|
+ tooltiptext="&urlbar.translatedNotificationAnchor.tooltip;"/>
|
|
+ <image id="eme-notification-icon" class="notification-anchor-icon drm-icon" role="button"
|
|
+ tooltiptext="&urlbar.emeNotificationAnchor.tooltip;"/>
|
|
+ <image id="persistent-storage-notification-icon" class="notification-anchor-icon persistent-storage-icon" role="button"
|
|
+ tooltiptext="&urlbar.persistentStorageNotificationAnchor.tooltip;"/>
|
|
+ <image id="midi-notification-icon" class="notification-anchor-icon midi-icon" role="button"
|
|
+ tooltiptext="&urlbar.midiNotificationAnchor.tooltip;"/>
|
|
+ <image id="webauthn-notification-icon" class="notification-anchor-icon" role="button"
|
|
+ tooltiptext="&urlbar.webAuthnAnchor.tooltip;"/>
|
|
+ <image id="storage-access-notification-icon" class="notification-anchor-icon storage-access-icon" role="button"
|
|
+ tooltiptext="&urlbar.storageAccessAnchor.tooltip;"/>
|
|
+ </box>
|
|
+ <image id="connection-icon"/>
|
|
+ <image id="extension-icon"/>
|
|
+ <image id="remote-control-icon"
|
|
+ tooltiptext="&urlbar.remoteControlNotificationAnchor.tooltip;"/>
|
|
+ <hbox id="identity-icon-labels">
|
|
+ <label id="identity-icon-label" class="plain" flex="1"/>
|
|
+ <label id="identity-icon-country-label" class="plain"/>
|
|
+ </hbox>
|
|
+ </box>
|
|
+ <box id="urlbar-display-box" align="center">
|
|
+ <label id="switchtab" class="urlbar-display urlbar-display-switchtab" value="&urlbar.switchToTab.label;"/>
|
|
+ <label id="extension" class="urlbar-display urlbar-display-extension" value="&urlbar.extension.label;"/>
|
|
+ </box>
|
|
+ <hbox id="page-action-buttons" context="pageActionContextMenu">
|
|
+ <hbox id="contextual-feature-recommendation" role="button" hidden="true">
|
|
+ <hbox id="cfr-label-container">
|
|
+ <label id="cfr-label"/>
|
|
+ </hbox>
|
|
+ <image id="cfr-button"
|
|
+ class="urlbar-icon urlbar-page-action"
|
|
+ role="presentation"/>
|
|
+ </hbox>
|
|
+ <hbox id="userContext-icons" hidden="true">
|
|
+ <label id="userContext-label"/>
|
|
+ <image id="userContext-indicator"/>
|
|
+ </hbox>
|
|
+ <image id="reader-mode-button"
|
|
+ class="urlbar-icon urlbar-page-action"
|
|
+ tooltip="dynamic-shortcut-tooltip"
|
|
+ role="button"
|
|
+ hidden="true"
|
|
+ onclick="ReaderParent.buttonClick(event);"/>
|
|
+ <toolbarbutton id="urlbar-zoom-button"
|
|
+ onclick="FullZoom.reset();"
|
|
+ tooltip="dynamic-shortcut-tooltip"
|
|
+ hidden="true"/>
|
|
+ <box id="pageActionSeparator" class="urlbar-page-action"/>
|
|
+ <image id="pageActionButton"
|
|
+ class="urlbar-icon urlbar-page-action"
|
|
+ role="button"
|
|
+ tooltiptext="&pageActionButton.tooltip;"
|
|
+ onmousedown="BrowserPageActions.mainButtonClicked(event);"
|
|
+ onkeypress="BrowserPageActions.mainButtonClicked(event);"/>
|
|
+ <hbox id="pocket-button-box"
|
|
+ hidden="true"
|
|
+ class="urlbar-icon-wrapper urlbar-page-action"
|
|
+ onclick="BrowserPageActions.doCommandForAction(PageActions.actionForID('pocket'), event, this);">
|
|
+ <image id="pocket-button"
|
|
+ class="urlbar-icon"
|
|
+ tooltiptext="&pocketButton.tooltiptext;"
|
|
+ role="button"/>
|
|
+ <hbox id="pocket-button-animatable-box">
|
|
+ <image id="pocket-button-animatable-image"
|
|
+ tooltiptext="&pocketButton.tooltiptext;"
|
|
+ role="presentation"/>
|
|
+ </hbox>
|
|
+ </hbox>
|
|
+ <hbox id="star-button-box"
|
|
+ hidden="true"
|
|
+ class="urlbar-icon-wrapper urlbar-page-action"
|
|
+ onclick="BrowserPageActions.doCommandForAction(PageActions.actionForID('bookmark'), event, this);">
|
|
+ <image id="star-button"
|
|
+ class="urlbar-icon"
|
|
+ role="button"/>
|
|
+ <hbox id="star-button-animatable-box">
|
|
+ <image id="star-button-animatable-image"
|
|
+ role="presentation"/>
|
|
+ </hbox>
|
|
+ </hbox>
|
|
+ </hbox>
|
|
+ </textbox>
|
|
+ </toolbaritem>
|
|
+
|
|
+ <toolbarspring cui-areatype="toolbar" class="chromeclass-toolbar-additional"/>
|
|
+
|
|
+ <!-- This is a placeholder for the Downloads Indicator. It is visible
|
|
+ during the customization of the toolbar, in the palette, and before
|
|
+ the Downloads Indicator overlay is loaded. -->
|
|
+ <toolbarbutton id="downloads-button"
|
|
+ class="toolbarbutton-1 chromeclass-toolbar-additional badged-button"
|
|
+ key="key_openDownloads"
|
|
+ onmousedown="DownloadsIndicatorView.onCommand(event);"
|
|
+ ondrop="DownloadsIndicatorView.onDrop(event);"
|
|
+ ondragover="DownloadsIndicatorView.onDragOver(event);"
|
|
+ ondragenter="DownloadsIndicatorView.onDragOver(event);"
|
|
+ label="&downloads.label;"
|
|
+ removable="true"
|
|
+ overflows="false"
|
|
+ cui-areatype="toolbar"
|
|
+ hidden="true"
|
|
+ tooltip="dynamic-shortcut-tooltip"
|
|
+ indicator="true">
|
|
+ <!-- The panel's anchor area is smaller than the outer button, but must
|
|
+ always be visible and must not move or resize when the indicator
|
|
+ state changes, otherwise the panel could change its position or lose
|
|
+ its arrow unexpectedly. -->
|
|
+ <stack id="downloads-indicator-anchor"
|
|
+ consumeanchor="downloads-button">
|
|
+ <box id="downloads-indicator-icon"/>
|
|
+ <stack id="downloads-indicator-progress-outer">
|
|
+ <box id="downloads-indicator-progress-inner"/>
|
|
+ </stack>
|
|
+ </stack>
|
|
+ </toolbarbutton>
|
|
+
|
|
+ <toolbarbutton id="library-button" class="toolbarbutton-1 chromeclass-toolbar-additional subviewbutton-nav"
|
|
+ removable="true"
|
|
+ onmousedown="PanelUI.showSubView('appMenu-libraryView', this, event);"
|
|
+ onkeypress="PanelUI.showSubView('appMenu-libraryView', this, event);"
|
|
+ closemenu="none"
|
|
+ cui-areatype="toolbar"
|
|
+ tooltiptext="&libraryButton.tooltip;"
|
|
+ label="&places.library.title;"/>
|
|
+
|
|
+ </hbox>
|
|
+
|
|
+ <toolbarbutton id="nav-bar-overflow-button"
|
|
+ class="toolbarbutton-1 chromeclass-toolbar-additional overflow-button"
|
|
+ skipintoolbarset="true"
|
|
+ tooltiptext="&navbarOverflow.label;">
|
|
+ <box class="toolbarbutton-animatable-box">
|
|
+ <image class="toolbarbutton-animatable-image"/>
|
|
+ </box>
|
|
+ </toolbarbutton>
|
|
+
|
|
+ <toolbaritem id="PanelUI-button"
|
|
+ removable="false">
|
|
+ <toolbarbutton id="PanelUI-menu-button"
|
|
+ class="toolbarbutton-1 badged-button"
|
|
+ consumeanchor="PanelUI-button"
|
|
+ label="&brandShortName;"
|
|
+ tooltiptext="&appmenu.tooltip;"/>
|
|
+ </toolbaritem>
|
|
+
|
|
+ <hbox id="window-controls" hidden="true" pack="end" skipintoolbarset="true"
|
|
+ ordinal="1000">
|
|
+ <toolbarbutton id="minimize-button"
|
|
+ tooltiptext="&fullScreenMinimize.tooltip;"
|
|
+ oncommand="window.minimize();"/>
|
|
+
|
|
+ <toolbarbutton id="restore-button"
|
|
+#ifdef XP_MACOSX
|
|
+# Prior to 10.7 there wasn't a native fullscreen button so we use #restore-button
|
|
+# to exit fullscreen and want it to behave like other toolbar buttons.
|
|
+ class="toolbarbutton-1"
|
|
+#endif
|
|
+ tooltiptext="&fullScreenRestore.tooltip;"
|
|
+ oncommand="BrowserFullScreen();"/>
|
|
+
|
|
+ <toolbarbutton id="close-button"
|
|
+ tooltiptext="&fullScreenClose.tooltip;"
|
|
+ oncommand="BrowserTryToCloseWindow();"/>
|
|
+ </hbox>
|
|
+
|
|
+ <box id="library-animatable-box" class="toolbarbutton-animatable-box">
|
|
+ <image class="toolbarbutton-animatable-image"/>
|
|
+ </box>
|
|
+ </toolbar>
|
|
+
|
|
+ <toolbar id="PersonalToolbar"
|
|
+ mode="icons"
|
|
+ class="browser-toolbar chromeclass-directories"
|
|
+ context="toolbar-context-menu"
|
|
+ toolbarname="&personalbarCmd.label;" accesskey="&personalbarCmd.accesskey;"
|
|
+ collapsed="true"
|
|
+ customizable="true">
|
|
+ <toolbaritem id="personal-bookmarks"
|
|
+ title="&bookmarksToolbarItem.label;"
|
|
+ cui-areatype="toolbar"
|
|
+ removable="true">
|
|
+ <toolbarbutton id="bookmarks-toolbar-placeholder"
|
|
+ class="bookmark-item"
|
|
+ label="&bookmarksToolbarItem.label;"/>
|
|
+ <toolbarbutton id="bookmarks-toolbar-button"
|
|
+ class="toolbarbutton-1"
|
|
+ flex="1"
|
|
+ label="&bookmarksToolbarItem.label;"
|
|
+ oncommand="PlacesToolbarHelper.onPlaceholderCommand();"/>
|
|
+ <hbox flex="1"
|
|
+ id="PlacesToolbar"
|
|
+ context="placesContext"
|
|
+ onmouseup="BookmarksEventHandler.onMouseUp(event);"
|
|
+ onclick="BookmarksEventHandler.onClick(event, this._placesView);"
|
|
+ oncommand="BookmarksEventHandler.onCommand(event);"
|
|
+ tooltip="bhTooltip"
|
|
+ popupsinherittooltip="true">
|
|
+ <hbox flex="1">
|
|
+ <hbox id="PlacesToolbarDropIndicatorHolder" align="center" collapsed="true">
|
|
+ <image id="PlacesToolbarDropIndicator"
|
|
+ mousethrough="always"
|
|
+ collapsed="true"/>
|
|
+ </hbox>
|
|
+ <scrollbox orient="horizontal"
|
|
+ id="PlacesToolbarItems"
|
|
+ flex="1"/>
|
|
+ <toolbarbutton type="menu"
|
|
+ id="PlacesChevron"
|
|
+ class="toolbarbutton-1"
|
|
+ mousethrough="never"
|
|
+ collapsed="true"
|
|
+ tooltiptext="&bookmarksToolbarChevron.tooltip;"
|
|
+ onpopupshowing="document.getElementById('PlacesToolbar')
|
|
+ ._placesView._onChevronPopupShowing(event);">
|
|
+ <menupopup id="PlacesChevronPopup"
|
|
+ placespopup="true"
|
|
+ tooltip="bhTooltip" popupsinherittooltip="true"
|
|
+ context="placesContext"/>
|
|
+ </toolbarbutton>
|
|
+ </hbox>
|
|
+ </hbox>
|
|
+ </toolbaritem>
|
|
+ </toolbar>
|
|
+
|
|
+ <toolbarpalette id="BrowserToolbarPalette">
|
|
+
|
|
+ <toolbarbutton id="print-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
|
|
+#ifdef XP_MACOSX
|
|
+ command="cmd_print"
|
|
+ tooltip="dynamic-shortcut-tooltip"
|
|
+#else
|
|
+ command="cmd_printPreview"
|
|
+ tooltiptext="&printButton.tooltip;"
|
|
+#endif
|
|
+ label="&printButton.label;"/>
|
|
+
|
|
+
|
|
+ <toolbarbutton id="new-window-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
|
|
+ label="&newNavigatorCmd.label;"
|
|
+ command="cmd_newNavigator"
|
|
+ tooltip="dynamic-shortcut-tooltip"
|
|
+ ondrop="newWindowButtonObserver.onDrop(event)"
|
|
+ ondragover="newWindowButtonObserver.onDragOver(event)"
|
|
+ ondragenter="newWindowButtonObserver.onDragOver(event)"
|
|
+ ondragexit="newWindowButtonObserver.onDragExit(event)"/>
|
|
+
|
|
+ <toolbarbutton id="fullscreen-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
|
|
+ observes="View:FullScreen"
|
|
+ type="checkbox"
|
|
+ label="&fullScreenCmd.label;"
|
|
+ tooltip="dynamic-shortcut-tooltip"/>
|
|
+
|
|
+ <toolbarbutton id="bookmarks-menu-button"
|
|
+ class="toolbarbutton-1 chromeclass-toolbar-additional subviewbutton-nav"
|
|
+ type="menu"
|
|
+ label="&bookmarksMenuButton2.label;"
|
|
+ tooltip="dynamic-shortcut-tooltip"
|
|
+ anchor="dropmarker"
|
|
+ ondragenter="PlacesMenuDNDHandler.onDragEnter(event);"
|
|
+ ondragover="PlacesMenuDNDHandler.onDragOver(event);"
|
|
+ ondragleave="PlacesMenuDNDHandler.onDragLeave(event);"
|
|
+ ondrop="PlacesMenuDNDHandler.onDrop(event);"
|
|
+ oncommand="BookmarkingUI.onCommand(event);">
|
|
+ <menupopup id="BMB_bookmarksPopup"
|
|
+ class="cui-widget-panel cui-widget-panelview cui-widget-panelWithFooter PanelUI-subView"
|
|
+ placespopup="true"
|
|
+ context="placesContext"
|
|
+ openInTabs="children"
|
|
+ side="top"
|
|
+ onmouseup="BookmarksEventHandler.onMouseUp(event);"
|
|
+ oncommand="BookmarksEventHandler.onCommand(event);"
|
|
+ onclick="BookmarksEventHandler.onClick(event, this.parentNode._placesView);"
|
|
+ onpopupshowing="BookmarkingUI.onPopupShowing(event);
|
|
+ BookmarkingUI.attachPlacesView(event, this);"
|
|
+ tooltip="bhTooltip" popupsinherittooltip="true">
|
|
+ <menuitem id="BMB_viewBookmarksSidebar"
|
|
+ class="menuitem-iconic subviewbutton"
|
|
+ label-show="&viewBookmarksSidebar2.label;"
|
|
+ label-hide="&hideBookmarksSidebar.label;"
|
|
+ oncommand="SidebarUI.toggle('viewBookmarksSidebar');"/>
|
|
+ <!-- NB: temporary solution for bug 985024, this should go away soon. -->
|
|
+ <menuitem id="BMB_bookmarksShowAllTop"
|
|
+ class="menuitem-iconic subviewbutton"
|
|
+ label="&showAllBookmarks2.label;"
|
|
+ command="Browser:ShowAllBookmarks"
|
|
+ key="manBookmarkKb"/>
|
|
+ <menuseparator/>
|
|
+ <menu id="BMB_bookmarksToolbar"
|
|
+ class="menu-iconic bookmark-item subviewbutton"
|
|
+ label="&personalbarCmd.label;"
|
|
+ container="true">
|
|
+ <menupopup id="BMB_bookmarksToolbarPopup"
|
|
+ placespopup="true"
|
|
+ context="placesContext"
|
|
+ onpopupshowing="if (!this.parentNode._placesView)
|
|
+ new PlacesMenu(event, `place:parent=${PlacesUtils.bookmarks.toolbarGuid}`,
|
|
+ PlacesUIUtils.getViewForNode(this.parentNode.parentNode).options);">
|
|
+ <menuitem id="BMB_viewBookmarksToolbar"
|
|
+ class="menuitem-iconic subviewbutton"
|
|
+ label-show="&viewBookmarksToolbar.label;"
|
|
+ label-hide="&hideBookmarksToolbar.label;"
|
|
+ oncommand="BookmarkingUI.toggleBookmarksToolbar();"/>
|
|
+ <menuseparator/>
|
|
+ <!-- Bookmarks toolbar items -->
|
|
+ </menupopup>
|
|
+ </menu>
|
|
+ <menu id="BMB_unsortedBookmarks"
|
|
+ class="menu-iconic bookmark-item subviewbutton"
|
|
+ label="&bookmarksMenuButton.other.label;"
|
|
+ container="true">
|
|
+ <menupopup id="BMB_unsortedBookmarksPopup"
|
|
+ placespopup="true"
|
|
+ context="placesContext"
|
|
+ onpopupshowing="if (!this.parentNode._placesView)
|
|
+ new PlacesMenu(event, `place:parent=${PlacesUtils.bookmarks.unfiledGuid}`,
|
|
+ PlacesUIUtils.getViewForNode(this.parentNode.parentNode).options);"/>
|
|
+ </menu>
|
|
+ <menu id="BMB_mobileBookmarks"
|
|
+ class="menu-iconic bookmark-item subviewbutton"
|
|
+ label="&bookmarksMenuButton.mobile.label;"
|
|
+ hidden="true"
|
|
+ container="true">
|
|
+ <menupopup id="BMB_mobileBookmarksPopup"
|
|
+ placespopup="true"
|
|
+ context="placesContext"
|
|
+ onpopupshowing="if (!this.parentNode._placesView)
|
|
+ new PlacesMenu(event, `place:parent=${PlacesUtils.bookmarks.mobileGuid}`,
|
|
+ PlacesUIUtils.getViewForNode(this.parentNode.parentNode).options);"/>
|
|
+ </menu>
|
|
+
|
|
+ <menuseparator/>
|
|
+ <!-- Bookmarks menu items will go here -->
|
|
+ <menuitem id="BMB_bookmarksShowAll"
|
|
+ class="subviewbutton panel-subview-footer"
|
|
+ label="&showAllBookmarks2.label;"
|
|
+ command="Browser:ShowAllBookmarks"
|
|
+ key="manBookmarkKb"/>
|
|
+ </menupopup>
|
|
+ </toolbarbutton>
|
|
+
|
|
+ <toolbaritem id="search-container"
|
|
+ class="chromeclass-toolbar-additional"
|
|
+ title="&searchItem.title;"
|
|
+ align="center"
|
|
+ flex="100"
|
|
+ persist="width">
|
|
+ <searchbar id="searchbar" flex="1"/>
|
|
+ </toolbaritem>
|
|
+ </toolbarpalette>
|
|
+ </toolbox>
|
|
+
|
|
+ <hbox id="fullscr-toggler" hidden="true"/>
|
|
+
|
|
+ <deck id="content-deck" flex="1">
|
|
+ <hbox flex="1" id="browser">
|
|
+ <vbox id="browser-border-start" hidden="true" layer="true"/>
|
|
+ <vbox id="sidebar-box" hidden="true" class="chromeclass-extrachrome">
|
|
+ <sidebarheader id="sidebar-header" align="center">
|
|
+ <toolbarbutton id="sidebar-switcher-target" flex="1" class="tabbable">
|
|
+ <image id="sidebar-icon" consumeanchor="sidebar-switcher-target"/>
|
|
+ <label id="sidebar-title" crop="end" flex="1" control="sidebar"/>
|
|
+ <image id="sidebar-switcher-arrow"/>
|
|
+ </toolbarbutton>
|
|
+ <image id="sidebar-throbber"/>
|
|
+# To ensure the button label's intrinsic width doesn't expand the sidebar
|
|
+# if the label is long, the button needs flex=1.
|
|
+# To ensure the button doesn't expand unnecessarily for short labels, the
|
|
+# spacer should significantly out-flex the button.
|
|
+ <spacer flex="1000"/>
|
|
+ <toolbarbutton id="sidebar-close" class="close-icon tabbable" tooltiptext="&sidebarCloseButton.tooltip;" oncommand="SidebarUI.hide();"/>
|
|
+ </sidebarheader>
|
|
+ <browser id="sidebar" flex="1" autoscroll="false" disablehistory="true" disablefullscreen="true"
|
|
+ style="min-width: 14em; width: 18em; max-width: 36em;" tooltip="aHTMLTooltip"/>
|
|
+ </vbox>
|
|
+
|
|
+ <splitter id="sidebar-splitter" class="chromeclass-extrachrome sidebar-splitter" hidden="true"/>
|
|
+ <vbox id="appcontent" flex="1">
|
|
+ <!-- gHighPriorityNotificationBox will be added here lazily. -->
|
|
+ <tabbox id="tabbrowser-tabbox"
|
|
+ flex="1" tabcontainer="tabbrowser-tabs">
|
|
+ <tabpanels id="tabbrowser-tabpanels"
|
|
+ flex="1" class="plain" selectedIndex="0"/>
|
|
+ </tabbox>
|
|
+ </vbox>
|
|
+ <vbox id="browser-border-end" hidden="true" layer="true"/>
|
|
+ </hbox>
|
|
+#include ../../components/customizableui/content/customizeMode.inc.xul
|
|
+ </deck>
|
|
+
|
|
+ <html:div id="fullscreen-warning" class="pointerlockfswarning" hidden="true">
|
|
+ <html:div class="pointerlockfswarning-domain-text">
|
|
+ &fullscreenWarning.beforeDomain.label;
|
|
+ <html:span class="pointerlockfswarning-domain"/>
|
|
+ &fullscreenWarning.afterDomain.label;
|
|
+ </html:div>
|
|
+ <html:div class="pointerlockfswarning-generic-text">
|
|
+ &fullscreenWarning.generic.label;
|
|
+ </html:div>
|
|
+ <html:button id="fullscreen-exit-button"
|
|
+ onclick="FullScreen.exitDomFullScreen();">
|
|
+#ifdef XP_MACOSX
|
|
+ &exitDOMFullscreenMac.button;
|
|
+#else
|
|
+ &exitDOMFullscreen.button;
|
|
+#endif
|
|
+ </html:button>
|
|
+ </html:div>
|
|
+
|
|
+ <html:div id="pointerlock-warning" class="pointerlockfswarning" hidden="true">
|
|
+ <html:div class="pointerlockfswarning-domain-text">
|
|
+ &pointerlockWarning.beforeDomain.label;
|
|
+ <html:span class="pointerlockfswarning-domain"/>
|
|
+ &pointerlockWarning.afterDomain.label;
|
|
+ </html:div>
|
|
+ <html:div class="pointerlockfswarning-generic-text">
|
|
+ &pointerlockWarning.generic.label;
|
|
+ </html:div>
|
|
+ </html:div>
|
|
+
|
|
+ <vbox id="browser-bottombox" layer="true">
|
|
+ <!-- gNotificationBox will be added here lazily. -->
|
|
+ </vbox>
|
|
+
|
|
+</window>
|
|
diff --git a/browser/base/jar.mn b/browser/base/jar.mn
|
|
--- a/browser/base/jar.mn
|
|
+++ b/browser/base/jar.mn
|
|
@@ -28,16 +28,18 @@ browser.jar:
|
|
content/browser/aboutTabCrashed.js (content/aboutTabCrashed.js)
|
|
content/browser/aboutTabCrashed.xhtml (content/aboutTabCrashed.xhtml)
|
|
* content/browser/browser.css (content/browser.css)
|
|
content/browser/browser.js (content/browser.js)
|
|
#ifdef MOZ_BROWSER_XHTML
|
|
* content/browser/browser.xhtml (content/browser.xhtml)
|
|
#endif
|
|
* content/browser/browser.xul (content/browser.xul)
|
|
+* content/browser/browser-kde.xul (content/browser-kde.xul)
|
|
+% override chrome://browser/content/browser.xul chrome://browser/content/browser-kde.xul desktop=kde
|
|
content/browser/browser-addons.js (content/browser-addons.js)
|
|
content/browser/browser-allTabsMenu.js (content/browser-allTabsMenu.js)
|
|
content/browser/browser-captivePortal.js (content/browser-captivePortal.js)
|
|
content/browser/browser-ctrlTab.js (content/browser-ctrlTab.js)
|
|
content/browser/browser-customization.js (content/browser-customization.js)
|
|
content/browser/browser-data-submission-info-bar.js (content/browser-data-submission-info-bar.js)
|
|
content/browser/browser-compacttheme.js (content/browser-compacttheme.js)
|
|
content/browser/browser-contentblocking.js (content/browser-contentblocking.js)
|
|
diff --git a/browser/components/build/nsModule.cpp b/browser/components/build/nsModule.cpp
|
|
--- a/browser/components/build/nsModule.cpp
|
|
+++ b/browser/components/build/nsModule.cpp
|
|
@@ -8,17 +8,17 @@
|
|
#include "nsBrowserCompsCID.h"
|
|
#include "DirectoryProvider.h"
|
|
|
|
#if defined(XP_WIN)
|
|
# include "nsWindowsShellService.h"
|
|
#elif defined(XP_MACOSX)
|
|
# include "nsMacShellService.h"
|
|
#elif defined(MOZ_WIDGET_GTK)
|
|
-# include "nsGNOMEShellService.h"
|
|
+# include "nsUnixShellService.h"
|
|
#endif
|
|
#include "nsIToolkitShellService.h"
|
|
|
|
#if defined(MOZ_WIDGET_COCOA)
|
|
# include "nsMacAttribution.h"
|
|
#endif
|
|
|
|
#if defined(XP_WIN)
|
|
@@ -34,18 +34,16 @@ using namespace mozilla::browser;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
NS_GENERIC_FACTORY_CONSTRUCTOR(DirectoryProvider)
|
|
#if defined(XP_WIN)
|
|
NS_GENERIC_FACTORY_CONSTRUCTOR(nsWindowsShellService)
|
|
#elif defined(XP_MACOSX)
|
|
NS_GENERIC_FACTORY_CONSTRUCTOR(nsMacShellService)
|
|
-#elif defined(MOZ_WIDGET_GTK)
|
|
-NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGNOMEShellService, Init)
|
|
#endif
|
|
|
|
#if defined(MOZ_WIDGET_COCOA)
|
|
NS_GENERIC_FACTORY_CONSTRUCTOR(nsMacAttributionService)
|
|
#endif
|
|
|
|
#if defined(XP_WIN)
|
|
NS_GENERIC_FACTORY_CONSTRUCTOR(nsIEHistoryEnumerator)
|
|
@@ -64,17 +62,17 @@ NS_DEFINE_NAMED_CID(NS_MACATTRIBUTIONSER
|
|
#endif
|
|
|
|
static const mozilla::Module::CIDEntry kBrowserCIDs[] = {
|
|
// clang-format off
|
|
{ &kNS_BROWSERDIRECTORYPROVIDER_CID, false, nullptr, DirectoryProviderConstructor },
|
|
#if defined(XP_WIN)
|
|
{ &kNS_SHELLSERVICE_CID, false, nullptr, nsWindowsShellServiceConstructor },
|
|
#elif defined(MOZ_WIDGET_GTK)
|
|
- { &kNS_SHELLSERVICE_CID, false, nullptr, nsGNOMEShellServiceConstructor },
|
|
+ { &kNS_SHELLSERVICE_CID, false, nullptr, nsUnixShellServiceConstructor },
|
|
#elif defined(XP_MACOSX)
|
|
{ &kNS_SHELLSERVICE_CID, false, nullptr, nsMacShellServiceConstructor },
|
|
#endif
|
|
{ &kNS_BROWSER_ABOUT_REDIRECTOR_CID, false, nullptr, AboutRedirector::Create },
|
|
#if defined(XP_WIN)
|
|
{ &kNS_WINIEHISTORYENUMERATOR_CID, false, nullptr, nsIEHistoryEnumeratorConstructor },
|
|
#endif
|
|
#if defined(MOZ_WIDGET_COCOA)
|
|
diff --git a/browser/components/preferences/in-content/main.js b/browser/components/preferences/in-content/main.js
|
|
--- a/browser/components/preferences/in-content/main.js
|
|
+++ b/browser/components/preferences/in-content/main.js
|
|
@@ -289,16 +289,23 @@ var gMainPane = {
|
|
this._backoffIndex++ : backoffTimes.length - 1]);
|
|
};
|
|
|
|
window.setTimeout(() => {
|
|
window.requestIdleCallback(pollForDefaultBrowser);
|
|
}, backoffTimes[this._backoffIndex]);
|
|
}
|
|
|
|
+ var env = Components.classes["@mozilla.org/process/environment;1"]
|
|
+ .getService(Components.interfaces.nsIEnvironment);
|
|
+ var kde_session = 0;
|
|
+ if (env.get('KDE_FULL_SESSION') == "true") {
|
|
+ kde_session = 1;
|
|
+ }
|
|
+
|
|
this.initBrowserContainers();
|
|
this.buildContentProcessCountMenuList();
|
|
|
|
let performanceSettingsLink = document.getElementById("performanceSettingsLearnMore");
|
|
let performanceSettingsUrl = Services.urlFormatter.formatURLPref("app.support.baseURL") + "performance";
|
|
performanceSettingsLink.setAttribute("href", performanceSettingsUrl);
|
|
|
|
this.updateDefaultPerformanceSettingsPref();
|
|
@@ -1021,16 +1028,27 @@ var gMainPane = {
|
|
// Reset exponential backoff delay time in order to do visual update in pollForDefaultBrowser.
|
|
this._backoffIndex = 0;
|
|
|
|
let shellSvc = getShellService();
|
|
if (!shellSvc)
|
|
return;
|
|
try {
|
|
shellSvc.setDefaultBrowser(true, false);
|
|
+ if (kde_session == 1) {
|
|
+ var shellObj = Components.classes["@mozilla.org/file/local;1"]
|
|
+ .createInstance(Components.interfaces.nsILocalFile);
|
|
+ shellObj.initWithPath("/usr/bin/kwriteconfig");
|
|
+ var process = Components.classes["@mozilla.org/process/util;1"]
|
|
+ .createInstance(Components.interfaces.nsIProcess);
|
|
+ process.init(shellObj);
|
|
+ var args = ["--file", "kdeglobals", "--group", "General", "--key",
|
|
+ "BrowserApplication", "firefox"];
|
|
+ process.run(false, args, args.length);
|
|
+ }
|
|
} catch (ex) {
|
|
Cu.reportError(ex);
|
|
return;
|
|
}
|
|
|
|
let selectedIndex = shellSvc.isDefaultBrowser(false, true) ? 1 : 0;
|
|
document.getElementById("setDefaultPane").selectedIndex = selectedIndex;
|
|
}
|
|
diff --git a/browser/components/shell/moz.build b/browser/components/shell/moz.build
|
|
--- a/browser/components/shell/moz.build
|
|
+++ b/browser/components/shell/moz.build
|
|
@@ -29,16 +29,18 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'coco
|
|
]
|
|
elif 'gtk' in CONFIG['MOZ_WIDGET_TOOLKIT']:
|
|
XPIDL_SOURCES += [
|
|
'nsIGNOMEShellService.idl',
|
|
]
|
|
|
|
SOURCES += [
|
|
'nsGNOMEShellService.cpp',
|
|
+ 'nsKDEShellService.cpp',
|
|
+ 'nsUnixShellService.cpp',
|
|
]
|
|
elif CONFIG['OS_ARCH'] == 'WINNT':
|
|
SOURCES += [
|
|
'nsWindowsShellService.cpp',
|
|
]
|
|
LOCAL_INCLUDES += [
|
|
'../../../other-licenses/nsis/Contrib/CityHash/cityhash',
|
|
]
|
|
diff --git a/browser/components/shell/nsKDEShellService.cpp b/browser/components/shell/nsKDEShellService.cpp
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/browser/components/shell/nsKDEShellService.cpp
|
|
@@ -0,0 +1,150 @@
|
|
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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/. */
|
|
+
|
|
+#include "mozilla/ArrayUtils.h"
|
|
+
|
|
+#include "nsCOMPtr.h"
|
|
+#include "nsKDEShellService.h"
|
|
+#include "nsShellService.h"
|
|
+#include "nsKDEUtils.h"
|
|
+#include "nsIPrefService.h"
|
|
+#include "nsIProcess.h"
|
|
+#include "nsIFile.h"
|
|
+#include "nsServiceManagerUtils.h"
|
|
+#include "nsComponentManagerUtils.h"
|
|
+#include "nsIMutableArray.h"
|
|
+#include "nsISupportsPrimitives.h"
|
|
+#include "nsArrayUtils.h"
|
|
+
|
|
+using namespace mozilla;
|
|
+
|
|
+nsresult
|
|
+nsKDEShellService::Init()
|
|
+{
|
|
+ if( !nsKDEUtils::kdeSupport())
|
|
+ return NS_ERROR_NOT_AVAILABLE;
|
|
+ return NS_OK;
|
|
+}
|
|
+
|
|
+NS_IMPL_ISUPPORTS(nsKDEShellService, nsIGNOMEShellService, nsIShellService)
|
|
+
|
|
+NS_IMETHODIMP
|
|
+nsKDEShellService::IsDefaultBrowser(bool aForAllTypes,
|
|
+ bool* aIsDefaultBrowser)
|
|
+{
|
|
+ *aIsDefaultBrowser = false;
|
|
+
|
|
+ nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
|
|
+ if (!command)
|
|
+ return NS_ERROR_FAILURE;
|
|
+
|
|
+ nsCOMPtr<nsISupportsCString> str = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
|
|
+ if (!str)
|
|
+ return NS_ERROR_FAILURE;
|
|
+
|
|
+ str->SetData( NS_LITERAL_CSTRING( "ISDEFAULTBROWSER" ));
|
|
+ command->AppendElement( str );
|
|
+
|
|
+ if( nsKDEUtils::command( command ))
|
|
+ *aIsDefaultBrowser = true;
|
|
+ return NS_OK;
|
|
+}
|
|
+
|
|
+NS_IMETHODIMP
|
|
+nsKDEShellService::SetDefaultBrowser(bool aClaimAllTypes,
|
|
+ bool aForAllUsers)
|
|
+{
|
|
+ nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
|
|
+ if (!command)
|
|
+ return NS_ERROR_FAILURE;
|
|
+
|
|
+ nsCOMPtr<nsISupportsCString> cmdstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
|
|
+ nsCOMPtr<nsISupportsCString> paramstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
|
|
+ if (!cmdstr || !paramstr)
|
|
+ return NS_ERROR_FAILURE;
|
|
+
|
|
+ cmdstr->SetData( NS_LITERAL_CSTRING( "SETDEFAULTBROWSER" ));
|
|
+ command->AppendElement( cmdstr );
|
|
+
|
|
+ paramstr->SetData( aClaimAllTypes ? NS_LITERAL_CSTRING( "ALLTYPES" ) : NS_LITERAL_CSTRING( "NORMAL" ));
|
|
+ command->AppendElement( paramstr );
|
|
+
|
|
+ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
|
|
+}
|
|
+
|
|
+NS_IMETHODIMP
|
|
+nsKDEShellService::GetCanSetDesktopBackground(bool* aResult)
|
|
+{
|
|
+ *aResult = true;
|
|
+ return NS_OK;
|
|
+}
|
|
+
|
|
+NS_IMETHODIMP
|
|
+nsKDEShellService::SetDesktopBackground(dom::Element* aElement,
|
|
+ int32_t aPosition,
|
|
+ const nsACString& aImageName)
|
|
+{
|
|
+ return NS_ERROR_NOT_IMPLEMENTED;
|
|
+}
|
|
+
|
|
+NS_IMETHODIMP
|
|
+nsKDEShellService::GetDesktopBackgroundColor(PRUint32 *aColor)
|
|
+{
|
|
+ return NS_ERROR_NOT_IMPLEMENTED;
|
|
+}
|
|
+
|
|
+NS_IMETHODIMP
|
|
+nsKDEShellService::SetDesktopBackgroundColor(PRUint32 aColor)
|
|
+{
|
|
+ return NS_ERROR_NOT_IMPLEMENTED;
|
|
+}
|
|
+
|
|
+NS_IMETHODIMP
|
|
+nsKDEShellService::OpenApplication(PRInt32 aApplication)
|
|
+{
|
|
+ nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
|
|
+ if (!command)
|
|
+ return NS_ERROR_FAILURE;
|
|
+
|
|
+ nsCOMPtr<nsISupportsCString> str = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
|
|
+ if (!str)
|
|
+ return NS_ERROR_FAILURE;
|
|
+
|
|
+ if( aApplication == APPLICATION_MAIL )
|
|
+ str->SetData( NS_LITERAL_CSTRING( "OPENMAIL" ));
|
|
+ else if( aApplication == APPLICATION_NEWS )
|
|
+ str->SetData( NS_LITERAL_CSTRING( "OPENNEWS" ));
|
|
+ else
|
|
+ return NS_ERROR_NOT_IMPLEMENTED;
|
|
+
|
|
+ command->AppendElement( str );
|
|
+ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
|
|
+}
|
|
+
|
|
+NS_IMETHODIMP
|
|
+nsKDEShellService::OpenApplicationWithURI(nsIFile* aApplication, const nsACString& aURI)
|
|
+{
|
|
+ nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
|
|
+ if (!command)
|
|
+ return NS_ERROR_FAILURE;
|
|
+
|
|
+ nsCOMPtr<nsISupportsCString> cmdstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
|
|
+ nsCOMPtr<nsISupportsCString> appstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
|
|
+ nsCOMPtr<nsISupportsCString> uristr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
|
|
+ if (!cmdstr || !appstr || !uristr)
|
|
+ return NS_ERROR_FAILURE;
|
|
+
|
|
+ cmdstr->SetData( NS_LITERAL_CSTRING( "RUN" ));
|
|
+ command->AppendElement( cmdstr );
|
|
+ nsAutoCString app;
|
|
+ nsresult rv = aApplication->GetNativePath( app );
|
|
+ NS_ENSURE_SUCCESS( rv, rv );
|
|
+ appstr->SetData( app );
|
|
+ command->AppendElement( appstr );
|
|
+ uristr->SetData( aURI );
|
|
+ command->AppendElement( uristr );
|
|
+ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
|
|
+}
|
|
+
|
|
diff --git a/browser/components/shell/nsKDEShellService.h b/browser/components/shell/nsKDEShellService.h
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/browser/components/shell/nsKDEShellService.h
|
|
@@ -0,0 +1,32 @@
|
|
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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/. */
|
|
+
|
|
+#ifndef nskdeshellservice_h____
|
|
+#define nskdeshellservice_h____
|
|
+
|
|
+#include "nsIGNOMEShellService.h"
|
|
+#include "nsToolkitShellService.h"
|
|
+#include "nsString.h"
|
|
+#include "mozilla/Attributes.h"
|
|
+
|
|
+class nsKDEShellService final : public nsIGNOMEShellService,
|
|
+ public nsToolkitShellService
|
|
+{
|
|
+public:
|
|
+ nsKDEShellService() : mCheckedThisSession(false) { }
|
|
+
|
|
+ NS_DECL_ISUPPORTS
|
|
+ NS_DECL_NSISHELLSERVICE
|
|
+ NS_DECL_NSIGNOMESHELLSERVICE
|
|
+
|
|
+ nsresult Init();
|
|
+
|
|
+private:
|
|
+ ~nsKDEShellService() {}
|
|
+
|
|
+ bool mCheckedThisSession;
|
|
+};
|
|
+
|
|
+#endif // nskdeshellservice_h____
|
|
diff --git a/browser/components/shell/nsUnixShellService.cpp b/browser/components/shell/nsUnixShellService.cpp
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/browser/components/shell/nsUnixShellService.cpp
|
|
@@ -0,0 +1,22 @@
|
|
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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/. */
|
|
+
|
|
+
|
|
+#include "nsUnixShellService.h"
|
|
+#include "nsGNOMEShellService.h"
|
|
+#include "nsKDEShellService.h"
|
|
+#include "nsKDEUtils.h"
|
|
+#include "mozilla/ModuleUtils.h"
|
|
+
|
|
+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGNOMEShellService, Init)
|
|
+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsKDEShellService, Init)
|
|
+
|
|
+NS_IMETHODIMP
|
|
+nsUnixShellServiceConstructor(nsISupports *aOuter, REFNSIID aIID, void **aResult)
|
|
+{
|
|
+ if( nsKDEUtils::kdeSupport())
|
|
+ return nsKDEShellServiceConstructor( aOuter, aIID, aResult );
|
|
+ return nsGNOMEShellServiceConstructor( aOuter, aIID, aResult );
|
|
+}
|
|
diff --git a/browser/components/shell/nsUnixShellService.h b/browser/components/shell/nsUnixShellService.h
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/browser/components/shell/nsUnixShellService.h
|
|
@@ -0,0 +1,15 @@
|
|
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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/. */
|
|
+
|
|
+
|
|
+#ifndef nsunixshellservice_h____
|
|
+#define nsunixshellservice_h____
|
|
+
|
|
+#include "nsIGNOMEShellService.h"
|
|
+
|
|
+NS_IMETHODIMP
|
|
+nsUnixShellServiceConstructor(nsISupports *aOuter, REFNSIID aIID, void **aResult);
|
|
+
|
|
+#endif // nsunixshellservice_h____
|
|
diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in
|
|
--- a/browser/installer/package-manifest.in
|
|
+++ b/browser/installer/package-manifest.in
|
|
@@ -452,16 +452,18 @@
|
|
@RESPATH@/browser/defaults/settings/pinning
|
|
@RESPATH@/browser/defaults/settings/main
|
|
|
|
; Warning: changing the path to channel-prefs.js can cause bugs (Bug 756325)
|
|
; Technically this is an app pref file, but we are keeping it in the original
|
|
; gre location for now.
|
|
@RESPATH@/defaults/pref/channel-prefs.js
|
|
|
|
+@RESPATH@/defaults/pref/kde.js
|
|
+
|
|
; Services (gre) prefs
|
|
@RESPATH@/defaults/pref/services-sync.js
|
|
|
|
; [Layout Engine Resources]
|
|
; Style Sheets, Graphics and other Resources used by the layout engine.
|
|
@RESPATH@/res/EditorOverride.css
|
|
@RESPATH@/res/contenteditable.css
|
|
@RESPATH@/res/designmode.css
|