firefox-kde.patch
changeset 1113 8e9195853a32
parent 1112 8a4f5aea2475
child 1121 004e4b1efb26
equal deleted inserted replaced
1088:84cdfb476431 1113:8e9195853a32
     1 # HG changeset patch
     1 # HG changeset patch
     2 # Parent  693f0baece29cc958a7d91b89fd12e3b89a502e3
     2 # User msirringhaus@suse.de
       
     3 # Date 1559300151 -7200
       
     4 #      Fri May 31 12:55:51 2019 +0200
       
     5 # Node ID 54d41b0033b8d649d842a1f862c6fed8b9874dec
       
     6 # Parent  4faaad3619f286bd6077754d8e59d339a5142b80
       
     7 How to apply this patch:
       
     8 1. Import and apply it
       
     9 2. cp browser/base/content/browser.xul browser/base/content/browser-kde.xul
       
    10 3. Find editBookmarkPanelDoneButton
       
    11 4. Replace #ifndef with #ifdef in the line above (this hanges the button order from Gnome-style to KDE-style)
       
    12 5. hg qrefresh
     3 
    13 
     4 diff --git a/browser/base/content/browser-kde.xul b/browser/base/content/browser-kde.xul
       
     5 new file mode 100644
       
     6 --- /dev/null
       
     7 +++ b/browser/base/content/browser-kde.xul
       
     8 @@ -0,0 +1,1395 @@
       
     9 +#filter substitution
       
    10 +<?xml version="1.0"?>
       
    11 +# -*- Mode: HTML -*-
       
    12 +#
       
    13 +# This Source Code Form is subject to the terms of the Mozilla Public
       
    14 +# License, v. 2.0. If a copy of the MPL was not distributed with this
       
    15 +# file, You can obtain one at http://mozilla.org/MPL/2.0/.
       
    16 +
       
    17 +<!-- The "global.css" stylesheet is imported first to allow other stylesheets to
       
    18 +     override rules using selectors with the same specificity. This applies to
       
    19 +     both "content" and "skin" packages, which bug 1385444 will unify later. -->
       
    20 +<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
       
    21 +
       
    22 +<!-- While these stylesheets are defined in Toolkit, they are only used in the
       
    23 +     main browser window, so we can load them here. Bug 1474241 is on file to
       
    24 +     consider moving these widgets to the "browser" folder. -->
       
    25 +<?xml-stylesheet href="chrome://global/content/tabprompts.css" type="text/css"?>
       
    26 +<?xml-stylesheet href="chrome://global/skin/tabprompts.css" type="text/css"?>
       
    27 +
       
    28 +<?xml-stylesheet href="chrome://browser/content/browser.css" type="text/css"?>
       
    29 +<?xml-stylesheet href="chrome://browser/content/tabbrowser.css" type="text/css"?>
       
    30 +<?xml-stylesheet href="chrome://browser/content/downloads/downloads.css" type="text/css"?>
       
    31 +<?xml-stylesheet href="chrome://browser/content/places/places.css" type="text/css"?>
       
    32 +<?xml-stylesheet href="chrome://browser/content/usercontext/usercontext.css" type="text/css"?>
       
    33 +<?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
       
    34 +<?xml-stylesheet href="chrome://browser/skin/controlcenter/panel.css" type="text/css"?>
       
    35 +<?xml-stylesheet href="chrome://browser/skin/customizableui/panelUI.css" type="text/css"?>
       
    36 +<?xml-stylesheet href="chrome://browser/skin/downloads/downloads.css" type="text/css"?>
       
    37 +<?xml-stylesheet href="chrome://browser/skin/searchbar.css" type="text/css"?>
       
    38 +<?xml-stylesheet href="chrome://browser/skin/places/tree-icons.css" type="text/css"?>
       
    39 +<?xml-stylesheet href="chrome://browser/skin/places/editBookmark.css" type="text/css"?>
       
    40 +<?xml-stylesheet href="chrome://browser/skin/compacttheme.css" type="text/css" alternate="yes" title="Light/Dark"?>
       
    41 +
       
    42 +# All DTD information is stored in a separate file so that it can be shared by
       
    43 +# hiddenWindow.xul.
       
    44 +<!DOCTYPE window [
       
    45 +#include browser-doctype.inc
       
    46 +]>
       
    47 +
       
    48 +<window id="main-window"
       
    49 +        xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
       
    50 +        xmlns:svg="http://www.w3.org/2000/svg"
       
    51 +        xmlns:html="http://www.w3.org/1999/xhtml"
       
    52 +        xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
       
    53 +        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
       
    54 +        title="&mainWindow.title;"
       
    55 +        title_normal="&mainWindow.title;"
       
    56 +#ifdef XP_MACOSX
       
    57 +        title_privatebrowsing="&mainWindow.title;&mainWindow.titlemodifiermenuseparator;&mainWindow.titlePrivateBrowsingSuffix;"
       
    58 +        titledefault="&mainWindow.title;"
       
    59 +        titlemodifier=""
       
    60 +        titlemodifier_normal=""
       
    61 +        titlemodifier_privatebrowsing="&mainWindow.titlePrivateBrowsingSuffix;"
       
    62 +#else
       
    63 +        title_privatebrowsing="&mainWindow.titlemodifier; &mainWindow.titlePrivateBrowsingSuffix;"
       
    64 +        titlemodifier="&mainWindow.titlemodifier;"
       
    65 +        titlemodifier_normal="&mainWindow.titlemodifier;"
       
    66 +        titlemodifier_privatebrowsing="&mainWindow.titlemodifier; &mainWindow.titlePrivateBrowsingSuffix;"
       
    67 +#endif
       
    68 +#ifdef XP_WIN
       
    69 +        chromemargin="0,2,2,2"
       
    70 +#else
       
    71 +        chromemargin="0,-1,-1,-1"
       
    72 +#endif
       
    73 +        tabsintitlebar="true"
       
    74 +        titlemenuseparator="&mainWindow.titlemodifiermenuseparator;"
       
    75 +        windowtype="navigator:browser"
       
    76 +        macanimationtype="document"
       
    77 +        screenX="4" screenY="4"
       
    78 +        fullscreenbutton="true"
       
    79 +        sizemode="normal"
       
    80 +        retargetdocumentfocus="urlbar"
       
    81 +        persist="screenX screenY width height sizemode"
       
    82 +#ifdef BROWSER_XHTML
       
    83 +        hidden="true"
       
    84 +        mozpersist=""
       
    85 +#endif
       
    86 +        >
       
    87 +
       
    88 +# All JS files which are needed by browser.xul and other top level windows to
       
    89 +# support MacOS specific features *must* go into the global-scripts.inc file so
       
    90 +# that they can be shared with macWindow.inc.xul.
       
    91 +#include global-scripts.inc
       
    92 +
       
    93 +<script type="application/javascript"
       
    94 +#ifdef BROWSER_XHTML
       
    95 +xmlns="http://www.w3.org/1999/xhtml"
       
    96 +#endif
       
    97 +>
       
    98 +  Services.scriptloader.loadSubScript("chrome://global/content/contentAreaUtils.js", this);
       
    99 +  Services.scriptloader.loadSubScript("chrome://browser/content/browser-captivePortal.js", this);
       
   100 +  Services.scriptloader.loadSubScript("chrome://browser/content/browser-compacttheme.js", this);
       
   101 +  Services.scriptloader.loadSubScript("chrome://browser/content/browser-contentblocking.js", this);
       
   102 +#ifdef MOZ_DATA_REPORTING
       
   103 +  Services.scriptloader.loadSubScript("chrome://browser/content/browser-data-submission-info-bar.js", this);
       
   104 +#endif
       
   105 +#ifndef MOZILLA_OFFICIAL
       
   106 +  Services.scriptloader.loadSubScript("chrome://browser/content/browser-development-helpers.js", this);
       
   107 +#endif
       
   108 +  Services.scriptloader.loadSubScript("chrome://browser/content/browser-media.js", this);
       
   109 +  Services.scriptloader.loadSubScript("chrome://browser/content/browser-pageActions.js", this);
       
   110 +  Services.scriptloader.loadSubScript("chrome://browser/content/browser-plugins.js", this);
       
   111 +  Services.scriptloader.loadSubScript("chrome://browser/content/browser-sidebar.js", this);
       
   112 +  Services.scriptloader.loadSubScript("chrome://browser/content/browser-tabsintitlebar.js", this);
       
   113 +  Services.scriptloader.loadSubScript("chrome://browser/content/tabbrowser.js", this);
       
   114 +  Services.scriptloader.loadSubScript("chrome://browser/content/search/searchbar.js", this);
       
   115 +
       
   116 +  window.onload = gBrowserInit.onLoad.bind(gBrowserInit);
       
   117 +  window.onunload = gBrowserInit.onUnload.bind(gBrowserInit);
       
   118 +  window.onclose = WindowIsClosing;
       
   119 +
       
   120 +#ifdef BROWSER_XHTML
       
   121 +  window.addEventListener("readystatechange", () => {
       
   122 +    // We initially hide the window to prevent layouts during parse. This lets us
       
   123 +    // avoid accidental XBL construction and better match browser.xul (see Bug 1497975).
       
   124 +    gBrowserInit.onBeforeInitialXULLayout();
       
   125 +    document.documentElement.removeAttribute("hidden");
       
   126 +  }, { once: true, capture: true });
       
   127 +#else
       
   128 +  window.addEventListener("MozBeforeInitialXULLayout",
       
   129 +    gBrowserInit.onBeforeInitialXULLayout.bind(gBrowserInit), { once: true });
       
   130 +#endif
       
   131 +  // The listener of DOMContentLoaded must be set on window, rather than
       
   132 +  // document, because the window can go away before the event is fired.
       
   133 +  // In that case, we don't want to initialize anything, otherwise we
       
   134 +  // may be leaking things because they will never be destroyed after.
       
   135 +  window.addEventListener("DOMContentLoaded",
       
   136 +    gBrowserInit.onDOMContentLoaded.bind(gBrowserInit), { once: true });
       
   137 +</script>
       
   138 +
       
   139 +# All sets except for popupsets (commands, keys, and stringbundles)
       
   140 +# *must* go into the browser-sets.inc file so that they can be shared with other
       
   141 +# top level windows in macWindow.inc.xul.
       
   142 +#include browser-sets.inc
       
   143 +
       
   144 +  <popupset id="mainPopupSet">
       
   145 +    <menupopup id="tabContextMenu"
       
   146 +               onpopupshowing="if (event.target == this) TabContextMenu.updateContextMenu(this);"
       
   147 +               onpopuphidden="if (event.target == this) TabContextMenu.contextTab = null;">
       
   148 +      <menuitem id="context_reloadTab" label="&reloadTab.label;" accesskey="&reloadTab.accesskey;"
       
   149 +                oncommand="gBrowser.reloadTab(TabContextMenu.contextTab);"/>
       
   150 +      <menuitem id="context_reloadSelectedTabs" label="&reloadTabs.label;" hidden="true"
       
   151 +                accesskey="&reloadTabs.accesskey;"
       
   152 +                oncommand="gBrowser.reloadMultiSelectedTabs();"/>
       
   153 +      <menuitem id="context_toggleMuteTab" oncommand="TabContextMenu.contextTab.toggleMuteAudio();"/>
       
   154 +      <menuitem id="context_toggleMuteSelectedTabs" hidden="true"
       
   155 +                oncommand="gBrowser.toggleMuteAudioOnMultiSelectedTabs(TabContextMenu.contextTab);"/>
       
   156 +      <menuitem id="context_pinTab" label="&pinTab.label;"
       
   157 +                accesskey="&pinTab.accesskey;"
       
   158 +                oncommand="gBrowser.pinTab(TabContextMenu.contextTab);"/>
       
   159 +      <menuitem id="context_unpinTab" label="&unpinTab.label;" hidden="true"
       
   160 +                accesskey="&unpinTab.accesskey;"
       
   161 +                oncommand="gBrowser.unpinTab(TabContextMenu.contextTab);"/>
       
   162 +      <menuitem id="context_pinSelectedTabs" label="&pinSelectedTabs.label;" hidden="true"
       
   163 +                accesskey="&pinSelectedTabs.accesskey;"
       
   164 +                oncommand="gBrowser.pinMultiSelectedTabs();"/>
       
   165 +      <menuitem id="context_unpinSelectedTabs" label="&unpinSelectedTabs.label;" hidden="true"
       
   166 +                accesskey="&unpinSelectedTabs.accesskey;"
       
   167 +                oncommand="gBrowser.unpinMultiSelectedTabs();"/>
       
   168 +      <menuitem id="context_duplicateTab" label="&duplicateTab.label;"
       
   169 +                accesskey="&duplicateTab.accesskey;"
       
   170 +                oncommand="duplicateTabIn(TabContextMenu.contextTab, 'tab');"/>
       
   171 +      <menuitem id="context_duplicateTabs" label="&duplicateTabs.label;"
       
   172 +                accesskey="&duplicateTabs.accesskey;"
       
   173 +                oncommand="TabContextMenu.duplicateSelectedTabs();"/>
       
   174 +      <menuseparator/>
       
   175 +      <menuitem id="context_selectAllTabs" label="&selectAllTabs.label;" accesskey="&selectAllTabs.accesskey;"
       
   176 +                oncommand="gBrowser.selectAllTabs();"/>
       
   177 +      <menuitem id="context_bookmarkSelectedTabs"
       
   178 +                hidden="true"
       
   179 +                label="&bookmarkSelectedTabs.label;"
       
   180 +                accesskey="&bookmarkSelectedTabs.accesskey;"
       
   181 +                oncommand="PlacesCommandHook.bookmarkPages(PlacesCommandHook.uniqueSelectedPages);"/>
       
   182 +      <menuitem id="context_bookmarkTab"
       
   183 +                label="&bookmarkTab.label;"
       
   184 +                accesskey="&bookmarkTab.accesskey;"
       
   185 +                oncommand="PlacesCommandHook.bookmarkPages(PlacesCommandHook.getUniquePages([TabContextMenu.contextTab]));"/>
       
   186 +      <menu id="context_reopenInContainer"
       
   187 +            label="&reopenInContainer.label;"
       
   188 +            accesskey="&reopenInContainer.accesskey;"
       
   189 +            hidden="true">
       
   190 +        <menupopup oncommand="TabContextMenu.reopenInContainer(event);"
       
   191 +                   onpopupshowing="TabContextMenu.createReopenInContainerMenu(event);"/>
       
   192 +      </menu>
       
   193 +      <menu id="context_moveTabOptions"
       
   194 +            multiselectcontextlabel="&moveSelectedTabOptions.label;"
       
   195 +            multiselectcontextaccesskey="&moveSelectedTabOptions.accesskey;"
       
   196 +            nonmultiselectcontextlabel="&moveTabOptions.label;"
       
   197 +            nonmultiselectcontextaccesskey="&moveTabOptions.accesskey;">
       
   198 +        <menupopup id="moveTabOptionsMenu">
       
   199 +          <menuitem id="context_moveToStart"
       
   200 +                    label="&moveToStart.label;"
       
   201 +                    accesskey="&moveToStart.accesskey;"
       
   202 +                    tbattr="tabbrowser-multiple"
       
   203 +                    oncommand="gBrowser.moveTabsToStart(TabContextMenu.contextTab);"/>
       
   204 +          <menuitem id="context_moveToEnd"
       
   205 +                    label="&moveToEnd.label;"
       
   206 +                    accesskey="&moveToEnd.accesskey;"
       
   207 +                    tbattr="tabbrowser-multiple"
       
   208 +                    oncommand="gBrowser.moveTabsToEnd(TabContextMenu.contextTab);"/>
       
   209 +          <menuitem id="context_openTabInWindow" label="&moveToNewWindow.label;"
       
   210 +                    accesskey="&moveToNewWindow.accesskey;"
       
   211 +                    tbattr="tabbrowser-multiple"
       
   212 +                    oncommand="gBrowser.replaceTabsWithWindow(TabContextMenu.contextTab);"/>
       
   213 +        </menupopup>
       
   214 +      </menu>
       
   215 +      <menu id="context_sendTabToDevice"
       
   216 +            class="sync-ui-item">
       
   217 +        <menupopup id="context_sendTabToDevicePopupMenu"
       
   218 +                   onpopupshowing="gSync.populateSendTabToDevicesMenu(event.target, TabContextMenu.contextTab.linkedBrowser.currentURI.spec, TabContextMenu.contextTab.linkedBrowser.contentTitle, TabContextMenu.contextTab.multiselected);"/>
       
   219 +      </menu>
       
   220 +      <menuseparator/>
       
   221 +      <menuitem id="context_closeTabsToTheEnd" label="&closeTabsToTheEnd.label;" accesskey="&closeTabsToTheEnd.accesskey;"
       
   222 +                oncommand="gBrowser.removeTabsToTheEndFrom(TabContextMenu.contextTab, {animate: true});"/>
       
   223 +      <menuitem id="context_closeOtherTabs" label="&closeOtherTabs.label;" accesskey="&closeOtherTabs.accesskey;"
       
   224 +                oncommand="gBrowser.removeAllTabsBut(TabContextMenu.contextTab);"/>
       
   225 +      <menuitem id="context_undoCloseTab"
       
   226 +                label="&undoCloseTab.label;"
       
   227 +                accesskey="&undoCloseTab.accesskey;"
       
   228 +                observes="History:UndoCloseTab"/>
       
   229 +      <menuitem id="context_closeTab" label="&closeTab.label;" accesskey="&closeTab.accesskey;"
       
   230 +                oncommand="gBrowser.removeTab(TabContextMenu.contextTab, { animate: true });"/>
       
   231 +      <menuitem id="context_closeSelectedTabs" label="&closeTabs.label;"
       
   232 +                hidden="true" accesskey="&closeTabs.accesskey;"
       
   233 +                oncommand="gBrowser.removeMultiSelectedTabs();"/>
       
   234 +    </menupopup>
       
   235 +
       
   236 +    <!-- bug 415444/582485: event.stopPropagation is here for the cloned version
       
   237 +         of this menupopup -->
       
   238 +    <menupopup id="backForwardMenu"
       
   239 +               onpopupshowing="return FillHistoryMenu(event.target);"
       
   240 +               oncommand="gotoHistoryIndex(event); event.stopPropagation();"
       
   241 +               onclick="checkForMiddleClick(this, event);"/>
       
   242 +    <tooltip id="aHTMLTooltip" page="true"/>
       
   243 +    <tooltip id="remoteBrowserTooltip"/>
       
   244 +
       
   245 +    <!-- for search and content formfill/pw manager -->
       
   246 +
       
   247 +    <panel type="autocomplete-richlistbox"
       
   248 +           id="PopupAutoComplete"
       
   249 +           role="group"
       
   250 +           noautofocus="true"
       
   251 +           hidden="true"
       
   252 +           overflowpadding="4"
       
   253 +           norolluponanchor="true"
       
   254 +           nomaxresults="true" />
       
   255 +
       
   256 +    <!-- for search with one-off buttons -->
       
   257 +    <panel type="autocomplete-richlistbox"
       
   258 +           id="PopupSearchAutoComplete"
       
   259 +           role="group"
       
   260 +           noautofocus="true"
       
   261 +           hidden="true" />
       
   262 +
       
   263 +    <!-- for url bar autocomplete -->
       
   264 +    <panel type="autocomplete-richlistbox"
       
   265 +           id="PopupAutoCompleteRichResult"
       
   266 +           role="group"
       
   267 +           noautofocus="true"
       
   268 +           hidden="true"
       
   269 +           flip="none"
       
   270 +           level="parent"
       
   271 +           overflowpadding="15" />
       
   272 +
       
   273 +    <!-- for url bar autocomplete -->
       
   274 +    <panel id="urlbar-results"
       
   275 +           role="group"
       
   276 +           noautofocus="true"
       
   277 +           hidden="true"
       
   278 +           flip="none"
       
   279 +           level="parent">
       
   280 +      <html:div class="urlbarView-body-outer">
       
   281 +        <html:div class="urlbarView-body-inner">
       
   282 +          <!-- TODO: add search suggestions notification -->
       
   283 +          <html:div class="urlbarView-results"/>
       
   284 +        </html:div>
       
   285 +      </html:div>
       
   286 +      <hbox class="search-one-offs"
       
   287 +            compact="true"
       
   288 +            includecurrentengine="true"
       
   289 +            disabletab="true"/>
       
   290 +    </panel>
       
   291 +
       
   292 +    <!-- for date/time picker. consumeoutsideclicks is set to never, so that
       
   293 +         clicks on the anchored input box are never consumed. -->
       
   294 +    <panel id="DateTimePickerPanel"
       
   295 +           type="arrow"
       
   296 +           hidden="true"
       
   297 +           orient="vertical"
       
   298 +           noautofocus="true"
       
   299 +           norolluponanchor="true"
       
   300 +           consumeoutsideclicks="never"
       
   301 +           level="parent"
       
   302 +           tabspecific="true">
       
   303 +    </panel>
       
   304 +
       
   305 +    <!-- for select dropdowns. The menupopup is what shows the list of options,
       
   306 +         and the popuponly menulist makes things like the menuactive attributes
       
   307 +         work correctly on the menupopup. ContentSelectDropdown expects the
       
   308 +         popuponly menulist to be its immediate parent. -->
       
   309 +    <menulist popuponly="true" id="ContentSelectDropdown" hidden="true">
       
   310 +      <menupopup rolluponmousewheel="true"
       
   311 +                 activateontab="true" position="after_start"
       
   312 +                 level="parent"
       
   313 +#ifdef XP_WIN
       
   314 +                 consumeoutsideclicks="false" ignorekeys="shortcuts"
       
   315 +#endif
       
   316 +        />
       
   317 +    </menulist>
       
   318 +
       
   319 +    <!-- for invalid form error message -->
       
   320 +    <panel id="invalid-form-popup" type="arrow" orient="vertical" noautofocus="true" hidden="true" level="parent">
       
   321 +      <description/>
       
   322 +    </panel>
       
   323 +
       
   324 +    <panel id="editBookmarkPanel"
       
   325 +           type="arrow"
       
   326 +           orient="vertical"
       
   327 +           ignorekeys="true"
       
   328 +           hidden="true"
       
   329 +           tabspecific="true"
       
   330 +           aria-labelledby="editBookmarkPanelTitle">
       
   331 +      <box class="panel-header">
       
   332 +        <label id="editBookmarkPanelTitle"/>
       
   333 +      </box>
       
   334 +      <html:div id="editBookmarkPanelFaviconContainer">
       
   335 +        <html:img id="editBookmarkPanelFavicon"/>
       
   336 +      </html:div>
       
   337 +      <box id="editBookmarkPanelImage"/>
       
   338 +#include ../../components/places/content/editBookmarkPanel.inc.xul
       
   339 +      <vbox id="editBookmarkPanelBottomContent"
       
   340 +            flex="1">
       
   341 +        <checkbox id="editBookmarkPanel_showForNewBookmarks"
       
   342 +                  label="&editBookmark.showForNewBookmarks.label;"
       
   343 +                  accesskey="&editBookmark.showForNewBookmarks.accesskey;"
       
   344 +                  oncommand="StarUI.onShowForNewBookmarksCheckboxCommand();"/>
       
   345 +      </vbox>
       
   346 +      <hbox id="editBookmarkPanelBottomButtons"
       
   347 +            class="panel-footer"
       
   348 +            style="min-width: &editBookmark.panel.width;;">
       
   349 +#ifdef XP_UNIX
       
   350 +        <button id="editBookmarkPanelDoneButton"
       
   351 +                class="editBookmarkPanelBottomButton"
       
   352 +                label="&editBookmark.done.label;"
       
   353 +                default="true"
       
   354 +                oncommand="StarUI.panel.hidePopup();"/>
       
   355 +        <button id="editBookmarkPanelRemoveButton"
       
   356 +                class="editBookmarkPanelBottomButton"
       
   357 +                oncommand="StarUI.removeBookmarkButtonCommand();"/>
       
   358 +#else
       
   359 +        <button id="editBookmarkPanelRemoveButton"
       
   360 +                class="editBookmarkPanelBottomButton"
       
   361 +                oncommand="StarUI.removeBookmarkButtonCommand();"/>
       
   362 +        <button id="editBookmarkPanelDoneButton"
       
   363 +                class="editBookmarkPanelBottomButton"
       
   364 +                label="&editBookmark.done.label;"
       
   365 +                default="true"
       
   366 +                oncommand="StarUI.panel.hidePopup();"/>
       
   367 +#endif
       
   368 +      </hbox>
       
   369 +    </panel>
       
   370 +
       
   371 +    <!-- UI tour experience -->
       
   372 +    <panel id="UITourTooltip"
       
   373 +           type="arrow"
       
   374 +           hidden="true"
       
   375 +           noautofocus="true"
       
   376 +           noautohide="true"
       
   377 +           align="start"
       
   378 +           orient="vertical"
       
   379 +           role="alert">
       
   380 +     <vbox>
       
   381 +      <hbox id="UITourTooltipBody">
       
   382 +        <image id="UITourTooltipIcon"/>
       
   383 +        <vbox flex="1">
       
   384 +          <hbox id="UITourTooltipTitleContainer">
       
   385 +            <label id="UITourTooltipTitle" flex="1"/>
       
   386 +            <toolbarbutton id="UITourTooltipClose" class="close-icon"
       
   387 +                           tooltiptext="&uiTour.infoPanel.close;"/>
       
   388 +          </hbox>
       
   389 +          <description id="UITourTooltipDescription" flex="1"/>
       
   390 +        </vbox>
       
   391 +      </hbox>
       
   392 +      <hbox id="UITourTooltipButtons" flex="1" align="center"/>
       
   393 +     </vbox>
       
   394 +    </panel>
       
   395 +    <!-- type="default" forces frames to be created so that the panel's size can be determined -->
       
   396 +    <panel id="UITourHighlightContainer"
       
   397 +           type="default"
       
   398 +           hidden="true"
       
   399 +           noautofocus="true"
       
   400 +           noautohide="true"
       
   401 +           flip="none"
       
   402 +           consumeoutsideclicks="false"
       
   403 +           mousethrough="always">
       
   404 +      <box id="UITourHighlight"></box>
       
   405 +    </panel>
       
   406 +
       
   407 +    <panel id="sidebarMenu-popup"
       
   408 +           class="cui-widget-panel"
       
   409 +           role="group"
       
   410 +           type="arrow"
       
   411 +           hidden="true"
       
   412 +           flip="slide"
       
   413 +           orient="vertical"
       
   414 +           position="bottomcenter topleft">
       
   415 +      <toolbarbutton id="sidebar-switcher-bookmarks"
       
   416 +                     type="checkbox"
       
   417 +                     label="&bookmarksButton.label;"
       
   418 +                     class="subviewbutton subviewbutton-iconic"
       
   419 +                     key="viewBookmarksSidebarKb"
       
   420 +                     oncommand="SidebarUI.show('viewBookmarksSidebar');"/>
       
   421 +      <toolbarbutton id="sidebar-switcher-history"
       
   422 +                     type="checkbox"
       
   423 +                     label="&historyButton.label;"
       
   424 +                     class="subviewbutton subviewbutton-iconic"
       
   425 +                     key="key_gotoHistory"
       
   426 +                     oncommand="SidebarUI.show('viewHistorySidebar');"/>
       
   427 +      <toolbarbutton id="sidebar-switcher-tabs"
       
   428 +                     type="checkbox"
       
   429 +                     label="&syncedTabs.sidebar.label;"
       
   430 +                     class="subviewbutton subviewbutton-iconic sync-ui-item"
       
   431 +                     oncommand="SidebarUI.show('viewTabsSidebar');"/>
       
   432 +      <toolbarseparator/>
       
   433 +      <!-- Extension toolbarbuttons go here. -->
       
   434 +      <toolbarseparator id="sidebar-extensions-separator"/>
       
   435 +      <toolbarbutton id="sidebar-reverse-position"
       
   436 +                     class="subviewbutton"
       
   437 +                     oncommand="SidebarUI.reversePosition()"/>
       
   438 +      <toolbarseparator/>
       
   439 +      <toolbarbutton label="&sidebarMenuClose.label;"
       
   440 +                     class="subviewbutton"
       
   441 +                     oncommand="SidebarUI.hide()"/>
       
   442 +    </panel>
       
   443 +
       
   444 +    <menupopup id="toolbar-context-menu"
       
   445 +               onpopupshowing="onViewToolbarsPopupShowing(event, document.getElementById('viewToolbarsMenuSeparator')); ToolbarContextMenu.updateDownloadsAutoHide(this); ToolbarContextMenu.updateExtension(this)">
       
   446 +      <menuitem oncommand="ToolbarContextMenu.openAboutAddonsForContextAction(this.parentElement)"
       
   447 +                accesskey="&customizeMenu.manageExtension.accesskey;"
       
   448 +                label="&customizeMenu.manageExtension.label;"
       
   449 +                contexttype="toolbaritem"
       
   450 +                class="customize-context-manageExtension"/>
       
   451 +      <menuitem oncommand="ToolbarContextMenu.removeExtensionForContextAction(this.parentElement)"
       
   452 +                accesskey="&customizeMenu.removeExtension.accesskey;"
       
   453 +                label="&customizeMenu.removeExtension.label;"
       
   454 +                contexttype="toolbaritem"
       
   455 +                class="customize-context-removeExtension"/>
       
   456 +      <menuseparator/>
       
   457 +      <menuitem oncommand="gCustomizeMode.addToPanel(document.popupNode)"
       
   458 +                accesskey="&customizeMenu.pinToOverflowMenu.accesskey;"
       
   459 +                label="&customizeMenu.pinToOverflowMenu.label;"
       
   460 +                contexttype="toolbaritem"
       
   461 +                class="customize-context-moveToPanel"/>
       
   462 +      <menuitem id="toolbar-context-autohide-downloads-button"
       
   463 +                oncommand="ToolbarContextMenu.onDownloadsAutoHideChange(event);"
       
   464 +                type="checkbox"
       
   465 +                accesskey="&customizeMenu.autoHideDownloadsButton.accesskey;"
       
   466 +                label="&customizeMenu.autoHideDownloadsButton.label;"
       
   467 +                contexttype="toolbaritem"/>
       
   468 +      <menuitem oncommand="gCustomizeMode.removeFromArea(document.popupNode)"
       
   469 +                accesskey="&customizeMenu.removeFromToolbar.accesskey;"
       
   470 +                label="&customizeMenu.removeFromToolbar.label;"
       
   471 +                contexttype="toolbaritem"
       
   472 +                class="customize-context-removeFromToolbar"/>
       
   473 +      <menuitem id="toolbar-context-reloadSelectedTab"
       
   474 +                contexttype="tabbar"
       
   475 +                oncommand="gBrowser.reloadMultiSelectedTabs();"
       
   476 +                label="&toolbarContextMenu.reloadSelectedTab.label;"
       
   477 +                accesskey="&toolbarContextMenu.reloadSelectedTab.accesskey;"/>
       
   478 +      <menuitem id="toolbar-context-reloadSelectedTabs"
       
   479 +                contexttype="tabbar"
       
   480 +                oncommand="gBrowser.reloadMultiSelectedTabs();"
       
   481 +                label="&toolbarContextMenu.reloadSelectedTabs.label;"
       
   482 +                accesskey="&toolbarContextMenu.reloadSelectedTabs.accesskey;"/>
       
   483 +      <menuitem id="toolbar-context-bookmarkSelectedTab"
       
   484 +                contexttype="tabbar"
       
   485 +                oncommand="PlacesCommandHook.bookmarkPages(PlacesCommandHook.uniqueSelectedPages);"
       
   486 +                label="&toolbarContextMenu.bookmarkSelectedTab.label;"
       
   487 +                accesskey="&toolbarContextMenu.bookmarkSelectedTab.accesskey;"/>
       
   488 +      <menuitem id="toolbar-context-bookmarkSelectedTabs"
       
   489 +                contexttype="tabbar"
       
   490 +                oncommand="PlacesCommandHook.bookmarkPages(PlacesCommandHook.uniqueSelectedPages);"
       
   491 +                label="&toolbarContextMenu.bookmarkSelectedTabs.label;"
       
   492 +                accesskey="&toolbarContextMenu.bookmarkSelectedTabs.accesskey;"/>
       
   493 +      <menuitem id="toolbar-context-selectAllTabs"
       
   494 +                contexttype="tabbar"
       
   495 +                oncommand="gBrowser.selectAllTabs();"
       
   496 +                label="&toolbarContextMenu.selectAllTabs.label;"
       
   497 +                accesskey="&toolbarContextMenu.selectAllTabs.accesskey;"/>
       
   498 +      <menuitem id="toolbar-context-undoCloseTab"
       
   499 +                contexttype="tabbar"
       
   500 +                label="&toolbarContextMenu.undoCloseTab.label;"
       
   501 +                accesskey="&toolbarContextMenu.undoCloseTab.accesskey;"
       
   502 +                observes="History:UndoCloseTab"/>
       
   503 +      <menuseparator/>
       
   504 +      <menuseparator id="viewToolbarsMenuSeparator"/>
       
   505 +      <!-- XXXgijs: we're using oncommand handler here to avoid the event being
       
   506 +                    redirected to the command element, thus preventing
       
   507 +                    listeners on the menupopup or further up the tree from
       
   508 +                    seeing the command event pass by. The observes attribute is
       
   509 +                    here so that the menuitem is still disabled and re-enabled
       
   510 +                    correctly. -->
       
   511 +      <menuitem oncommand="gCustomizeMode.enter()"
       
   512 +                observes="cmd_CustomizeToolbars"
       
   513 +                class="viewCustomizeToolbar"
       
   514 +                label="&viewCustomizeToolbar.label;"
       
   515 +                accesskey="&viewCustomizeToolbar.accesskey;"/>
       
   516 +    </menupopup>
       
   517 +
       
   518 +    <menupopup id="blockedPopupOptions"
       
   519 +               onpopupshowing="gPopupBlockerObserver.fillPopupList(event);"
       
   520 +               onpopuphiding="gPopupBlockerObserver.onPopupHiding(event);">
       
   521 +      <menuitem id="blockedPopupAllowSite"
       
   522 +                accesskey="&allowPopups.accesskey;"
       
   523 +                oncommand="gPopupBlockerObserver.toggleAllowPopupsForSite(event);"/>
       
   524 +      <menuitem
       
   525 +#ifdef XP_WIN
       
   526 +                label="&editPopupSettings.label;"
       
   527 +#else
       
   528 +                label="&editPopupSettingsUnix.label;"
       
   529 +#endif
       
   530 +                accesskey="&editPopupSettings.accesskey;"
       
   531 +                oncommand="gPopupBlockerObserver.editPopupSettings();"/>
       
   532 +      <menuitem id="blockedPopupDontShowMessage"
       
   533 +                accesskey="&dontShowMessage.accesskey;"
       
   534 +                type="checkbox"
       
   535 +                oncommand="gPopupBlockerObserver.dontShowMessage();"/>
       
   536 +      <menuseparator id="blockedPopupsSeparator"/>
       
   537 +    </menupopup>
       
   538 +
       
   539 +    <menupopup id="autohide-context"
       
   540 +           onpopupshowing="FullScreen.getAutohide(this.firstChild);">
       
   541 +      <menuitem type="checkbox" label="&fullScreenAutohide.label;"
       
   542 +                accesskey="&fullScreenAutohide.accesskey;"
       
   543 +                oncommand="FullScreen.setAutohide();"/>
       
   544 +      <menuseparator/>
       
   545 +      <menuitem label="&fullScreenExit.label;"
       
   546 +                accesskey="&fullScreenExit.accesskey;"
       
   547 +                oncommand="BrowserFullScreen();"/>
       
   548 +    </menupopup>
       
   549 +
       
   550 +    <menupopup id="contentAreaContextMenu" pagemenu="#page-menu-separator"
       
   551 +               onpopupshowing="if (event.target != this)
       
   552 +                                 return true;
       
   553 +                               gContextMenu = new nsContextMenu(this, event.shiftKey);
       
   554 +                               if (gContextMenu.shouldDisplay)
       
   555 +                                 updateEditUIVisibility();
       
   556 +                               return gContextMenu.shouldDisplay;"
       
   557 +               onpopuphiding="if (event.target != this)
       
   558 +                                return;
       
   559 +                              gContextMenu.hiding();
       
   560 +                              gContextMenu = null;
       
   561 +                              updateEditUIVisibility();">
       
   562 +#include browser-context.inc
       
   563 +    </menupopup>
       
   564 +
       
   565 +#include ../../components/places/content/placesContextMenu.inc.xul
       
   566 +
       
   567 +    <panel id="ctrlTab-panel" hidden="true" norestorefocus="true" level="top">
       
   568 +      <hbox id="ctrlTab-previews"/>
       
   569 +      <hbox id="ctrlTab-showAll-container" pack="center"/>
       
   570 +    </panel>
       
   571 +
       
   572 +    <panel id="pageActionPanel"
       
   573 +           class="cui-widget-panel"
       
   574 +           role="group"
       
   575 +           type="arrow"
       
   576 +           hidden="true"
       
   577 +           flip="slide"
       
   578 +           photon="true"
       
   579 +           position="bottomcenter topright"
       
   580 +           tabspecific="true"
       
   581 +           noautofocus="true"
       
   582 +           copyURL-title="&pageAction.copyLink.label;"
       
   583 +           emailLink-title="&emailPageCmd.label;"
       
   584 +           sendToDevice-notReadyTitle="&sendToDevice.syncNotReady.label;"
       
   585 +           shareURL-title="&pageAction.shareUrl.label;"
       
   586 +           shareMore-label="&pageAction.shareMore.label;">
       
   587 +      <panelmultiview id="pageActionPanelMultiView"
       
   588 +                      mainViewId="pageActionPanelMainView"
       
   589 +                      viewCacheId="appMenu-viewCache">
       
   590 +        <panelview id="pageActionPanelMainView"
       
   591 +                   context="pageActionContextMenu"
       
   592 +                   class="PanelUI-subView">
       
   593 +          <vbox class="panel-subview-body"/>
       
   594 +        </panelview>
       
   595 +      </panelmultiview>
       
   596 +    </panel>
       
   597 +
       
   598 +    <panel id="confirmation-hint"
       
   599 +           role="alert"
       
   600 +           type="arrow"
       
   601 +           hidden="true"
       
   602 +           flip="slide"
       
   603 +           position="bottomcenter topright"
       
   604 +           tabspecific="true"
       
   605 +           noautofocus="true">
       
   606 +      <hbox id="confirmation-hint-checkmark-animation-container">
       
   607 +        <image id="confirmation-hint-checkmark-image"/>
       
   608 +      </hbox>
       
   609 +      <label id="confirmation-hint-message"/>
       
   610 +    </panel>
       
   611 +
       
   612 +    <menupopup id="pageActionContextMenu"
       
   613 +               onpopupshowing="BrowserPageActions.onContextMenuShowing(event, this);">
       
   614 +      <menuitem class="pageActionContextMenuItem builtInUnpinned"
       
   615 +                label="&pageAction.addToUrlbar.label;"
       
   616 +                oncommand="BrowserPageActions.togglePinningForContextAction();"/>
       
   617 +      <menuitem class="pageActionContextMenuItem builtInPinned"
       
   618 +                label="&pageAction.removeFromUrlbar.label;"
       
   619 +                oncommand="BrowserPageActions.togglePinningForContextAction();"/>
       
   620 +      <menuitem class="pageActionContextMenuItem extensionUnpinned"
       
   621 +                label="&pageAction.addToUrlbar.label;"
       
   622 +                oncommand="BrowserPageActions.togglePinningForContextAction();"/>
       
   623 +      <menuitem class="pageActionContextMenuItem extensionPinned"
       
   624 +                label="&pageAction.removeFromUrlbar.label;"
       
   625 +                oncommand="BrowserPageActions.togglePinningForContextAction();"/>
       
   626 +      <menuseparator class="pageActionContextMenuItem extensionPinned extensionUnpinned"/>
       
   627 +      <menuitem class="pageActionContextMenuItem extensionPinned extensionUnpinned"
       
   628 +                label="&pageAction.manageExtension.label;"
       
   629 +                oncommand="BrowserPageActions.openAboutAddonsForContextAction();"/>
       
   630 +    </menupopup>
       
   631 +
       
   632 +#include ../../components/places/content/bookmarksHistoryTooltip.inc.xul
       
   633 +
       
   634 +    <tooltip id="tabbrowser-tab-tooltip" onpopupshowing="gBrowser.createTooltip(event);"/>
       
   635 +
       
   636 +    <tooltip id="back-button-tooltip">
       
   637 +      <description class="tooltip-label" value="&backButton.tooltip;"/>
       
   638 +#ifdef XP_MACOSX
       
   639 +      <description class="tooltip-label" value="&backForwardButtonMenuMac.tooltip;"/>
       
   640 +#else
       
   641 +      <description class="tooltip-label" value="&backForwardButtonMenu.tooltip;"/>
       
   642 +#endif
       
   643 +    </tooltip>
       
   644 +
       
   645 +    <tooltip id="forward-button-tooltip">
       
   646 +      <description class="tooltip-label" value="&forwardButton.tooltip;"/>
       
   647 +#ifdef XP_MACOSX
       
   648 +      <description class="tooltip-label" value="&backForwardButtonMenuMac.tooltip;"/>
       
   649 +#else
       
   650 +      <description class="tooltip-label" value="&backForwardButtonMenu.tooltip;"/>
       
   651 +#endif
       
   652 +    </tooltip>
       
   653 +
       
   654 +#include popup-notifications.inc
       
   655 +
       
   656 +#include ../../components/customizableui/content/panelUI.inc.xul
       
   657 +#include ../../components/controlcenter/content/panel.inc.xul
       
   658 +#include ../../components/downloads/content/downloadsPanel.inc.xul
       
   659 +#include browser-allTabsMenu.inc.xul
       
   660 +
       
   661 +    <hbox id="downloads-animation-container" mousethrough="always">
       
   662 +      <vbox id="downloads-notification-anchor" hidden="true">
       
   663 +        <vbox id="downloads-indicator-notification"/>
       
   664 +      </vbox>
       
   665 +    </hbox>
       
   666 +
       
   667 +    <tooltip id="dynamic-shortcut-tooltip"
       
   668 +             onpopupshowing="UpdateDynamicShortcutTooltipText(this);"/>
       
   669 +
       
   670 +    <menupopup id="SyncedTabsSidebarContext">
       
   671 +      <menuitem label="&syncedTabs.context.open.label;"
       
   672 +                accesskey="&syncedTabs.context.open.accesskey;"
       
   673 +                id="syncedTabsOpenSelected" where="current"/>
       
   674 +      <menuitem label="&syncedTabs.context.openInNewTab.label;"
       
   675 +                accesskey="&syncedTabs.context.openInNewTab.accesskey;"
       
   676 +                id="syncedTabsOpenSelectedInTab" where="tab"/>
       
   677 +      <menuitem label="&syncedTabs.context.openInNewWindow.label;"
       
   678 +                accesskey="&syncedTabs.context.openInNewWindow.accesskey;"
       
   679 +                id="syncedTabsOpenSelectedInWindow" where="window"/>
       
   680 +      <menuitem label="&syncedTabs.context.openInNewPrivateWindow.label;"
       
   681 +                accesskey="&syncedTabs.context.openInNewPrivateWindow.accesskey;"
       
   682 +                id="syncedTabsOpenSelectedInPrivateWindow" where="window" private="true"/>
       
   683 +      <menuseparator/>
       
   684 +      <menuitem label="&syncedTabs.context.bookmarkSingleTab.label;"
       
   685 +                accesskey="&syncedTabs.context.bookmarkSingleTab.accesskey;"
       
   686 +                id="syncedTabsBookmarkSelected"/>
       
   687 +      <menuitem label="&syncedTabs.context.copy.label;"
       
   688 +                accesskey="&syncedTabs.context.copy.accesskey;"
       
   689 +                id="syncedTabsCopySelected"/>
       
   690 +      <menuseparator/>
       
   691 +      <menuitem label="&syncedTabs.context.openAllInTabs.label;"
       
   692 +                accesskey="&syncedTabs.context.openAllInTabs.accesskey;"
       
   693 +                id="syncedTabsOpenAllInTabs"/>
       
   694 +      <menuitem label="&syncedTabs.context.managedevices.label;"
       
   695 +                accesskey="&syncedTabs.context.managedevices.accesskey;"
       
   696 +                id="syncedTabsManageDevices"
       
   697 +                oncommand="gSync.openDevicesManagementPage('syncedtabs-sidebar');"/>
       
   698 +      <menuitem label="&syncSyncNowItem.label;"
       
   699 +                accesskey="&syncSyncNowItem.accesskey;"
       
   700 +                id="syncedTabsRefresh"/>
       
   701 +    </menupopup>
       
   702 +    <menupopup id="SyncedTabsSidebarTabsFilterContext"
       
   703 +               class="textbox-contextmenu">
       
   704 +      <menuitem label="&undoCmd.label;"
       
   705 +                accesskey="&undoCmd.accesskey;"
       
   706 +                cmd="cmd_undo"/>
       
   707 +      <menuseparator/>
       
   708 +      <menuitem label="&cutCmd.label;"
       
   709 +                accesskey="&cutCmd.accesskey;"
       
   710 +                cmd="cmd_cut"/>
       
   711 +      <menuitem label="&copyCmd.label;"
       
   712 +                accesskey="&copyCmd.accesskey;"
       
   713 +                cmd="cmd_copy"/>
       
   714 +      <menuitem label="&pasteCmd.label;"
       
   715 +                accesskey="&pasteCmd.accesskey;"
       
   716 +                cmd="cmd_paste"/>
       
   717 +      <menuitem label="&deleteCmd.label;"
       
   718 +                accesskey="&deleteCmd.accesskey;"
       
   719 +                cmd="cmd_delete"/>
       
   720 +      <menuseparator/>
       
   721 +      <menuitem label="&selectAllCmd.label;"
       
   722 +                accesskey="&selectAllCmd.accesskey;"
       
   723 +                cmd="cmd_selectAll"/>
       
   724 +      <menuseparator/>
       
   725 +      <menuitem label="&syncSyncNowItem.label;"
       
   726 +                accesskey="&syncSyncNowItem.accesskey;"
       
   727 +                id="syncedTabsRefreshFilter"/>
       
   728 +    </menupopup>
       
   729 +
       
   730 +    <hbox id="statuspanel" inactive="true" layer="true">
       
   731 +      <hbox id="statuspanel-inner">
       
   732 +        <label id="statuspanel-label"
       
   733 +               role="status"
       
   734 +               aria-live="off"
       
   735 +               flex="1"
       
   736 +               crop="end"/>
       
   737 +      </hbox>
       
   738 +    </hbox>
       
   739 +  </popupset>
       
   740 +  <box id="appMenu-viewCache" hidden="true"/>
       
   741 +
       
   742 +  <toolbox id="navigator-toolbox">
       
   743 +
       
   744 +    <vbox id="titlebar">
       
   745 +      <!-- Menu -->
       
   746 +      <toolbar type="menubar" id="toolbar-menubar"
       
   747 +               class="browser-toolbar chromeclass-menubar titlebar-color"
       
   748 +               customizable="true"
       
   749 +               mode="icons"
       
   750 +#ifdef MENUBAR_CAN_AUTOHIDE
       
   751 +               toolbarname="&menubarCmd.label;"
       
   752 +               accesskey="&menubarCmd.accesskey;"
       
   753 +               autohide="true"
       
   754 +#endif
       
   755 +               context="toolbar-context-menu">
       
   756 +        <toolbaritem id="menubar-items" align="center">
       
   757 +# The entire main menubar is placed into browser-menubar.inc, so that it can be
       
   758 +# shared with other top level windows in macWindow.inc.xul.
       
   759 +#include browser-menubar.inc
       
   760 +        </toolbaritem>
       
   761 +        <spacer flex="1" skipintoolbarset="true" ordinal="1000"/>
       
   762 +#include titlebar-items.inc.xul
       
   763 +      </toolbar>
       
   764 +
       
   765 +      <toolbar id="TabsToolbar"
       
   766 +               class="browser-toolbar titlebar-color"
       
   767 +               fullscreentoolbar="true"
       
   768 +               customizable="true"
       
   769 +               customizationtarget="TabsToolbar-customization-target"
       
   770 +               mode="icons"
       
   771 +               aria-label="&tabsToolbar.label;"
       
   772 +               context="toolbar-context-menu"
       
   773 +               flex="1">
       
   774 +        <vbox flex="1" class="toolbar-items">
       
   775 +          <spacer flex="1000"/>
       
   776 +
       
   777 +          <hbox id="TabsToolbar-customization-target" flex="1">
       
   778 +            <hbox class="titlebar-spacer" type="pre-tabs"
       
   779 +                  skipintoolbarset="true"/>
       
   780 +
       
   781 +            <tabs id="tabbrowser-tabs"
       
   782 +                  flex="1"
       
   783 +                  setfocus="false"
       
   784 +                  tooltip="tabbrowser-tab-tooltip"
       
   785 +                  stopwatchid="FX_TAB_CLICK_MS">
       
   786 +              <tab class="tabbrowser-tab" selected="true" visuallyselected="true" fadein="true"/>
       
   787 +            </tabs>
       
   788 +
       
   789 +            <toolbarbutton id="new-tab-button"
       
   790 +                           class="toolbarbutton-1 chromeclass-toolbar-additional"
       
   791 +                           label="&tabCmd.label;"
       
   792 +                           command="cmd_newNavigatorTab"
       
   793 +                           onclick="checkForMiddleClick(this, event);"
       
   794 +                           tooltip="dynamic-shortcut-tooltip"
       
   795 +                           ondrop="newTabButtonObserver.onDrop(event)"
       
   796 +                           ondragover="newTabButtonObserver.onDragOver(event)"
       
   797 +                           ondragenter="newTabButtonObserver.onDragOver(event)"
       
   798 +                           ondragexit="newTabButtonObserver.onDragExit(event)"
       
   799 +                           cui-areatype="toolbar"
       
   800 +                           removable="true"/>
       
   801 +
       
   802 +            <toolbarbutton id="alltabs-button"
       
   803 +                           class="toolbarbutton-1 chromeclass-toolbar-additional tabs-alltabs-button badged-button"
       
   804 +                           oncommand="gTabsPanel.showAllTabsPanel();"
       
   805 +                           label="&listAllTabs.label;"
       
   806 +                           tooltiptext="&listAllTabs.label;"
       
   807 +                           removable="false"/>
       
   808 +
       
   809 +            <hbox class="titlebar-spacer" type="post-tabs"
       
   810 +                  ordinal="1000"
       
   811 +                  skipintoolbarset="true"/>
       
   812 +          </hbox>
       
   813 +        </vbox>
       
   814 +
       
   815 +#ifndef XP_MACOSX
       
   816 +        <button class="accessibility-indicator" tooltiptext="&accessibilityIndicator.tooltip;"
       
   817 +                ordinal="1000"
       
   818 +                aria-live="polite" skipintoolbarset="true"/>
       
   819 +        <hbox class="private-browsing-indicator" skipintoolbarset="true"
       
   820 +              ordinal="1000"/>
       
   821 +#endif
       
   822 +
       
   823 +#include titlebar-items.inc.xul
       
   824 +
       
   825 +#ifdef XP_MACOSX
       
   826 +        <!-- OS X does not natively support RTL for its titlebar items, so we prevent this secondary
       
   827 +             buttonbox from reversing order in RTL by forcing an LTR direction. -->
       
   828 +        <hbox id="titlebar-secondary-buttonbox" dir="ltr">
       
   829 +          <button class="accessibility-indicator" tooltiptext="&accessibilityIndicator.tooltip;" aria-live="polite"/>
       
   830 +          <hbox class="private-browsing-indicator"/>
       
   831 +          <hbox id="titlebar-fullscreen-button"/>
       
   832 +        </hbox>
       
   833 +#endif
       
   834 +      </toolbar>
       
   835 +
       
   836 +    </vbox>
       
   837 +
       
   838 +    <toolbar id="nav-bar"
       
   839 +             class="browser-toolbar"
       
   840 +             aria-label="&navbarCmd.label;"
       
   841 +             fullscreentoolbar="true" mode="icons" customizable="true"
       
   842 +             customizationtarget="nav-bar-customization-target"
       
   843 +             overflowable="true"
       
   844 +             overflowbutton="nav-bar-overflow-button"
       
   845 +             overflowtarget="widget-overflow-list"
       
   846 +             overflowpanel="widget-overflow"
       
   847 +             context="toolbar-context-menu">
       
   848 +
       
   849 +      <hbox id="nav-bar-customization-target" flex="1">
       
   850 +        <toolbarbutton id="back-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
       
   851 +                       label="&backCmd.label;"
       
   852 +                       removable="false" overflows="false"
       
   853 +                       keepbroadcastattributeswhencustomizing="true"
       
   854 +                       command="Browser:BackOrBackDuplicate"
       
   855 +                       onclick="checkForMiddleClick(this, event);"
       
   856 +                       tooltip="back-button-tooltip"
       
   857 +                       context="backForwardMenu"/>
       
   858 +        <toolbarbutton id="forward-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
       
   859 +                       label="&forwardCmd.label;"
       
   860 +                       removable="false" overflows="false"
       
   861 +                       keepbroadcastattributeswhencustomizing="true"
       
   862 +                       command="Browser:ForwardOrForwardDuplicate"
       
   863 +                       onclick="checkForMiddleClick(this, event);"
       
   864 +                       tooltip="forward-button-tooltip"
       
   865 +                       context="backForwardMenu"/>
       
   866 +        <toolbaritem id="stop-reload-button" class="chromeclass-toolbar-additional"
       
   867 +                     title="&reloadCmd.label;"
       
   868 +                     removable="true" overflows="false">
       
   869 +          <toolbarbutton id="reload-button" class="toolbarbutton-1"
       
   870 +                         label="&reloadCmd.label;"
       
   871 +                         command="Browser:ReloadOrDuplicate"
       
   872 +                         onclick="checkForMiddleClick(this, event);"
       
   873 +                         tooltip="dynamic-shortcut-tooltip">
       
   874 +            <box class="toolbarbutton-animatable-box">
       
   875 +              <image class="toolbarbutton-animatable-image"/>
       
   876 +            </box>
       
   877 +          </toolbarbutton>
       
   878 +          <toolbarbutton id="stop-button" class="toolbarbutton-1"
       
   879 +                         label="&stopCmd.label;"
       
   880 +                         command="Browser:Stop"
       
   881 +                         tooltip="dynamic-shortcut-tooltip">
       
   882 +            <box class="toolbarbutton-animatable-box">
       
   883 +              <image class="toolbarbutton-animatable-image"/>
       
   884 +            </box>
       
   885 +          </toolbarbutton>
       
   886 +        </toolbaritem>
       
   887 +        <toolbarbutton id="home-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
       
   888 +                       removable="true"
       
   889 +                       label="&homeButton.label;"
       
   890 +                       ondragover="homeButtonObserver.onDragOver(event)"
       
   891 +                       ondragenter="homeButtonObserver.onDragOver(event)"
       
   892 +                       ondrop="homeButtonObserver.onDrop(event)"
       
   893 +                       ondragexit="homeButtonObserver.onDragExit(event)"
       
   894 +                       key="goHome"
       
   895 +                       onclick="BrowserHome(event);"
       
   896 +                       cui-areatype="toolbar"
       
   897 +                       tooltiptext="&homeButton.defaultPage.tooltip;"/>
       
   898 +        <toolbarspring cui-areatype="toolbar" class="chromeclass-toolbar-additional"/>
       
   899 +        <toolbaritem id="urlbar-container" flex="400" persist="width"
       
   900 +                     removable="false"
       
   901 +                     class="chromeclass-location" overflows="false">
       
   902 +            <textbox id="urlbar" flex="1"
       
   903 +                     placeholder="&urlbar.placeholder2;"
       
   904 +                     defaultPlaceholder="&urlbar.placeholder2;"
       
   905 +                     focused="true"
       
   906 +                     type="autocomplete"
       
   907 +                     autocompletesearch="unifiedcomplete"
       
   908 +                     autocompletesearchparam="enable-actions"
       
   909 +                     autocompletepopup="PopupAutoCompleteRichResult"
       
   910 +                     completeselectedindex="true"
       
   911 +                     tabscrolling="true"
       
   912 +                     newlines="stripsurroundingwhitespace"
       
   913 +                     ontextentered="this.handleCommand(param);"
       
   914 +                     ontextreverted="return this.handleRevert();"
       
   915 +                     pageproxystate="invalid">
       
   916 +              <!-- Use onclick instead of normal popup= syntax since the popup
       
   917 +                   code fires onmousedown, and hence eats our favicon drag events. -->
       
   918 +              <box id="identity-box" role="button"
       
   919 +                   align="center"
       
   920 +                   aria-label="&urlbar.viewSiteInfo.label;"
       
   921 +                   onclick="gIdentityHandler.handleIdentityButtonEvent(event);"
       
   922 +                   onkeypress="gIdentityHandler.handleIdentityButtonEvent(event);"
       
   923 +                   ondragstart="gIdentityHandler.onDragStart(event);">
       
   924 +                <image id="identity-icon"
       
   925 +                       consumeanchor="identity-box"
       
   926 +                       onclick="PageProxyClickHandler(event);"/>
       
   927 +                <image id="sharing-icon" mousethrough="always"/>
       
   928 +                <box id="tracking-protection-icon-box" animationsenabled="true">
       
   929 +                  <image id="tracking-protection-icon"/>
       
   930 +                  <box id="tracking-protection-icon-animatable-box" flex="1">
       
   931 +                    <image id="tracking-protection-icon-animatable-image" flex="1"/>
       
   932 +                  </box>
       
   933 +                </box>
       
   934 +                <box id="blocked-permissions-container" align="center">
       
   935 +                  <image data-permission-id="geo" class="blocked-permission-icon geo-icon" role="button"
       
   936 +                         tooltiptext="&urlbar.geolocationBlocked.tooltip;"/>
       
   937 +                  <image data-permission-id="desktop-notification" class="blocked-permission-icon desktop-notification-icon" role="button"
       
   938 +                         tooltiptext="&urlbar.webNotificationsBlocked.tooltip;"/>
       
   939 +                  <image data-permission-id="camera" class="blocked-permission-icon camera-icon" role="button"
       
   940 +                         tooltiptext="&urlbar.cameraBlocked.tooltip;"/>
       
   941 +                  <image data-permission-id="microphone" class="blocked-permission-icon microphone-icon" role="button"
       
   942 +                         tooltiptext="&urlbar.microphoneBlocked.tooltip;"/>
       
   943 +                  <image data-permission-id="screen" class="blocked-permission-icon screen-icon" role="button"
       
   944 +                         tooltiptext="&urlbar.screenBlocked.tooltip;"/>
       
   945 +                  <image data-permission-id="persistent-storage" class="blocked-permission-icon persistent-storage-icon" role="button"
       
   946 +                         tooltiptext="&urlbar.persistentStorageBlocked.tooltip;"/>
       
   947 +                  <image data-permission-id="popup" class="blocked-permission-icon popup-icon" role="button"
       
   948 +                         tooltiptext="&urlbar.popupBlocked.tooltip;"/>
       
   949 +                  <image data-permission-id="autoplay-media" class="blocked-permission-icon autoplay-media-icon" role="button"
       
   950 +                         tooltiptext="&urlbar.autoplayMediaBlocked.tooltip;"/>
       
   951 +                  <image data-permission-id="canvas" class="blocked-permission-icon canvas-icon" role="button"
       
   952 +                         tooltiptext="&urlbar.canvasBlocked.tooltip;"/>
       
   953 +                  <image data-permission-id="plugin:flash" class="blocked-permission-icon plugin-icon" role="button"
       
   954 +                         tooltiptext="&urlbar.flashPluginBlocked.tooltip;"/>
       
   955 +                  <image data-permission-id="midi" class="blocked-permission-icon midi-icon" role="button"
       
   956 +                         tooltiptext="&urlbar.midiBlocked.tooltip;"/>
       
   957 +                </box>
       
   958 +                <box id="notification-popup-box"
       
   959 +                     hidden="true"
       
   960 +                     onmouseover="document.getElementById('identity-box').classList.add('no-hover');"
       
   961 +                     onmouseout="document.getElementById('identity-box').classList.remove('no-hover');"
       
   962 +                     align="center">
       
   963 +                  <image id="default-notification-icon" class="notification-anchor-icon" role="button"
       
   964 +                         tooltiptext="&urlbar.defaultNotificationAnchor.tooltip;"/>
       
   965 +                  <image id="geo-notification-icon" class="notification-anchor-icon geo-icon" role="button"
       
   966 +                         tooltiptext="&urlbar.geolocationNotificationAnchor.tooltip;"/>
       
   967 +                  <image id="autoplay-media-notification-icon" class="notification-anchor-icon autoplay-media-icon" role="button"
       
   968 +                         tooltiptext="&urlbar.autoplayNotificationAnchor.tooltip;"/>
       
   969 +                  <image id="addons-notification-icon" class="notification-anchor-icon install-icon" role="button"
       
   970 +                         tooltiptext="&urlbar.addonsNotificationAnchor.tooltip;"/>
       
   971 +                  <image id="canvas-notification-icon" class="notification-anchor-icon" role="button"
       
   972 +                         tooltiptext="&urlbar.canvasNotificationAnchor.tooltip;"/>
       
   973 +                  <image id="indexedDB-notification-icon" class="notification-anchor-icon indexedDB-icon" role="button"
       
   974 +                         tooltiptext="&urlbar.indexedDBNotificationAnchor.tooltip;"/>
       
   975 +                  <image id="password-notification-icon" class="notification-anchor-icon login-icon" role="button"
       
   976 +                         tooltiptext="&urlbar.passwordNotificationAnchor.tooltip;"/>
       
   977 +                  <stack id="plugins-notification-icon" class="notification-anchor-icon" role="button" align="center"
       
   978 +                         tooltiptext="&urlbar.pluginsNotificationAnchor.tooltip;">
       
   979 +                    <image class="plugin-icon" />
       
   980 +                    <image id="plugin-icon-badge" />
       
   981 +                  </stack>
       
   982 +                  <image id="web-notifications-notification-icon" class="notification-anchor-icon desktop-notification-icon" role="button"
       
   983 +                         tooltiptext="&urlbar.webNotificationAnchor.tooltip;"/>
       
   984 +                  <image id="webRTC-shareDevices-notification-icon" class="notification-anchor-icon camera-icon" role="button"
       
   985 +                         tooltiptext="&urlbar.webRTCShareDevicesNotificationAnchor.tooltip;"/>
       
   986 +                  <image id="webRTC-shareMicrophone-notification-icon" class="notification-anchor-icon microphone-icon" role="button"
       
   987 +                         tooltiptext="&urlbar.webRTCShareMicrophoneNotificationAnchor.tooltip;"/>
       
   988 +                  <image id="webRTC-shareScreen-notification-icon" class="notification-anchor-icon screen-icon" role="button"
       
   989 +                         tooltiptext="&urlbar.webRTCShareScreenNotificationAnchor.tooltip;"/>
       
   990 +                  <image id="servicesInstall-notification-icon" class="notification-anchor-icon service-icon" role="button"
       
   991 +                         tooltiptext="&urlbar.servicesNotificationAnchor.tooltip;"/>
       
   992 +                  <image id="translate-notification-icon" class="notification-anchor-icon translation-icon" role="button"
       
   993 +                         tooltiptext="&urlbar.translateNotificationAnchor.tooltip;"/>
       
   994 +                  <image id="translated-notification-icon" class="notification-anchor-icon translation-icon in-use" role="button"
       
   995 +                         tooltiptext="&urlbar.translatedNotificationAnchor.tooltip;"/>
       
   996 +                  <image id="eme-notification-icon" class="notification-anchor-icon drm-icon" role="button"
       
   997 +                         tooltiptext="&urlbar.emeNotificationAnchor.tooltip;"/>
       
   998 +                  <image id="persistent-storage-notification-icon" class="notification-anchor-icon persistent-storage-icon" role="button"
       
   999 +                         tooltiptext="&urlbar.persistentStorageNotificationAnchor.tooltip;"/>
       
  1000 +                  <image id="midi-notification-icon" class="notification-anchor-icon midi-icon" role="button"
       
  1001 +                         tooltiptext="&urlbar.midiNotificationAnchor.tooltip;"/>
       
  1002 +                  <image id="webauthn-notification-icon" class="notification-anchor-icon" role="button"
       
  1003 +                         tooltiptext="&urlbar.webAuthnAnchor.tooltip;"/>
       
  1004 +                  <image id="storage-access-notification-icon" class="notification-anchor-icon storage-access-icon" role="button"
       
  1005 +                         tooltiptext="&urlbar.storageAccessAnchor.tooltip;"/>
       
  1006 +                </box>
       
  1007 +                <image id="connection-icon"/>
       
  1008 +                <image id="extension-icon"/>
       
  1009 +                <image id="remote-control-icon"
       
  1010 +                       tooltiptext="&urlbar.remoteControlNotificationAnchor.tooltip;"/>
       
  1011 +                <hbox id="identity-icon-labels">
       
  1012 +                  <label id="identity-icon-label" class="plain" flex="1"/>
       
  1013 +                  <label id="identity-icon-country-label" class="plain"/>
       
  1014 +                </hbox>
       
  1015 +              </box>
       
  1016 +              <box id="urlbar-display-box" align="center">
       
  1017 +                <label id="switchtab" class="urlbar-display urlbar-display-switchtab" value="&urlbar.switchToTab.label;"/>
       
  1018 +                <label id="extension" class="urlbar-display urlbar-display-extension" value="&urlbar.extension.label;"/>
       
  1019 +              </box>
       
  1020 +              <hbox id="page-action-buttons" context="pageActionContextMenu">
       
  1021 +                <hbox id="contextual-feature-recommendation" role="button" hidden="true">
       
  1022 +                  <hbox id="cfr-label-container">
       
  1023 +                    <label id="cfr-label"/>
       
  1024 +                  </hbox>
       
  1025 +                  <image id="cfr-button"
       
  1026 +                         class="urlbar-icon urlbar-page-action"
       
  1027 +                         role="presentation"/>
       
  1028 +                </hbox>
       
  1029 +                <hbox id="userContext-icons" hidden="true">
       
  1030 +                  <label id="userContext-label"/>
       
  1031 +                  <image id="userContext-indicator"/>
       
  1032 +                </hbox>
       
  1033 +                <image id="reader-mode-button"
       
  1034 +                       class="urlbar-icon urlbar-page-action"
       
  1035 +                       tooltip="dynamic-shortcut-tooltip"
       
  1036 +                       role="button"
       
  1037 +                       hidden="true"
       
  1038 +                       onclick="ReaderParent.buttonClick(event);"/>
       
  1039 +                <toolbarbutton id="urlbar-zoom-button"
       
  1040 +                       onclick="FullZoom.reset();"
       
  1041 +                       tooltip="dynamic-shortcut-tooltip"
       
  1042 +                       hidden="true"/>
       
  1043 +                <box id="pageActionSeparator" class="urlbar-page-action"/>
       
  1044 +                <image id="pageActionButton"
       
  1045 +                       class="urlbar-icon urlbar-page-action"
       
  1046 +                       role="button"
       
  1047 +                       tooltiptext="&pageActionButton.tooltip;"
       
  1048 +                       onmousedown="BrowserPageActions.mainButtonClicked(event);"/>
       
  1049 +                <hbox id="star-button-box"
       
  1050 +                      hidden="true"
       
  1051 +                      class="urlbar-icon-wrapper urlbar-page-action"
       
  1052 +                      onclick="BrowserPageActions.doCommandForAction(PageActions.actionForID('bookmark'), event, this);">
       
  1053 +                  <image id="star-button"
       
  1054 +                         class="urlbar-icon"
       
  1055 +                         role="button"/>
       
  1056 +                  <hbox id="star-button-animatable-box">
       
  1057 +                    <image id="star-button-animatable-image"
       
  1058 +                           role="presentation"/>
       
  1059 +                  </hbox>
       
  1060 +                </hbox>
       
  1061 +              </hbox>
       
  1062 +            </textbox>
       
  1063 +        </toolbaritem>
       
  1064 +
       
  1065 +        <toolbarspring cui-areatype="toolbar" class="chromeclass-toolbar-additional"/>
       
  1066 +
       
  1067 +        <!-- This is a placeholder for the Downloads Indicator.  It is visible
       
  1068 +             during the customization of the toolbar, in the palette, and before
       
  1069 +             the Downloads Indicator overlay is loaded. -->
       
  1070 +        <toolbarbutton id="downloads-button"
       
  1071 +                       class="toolbarbutton-1 chromeclass-toolbar-additional badged-button"
       
  1072 +                       key="key_openDownloads"
       
  1073 +                       onmousedown="DownloadsIndicatorView.onCommand(event);"
       
  1074 +                       ondrop="DownloadsIndicatorView.onDrop(event);"
       
  1075 +                       ondragover="DownloadsIndicatorView.onDragOver(event);"
       
  1076 +                       ondragenter="DownloadsIndicatorView.onDragOver(event);"
       
  1077 +                       label="&downloads.label;"
       
  1078 +                       removable="true"
       
  1079 +                       overflows="false"
       
  1080 +                       cui-areatype="toolbar"
       
  1081 +                       hidden="true"
       
  1082 +                       tooltip="dynamic-shortcut-tooltip"
       
  1083 +                       indicator="true">
       
  1084 +            <!-- The panel's anchor area is smaller than the outer button, but must
       
  1085 +                 always be visible and must not move or resize when the indicator
       
  1086 +                 state changes, otherwise the panel could change its position or lose
       
  1087 +                 its arrow unexpectedly. -->
       
  1088 +            <stack id="downloads-indicator-anchor"
       
  1089 +                   consumeanchor="downloads-button">
       
  1090 +              <box id="downloads-indicator-icon"/>
       
  1091 +              <stack id="downloads-indicator-progress-outer">
       
  1092 +                <box id="downloads-indicator-progress-inner"/>
       
  1093 +              </stack>
       
  1094 +            </stack>
       
  1095 +          </toolbarbutton>
       
  1096 +
       
  1097 +        <toolbarbutton id="library-button" class="toolbarbutton-1 chromeclass-toolbar-additional subviewbutton-nav"
       
  1098 +                       removable="true"
       
  1099 +                       onmousedown="PanelUI.showSubView('appMenu-libraryView', this, event);"
       
  1100 +                       closemenu="none"
       
  1101 +                       cui-areatype="toolbar"
       
  1102 +                       tooltiptext="&libraryButton.tooltip;"
       
  1103 +                       label="&places.library.title;"/>
       
  1104 +
       
  1105 +      </hbox>
       
  1106 +
       
  1107 +      <toolbarbutton id="nav-bar-overflow-button"
       
  1108 +                     class="toolbarbutton-1 chromeclass-toolbar-additional overflow-button"
       
  1109 +                     skipintoolbarset="true"
       
  1110 +                     tooltiptext="&navbarOverflow.label;">
       
  1111 +        <box class="toolbarbutton-animatable-box">
       
  1112 +          <image class="toolbarbutton-animatable-image"/>
       
  1113 +        </box>
       
  1114 +      </toolbarbutton>
       
  1115 +
       
  1116 +      <toolbaritem id="PanelUI-button"
       
  1117 +                   removable="false">
       
  1118 +        <toolbarbutton id="PanelUI-menu-button"
       
  1119 +                       class="toolbarbutton-1 badged-button"
       
  1120 +                       consumeanchor="PanelUI-button"
       
  1121 +                       label="&brandShortName;"
       
  1122 +                       tooltiptext="&appmenu.tooltip;"/>
       
  1123 +      </toolbaritem>
       
  1124 +
       
  1125 +      <hbox id="window-controls" hidden="true" pack="end" skipintoolbarset="true"
       
  1126 +            ordinal="1000">
       
  1127 +        <toolbarbutton id="minimize-button"
       
  1128 +                       tooltiptext="&fullScreenMinimize.tooltip;"
       
  1129 +                       oncommand="window.minimize();"/>
       
  1130 +
       
  1131 +        <toolbarbutton id="restore-button"
       
  1132 +#ifdef XP_MACOSX
       
  1133 +# Prior to 10.7 there wasn't a native fullscreen button so we use #restore-button
       
  1134 +# to exit fullscreen and want it to behave like other toolbar buttons.
       
  1135 +                       class="toolbarbutton-1"
       
  1136 +#endif
       
  1137 +                       tooltiptext="&fullScreenRestore.tooltip;"
       
  1138 +                       oncommand="BrowserFullScreen();"/>
       
  1139 +
       
  1140 +        <toolbarbutton id="close-button"
       
  1141 +                       tooltiptext="&fullScreenClose.tooltip;"
       
  1142 +                       oncommand="BrowserTryToCloseWindow();"/>
       
  1143 +      </hbox>
       
  1144 +
       
  1145 +      <box id="library-animatable-box" class="toolbarbutton-animatable-box">
       
  1146 +        <image class="toolbarbutton-animatable-image"/>
       
  1147 +      </box>
       
  1148 +    </toolbar>
       
  1149 +
       
  1150 +    <toolbar id="PersonalToolbar"
       
  1151 +             mode="icons"
       
  1152 +             class="browser-toolbar chromeclass-directories"
       
  1153 +             context="toolbar-context-menu"
       
  1154 +             toolbarname="&personalbarCmd.label;" accesskey="&personalbarCmd.accesskey;"
       
  1155 +             collapsed="true"
       
  1156 +             customizable="true">
       
  1157 +      <toolbaritem id="personal-bookmarks"
       
  1158 +                   title="&bookmarksToolbarItem.label;"
       
  1159 +                   cui-areatype="toolbar"
       
  1160 +                   removable="true">
       
  1161 +        <toolbarbutton id="bookmarks-toolbar-placeholder"
       
  1162 +                       class="bookmark-item"
       
  1163 +                       label="&bookmarksToolbarItem.label;"/>
       
  1164 +        <toolbarbutton id="bookmarks-toolbar-button"
       
  1165 +                       class="toolbarbutton-1"
       
  1166 +                       flex="1"
       
  1167 +                       label="&bookmarksToolbarItem.label;"
       
  1168 +                       oncommand="PlacesToolbarHelper.onPlaceholderCommand();"/>
       
  1169 +        <hbox flex="1"
       
  1170 +              id="PlacesToolbar"
       
  1171 +              context="placesContext"
       
  1172 +              onmouseup="BookmarksEventHandler.onMouseUp(event);"
       
  1173 +              onclick="BookmarksEventHandler.onClick(event, this._placesView);"
       
  1174 +              oncommand="BookmarksEventHandler.onCommand(event);"
       
  1175 +              tooltip="bhTooltip"
       
  1176 +              popupsinherittooltip="true">
       
  1177 +          <hbox flex="1">
       
  1178 +            <hbox id="PlacesToolbarDropIndicatorHolder" align="center" collapsed="true">
       
  1179 +              <image id="PlacesToolbarDropIndicator"
       
  1180 +                     mousethrough="always"
       
  1181 +                     collapsed="true"/>
       
  1182 +            </hbox>
       
  1183 +            <scrollbox orient="horizontal"
       
  1184 +                       id="PlacesToolbarItems"
       
  1185 +                       flex="1"/>
       
  1186 +            <toolbarbutton type="menu"
       
  1187 +                           id="PlacesChevron"
       
  1188 +                           class="toolbarbutton-1"
       
  1189 +                           mousethrough="never"
       
  1190 +                           collapsed="true"
       
  1191 +                           tooltiptext="&bookmarksToolbarChevron.tooltip;"
       
  1192 +                           onpopupshowing="document.getElementById('PlacesToolbar')
       
  1193 +                                                   ._placesView._onChevronPopupShowing(event);">
       
  1194 +              <menupopup id="PlacesChevronPopup"
       
  1195 +                         placespopup="true"
       
  1196 +                         tooltip="bhTooltip" popupsinherittooltip="true"
       
  1197 +                         context="placesContext"/>
       
  1198 +            </toolbarbutton>
       
  1199 +          </hbox>
       
  1200 +        </hbox>
       
  1201 +      </toolbaritem>
       
  1202 +    </toolbar>
       
  1203 +
       
  1204 +    <toolbarpalette id="BrowserToolbarPalette">
       
  1205 +
       
  1206 +      <toolbarbutton id="print-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
       
  1207 +#ifdef XP_MACOSX
       
  1208 +                     command="cmd_print"
       
  1209 +                     tooltip="dynamic-shortcut-tooltip"
       
  1210 +#else
       
  1211 +                     command="cmd_printPreview"
       
  1212 +                     tooltiptext="&printButton.tooltip;"
       
  1213 +#endif
       
  1214 +                     label="&printButton.label;"/>
       
  1215 +
       
  1216 +
       
  1217 +      <toolbarbutton id="new-window-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
       
  1218 +                     label="&newNavigatorCmd.label;"
       
  1219 +                     command="cmd_newNavigator"
       
  1220 +                     tooltip="dynamic-shortcut-tooltip"
       
  1221 +                     ondrop="newWindowButtonObserver.onDrop(event)"
       
  1222 +                     ondragover="newWindowButtonObserver.onDragOver(event)"
       
  1223 +                     ondragenter="newWindowButtonObserver.onDragOver(event)"
       
  1224 +                     ondragexit="newWindowButtonObserver.onDragExit(event)"/>
       
  1225 +
       
  1226 +      <toolbarbutton id="fullscreen-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
       
  1227 +                     observes="View:FullScreen"
       
  1228 +                     type="checkbox"
       
  1229 +                     label="&fullScreenCmd.label;"
       
  1230 +                     tooltip="dynamic-shortcut-tooltip"/>
       
  1231 +
       
  1232 +      <toolbarbutton id="bookmarks-menu-button"
       
  1233 +                     class="toolbarbutton-1 chromeclass-toolbar-additional subviewbutton-nav"
       
  1234 +                     type="menu"
       
  1235 +                     label="&bookmarksMenuButton2.label;"
       
  1236 +                     tooltip="dynamic-shortcut-tooltip"
       
  1237 +                     anchor="dropmarker"
       
  1238 +                     ondragenter="PlacesMenuDNDHandler.onDragEnter(event);"
       
  1239 +                     ondragover="PlacesMenuDNDHandler.onDragOver(event);"
       
  1240 +                     ondragleave="PlacesMenuDNDHandler.onDragLeave(event);"
       
  1241 +                     ondrop="PlacesMenuDNDHandler.onDrop(event);"
       
  1242 +                     oncommand="BookmarkingUI.onCommand(event);">
       
  1243 +        <menupopup id="BMB_bookmarksPopup"
       
  1244 +                   class="cui-widget-panel cui-widget-panelview cui-widget-panelWithFooter PanelUI-subView"
       
  1245 +                   placespopup="true"
       
  1246 +                   context="placesContext"
       
  1247 +                   openInTabs="children"
       
  1248 +                   side="top"
       
  1249 +                   onmouseup="BookmarksEventHandler.onMouseUp(event);"
       
  1250 +                   oncommand="BookmarksEventHandler.onCommand(event);"
       
  1251 +                   onclick="BookmarksEventHandler.onClick(event, this.parentNode._placesView);"
       
  1252 +                   onpopupshowing="BookmarkingUI.onPopupShowing(event);
       
  1253 +                                   BookmarkingUI.attachPlacesView(event, this);"
       
  1254 +                   tooltip="bhTooltip" popupsinherittooltip="true">
       
  1255 +          <menuitem id="BMB_viewBookmarksSidebar"
       
  1256 +                    class="menuitem-iconic subviewbutton"
       
  1257 +                    label-show="&viewBookmarksSidebar2.label;"
       
  1258 +                    label-hide="&hideBookmarksSidebar.label;"
       
  1259 +                    oncommand="SidebarUI.toggle('viewBookmarksSidebar');"/>
       
  1260 +          <!-- NB: temporary solution for bug 985024, this should go away soon. -->
       
  1261 +          <menuitem id="BMB_bookmarksShowAllTop"
       
  1262 +                    class="menuitem-iconic subviewbutton"
       
  1263 +                    label="&showAllBookmarks2.label;"
       
  1264 +                    command="Browser:ShowAllBookmarks"
       
  1265 +                    key="manBookmarkKb"/>
       
  1266 +          <menuseparator/>
       
  1267 +          <menu id="BMB_bookmarksToolbar"
       
  1268 +                class="menu-iconic bookmark-item subviewbutton"
       
  1269 +                label="&personalbarCmd.label;"
       
  1270 +                container="true">
       
  1271 +            <menupopup id="BMB_bookmarksToolbarPopup"
       
  1272 +                       placespopup="true"
       
  1273 +                       context="placesContext"
       
  1274 +                       onpopupshowing="if (!this.parentNode._placesView)
       
  1275 +                                         new PlacesMenu(event, `place:parent=${PlacesUtils.bookmarks.toolbarGuid}`,
       
  1276 +                                                        PlacesUIUtils.getViewForNode(this.parentNode.parentNode).options);">
       
  1277 +              <menuitem id="BMB_viewBookmarksToolbar"
       
  1278 +                        class="menuitem-iconic subviewbutton"
       
  1279 +                        label-show="&viewBookmarksToolbar.label;"
       
  1280 +                        label-hide="&hideBookmarksToolbar.label;"
       
  1281 +                        oncommand="BookmarkingUI.toggleBookmarksToolbar();"/>
       
  1282 +              <menuseparator/>
       
  1283 +              <!-- Bookmarks toolbar items -->
       
  1284 +            </menupopup>
       
  1285 +          </menu>
       
  1286 +          <menu id="BMB_unsortedBookmarks"
       
  1287 +                class="menu-iconic bookmark-item subviewbutton"
       
  1288 +                label="&bookmarksMenuButton.other.label;"
       
  1289 +                container="true">
       
  1290 +            <menupopup id="BMB_unsortedBookmarksPopup"
       
  1291 +                       placespopup="true"
       
  1292 +                       context="placesContext"
       
  1293 +                       onpopupshowing="if (!this.parentNode._placesView)
       
  1294 +                                         new PlacesMenu(event, `place:parent=${PlacesUtils.bookmarks.unfiledGuid}`,
       
  1295 +                                                        PlacesUIUtils.getViewForNode(this.parentNode.parentNode).options);"/>
       
  1296 +          </menu>
       
  1297 +          <menu id="BMB_mobileBookmarks"
       
  1298 +                class="menu-iconic bookmark-item subviewbutton"
       
  1299 +                label="&bookmarksMenuButton.mobile.label;"
       
  1300 +                hidden="true"
       
  1301 +                container="true">
       
  1302 +            <menupopup id="BMB_mobileBookmarksPopup"
       
  1303 +                       placespopup="true"
       
  1304 +                       context="placesContext"
       
  1305 +                       onpopupshowing="if (!this.parentNode._placesView)
       
  1306 +                                         new PlacesMenu(event, `place:parent=${PlacesUtils.bookmarks.mobileGuid}`,
       
  1307 +                                                        PlacesUIUtils.getViewForNode(this.parentNode.parentNode).options);"/>
       
  1308 +          </menu>
       
  1309 +
       
  1310 +          <menuseparator/>
       
  1311 +          <!-- Bookmarks menu items will go here -->
       
  1312 +          <menuitem id="BMB_bookmarksShowAll"
       
  1313 +                    class="subviewbutton panel-subview-footer"
       
  1314 +                    label="&showAllBookmarks2.label;"
       
  1315 +                    command="Browser:ShowAllBookmarks"
       
  1316 +                    key="manBookmarkKb"/>
       
  1317 +        </menupopup>
       
  1318 +      </toolbarbutton>
       
  1319 +
       
  1320 +      <toolbaritem id="search-container"
       
  1321 +                   class="chromeclass-toolbar-additional"
       
  1322 +                   title="&searchItem.title;"
       
  1323 +                   align="center"
       
  1324 +                   flex="100"
       
  1325 +                   persist="width">
       
  1326 +        <searchbar id="searchbar" flex="1"/>
       
  1327 +      </toolbaritem>
       
  1328 +    </toolbarpalette>
       
  1329 +  </toolbox>
       
  1330 +
       
  1331 +  <hbox id="fullscr-toggler" hidden="true"/>
       
  1332 +
       
  1333 +  <deck id="content-deck" flex="1">
       
  1334 +    <hbox flex="1" id="browser">
       
  1335 +      <vbox id="browser-border-start" hidden="true" layer="true"/>
       
  1336 +      <vbox id="sidebar-box" hidden="true" class="chromeclass-extrachrome">
       
  1337 +        <sidebarheader id="sidebar-header" align="center">
       
  1338 +          <toolbarbutton id="sidebar-switcher-target" flex="1" class="tabbable">
       
  1339 +            <image id="sidebar-icon" consumeanchor="sidebar-switcher-target"/>
       
  1340 +            <label id="sidebar-title" crop="end" flex="1" control="sidebar"/>
       
  1341 +            <image id="sidebar-switcher-arrow"/>
       
  1342 +          </toolbarbutton>
       
  1343 +          <image id="sidebar-throbber"/>
       
  1344 +# To ensure the button label's intrinsic width doesn't expand the sidebar
       
  1345 +# if the label is long, the button needs flex=1.
       
  1346 +# To ensure the button doesn't expand unnecessarily for short labels, the
       
  1347 +# spacer should significantly out-flex the button.
       
  1348 +          <spacer flex="1000"/>
       
  1349 +          <toolbarbutton id="sidebar-close" class="close-icon tabbable" tooltiptext="&sidebarCloseButton.tooltip;" oncommand="SidebarUI.hide();"/>
       
  1350 +        </sidebarheader>
       
  1351 +        <browser id="sidebar" flex="1" autoscroll="false" disablehistory="true" disablefullscreen="true"
       
  1352 +                  style="min-width: 14em; width: 18em; max-width: 36em;" tooltip="aHTMLTooltip"/>
       
  1353 +      </vbox>
       
  1354 +
       
  1355 +      <splitter id="sidebar-splitter" class="chromeclass-extrachrome sidebar-splitter" hidden="true"/>
       
  1356 +      <vbox id="appcontent" flex="1">
       
  1357 +        <!-- gHighPriorityNotificationBox will be added here lazily. -->
       
  1358 +        <tabbox id="tabbrowser-tabbox"
       
  1359 +                flex="1" tabcontainer="tabbrowser-tabs">
       
  1360 +          <tabpanels id="tabbrowser-tabpanels"
       
  1361 +                     flex="1" class="plain" selectedIndex="0"/>
       
  1362 +        </tabbox>
       
  1363 +      </vbox>
       
  1364 +      <vbox id="browser-border-end" hidden="true" layer="true"/>
       
  1365 +    </hbox>
       
  1366 +#include ../../components/customizableui/content/customizeMode.inc.xul
       
  1367 +  </deck>
       
  1368 +
       
  1369 +  <html:div id="fullscreen-warning" class="pointerlockfswarning" hidden="true">
       
  1370 +    <html:div class="pointerlockfswarning-domain-text">
       
  1371 +      &fullscreenWarning.beforeDomain.label;
       
  1372 +      <html:span class="pointerlockfswarning-domain"/>
       
  1373 +      &fullscreenWarning.afterDomain.label;
       
  1374 +    </html:div>
       
  1375 +    <html:div class="pointerlockfswarning-generic-text">
       
  1376 +      &fullscreenWarning.generic.label;
       
  1377 +    </html:div>
       
  1378 +    <html:button id="fullscreen-exit-button"
       
  1379 +                 onclick="FullScreen.exitDomFullScreen();">
       
  1380 +#ifdef XP_MACOSX
       
  1381 +            &exitDOMFullscreenMac.button;
       
  1382 +#else
       
  1383 +            &exitDOMFullscreen.button;
       
  1384 +#endif
       
  1385 +    </html:button>
       
  1386 +  </html:div>
       
  1387 +
       
  1388 +  <html:div id="pointerlock-warning" class="pointerlockfswarning" hidden="true">
       
  1389 +    <html:div class="pointerlockfswarning-domain-text">
       
  1390 +      &pointerlockWarning.beforeDomain.label;
       
  1391 +      <html:span class="pointerlockfswarning-domain"/>
       
  1392 +      &pointerlockWarning.afterDomain.label;
       
  1393 +    </html:div>
       
  1394 +    <html:div class="pointerlockfswarning-generic-text">
       
  1395 +      &pointerlockWarning.generic.label;
       
  1396 +    </html:div>
       
  1397 +  </html:div>
       
  1398 +
       
  1399 +  <vbox id="browser-bottombox" layer="true">
       
  1400 +    <!-- gNotificationBox will be added here lazily. -->
       
  1401 +  </vbox>
       
  1402 +
       
  1403 +</window>
       
  1404 diff --git a/browser/base/jar.mn b/browser/base/jar.mn
       
  1405 --- a/browser/base/jar.mn
       
  1406 +++ b/browser/base/jar.mn
       
  1407 @@ -28,16 +28,18 @@ browser.jar:
       
  1408          content/browser/aboutTabCrashed.js            (content/aboutTabCrashed.js)
       
  1409          content/browser/aboutTabCrashed.xhtml         (content/aboutTabCrashed.xhtml)
       
  1410  *       content/browser/browser.css                   (content/browser.css)
       
  1411          content/browser/browser.js                    (content/browser.js)
       
  1412  #ifdef MOZ_BROWSER_XHTML
       
  1413  *       content/browser/browser.xhtml                 (content/browser.xhtml)
       
  1414  #endif
       
  1415  *       content/browser/browser.xul                   (content/browser.xul)
       
  1416 +*       content/browser/browser-kde.xul               (content/browser-kde.xul)
       
  1417 +%       override chrome://browser/content/browser.xul chrome://browser/content/browser-kde.xul desktop=kde
       
  1418          content/browser/browser-addons.js             (content/browser-addons.js)
       
  1419          content/browser/browser-allTabsMenu.js        (content/browser-allTabsMenu.js)
       
  1420          content/browser/browser-captivePortal.js      (content/browser-captivePortal.js)
       
  1421          content/browser/browser-ctrlTab.js            (content/browser-ctrlTab.js)
       
  1422          content/browser/browser-customization.js      (content/browser-customization.js)
       
  1423          content/browser/browser-data-submission-info-bar.js (content/browser-data-submission-info-bar.js)
       
  1424          content/browser/browser-compacttheme.js       (content/browser-compacttheme.js)
       
  1425          content/browser/browser-contentblocking.js    (content/browser-contentblocking.js)
       
  1426 diff --git a/browser/components/build/nsModule.cpp b/browser/components/build/nsModule.cpp
       
  1427 --- a/browser/components/build/nsModule.cpp
       
  1428 +++ b/browser/components/build/nsModule.cpp
       
  1429 @@ -8,17 +8,17 @@
       
  1430  #include "nsBrowserCompsCID.h"
       
  1431  #include "DirectoryProvider.h"
       
  1432  
       
  1433  #if defined(XP_WIN)
       
  1434  #include "nsWindowsShellService.h"
       
  1435  #elif defined(XP_MACOSX)
       
  1436  #include "nsMacShellService.h"
       
  1437  #elif defined(MOZ_WIDGET_GTK)
       
  1438 -#include "nsGNOMEShellService.h"
       
  1439 +#include "nsUnixShellService.h"
       
  1440  #endif
       
  1441  
       
  1442  #if defined(MOZ_WIDGET_COCOA)
       
  1443  #include "nsMacAttribution.h"
       
  1444  #endif
       
  1445  
       
  1446  #if defined(XP_WIN)
       
  1447  #include "nsIEHistoryEnumerator.h"
       
  1448 @@ -33,18 +33,16 @@ using namespace mozilla::browser;
       
  1449  
       
  1450  /////////////////////////////////////////////////////////////////////////////
       
  1451  
       
  1452  NS_GENERIC_FACTORY_CONSTRUCTOR(DirectoryProvider)
       
  1453  #if defined(XP_WIN)
       
  1454  NS_GENERIC_FACTORY_CONSTRUCTOR(nsWindowsShellService)
       
  1455  #elif defined(XP_MACOSX)
       
  1456  NS_GENERIC_FACTORY_CONSTRUCTOR(nsMacShellService)
       
  1457 -#elif defined(MOZ_WIDGET_GTK)
       
  1458 -NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGNOMEShellService, Init)
       
  1459  #endif
       
  1460  
       
  1461  #if defined(MOZ_WIDGET_COCOA)
       
  1462  NS_GENERIC_FACTORY_CONSTRUCTOR(nsMacAttributionService)
       
  1463  #endif
       
  1464  
       
  1465  #if defined(XP_WIN)
       
  1466  NS_GENERIC_FACTORY_CONSTRUCTOR(nsIEHistoryEnumerator)
       
  1467 @@ -67,17 +65,17 @@ NS_DEFINE_NAMED_CID(NS_MACATTRIBUTIONSER
       
  1468  #endif
       
  1469  
       
  1470  static const mozilla::Module::CIDEntry kBrowserCIDs[] = {
       
  1471      // clang-format off
       
  1472      { &kNS_BROWSERDIRECTORYPROVIDER_CID, false, nullptr, DirectoryProviderConstructor },
       
  1473  #if defined(XP_WIN)
       
  1474      { &kNS_SHELLSERVICE_CID, false, nullptr, nsWindowsShellServiceConstructor },
       
  1475  #elif defined(MOZ_WIDGET_GTK)
       
  1476 -    { &kNS_SHELLSERVICE_CID, false, nullptr, nsGNOMEShellServiceConstructor },
       
  1477 +    { &kNS_SHELLSERVICE_CID, false, nullptr, nsUnixShellServiceConstructor },
       
  1478  #endif
       
  1479      { &kNS_BROWSER_ABOUT_REDIRECTOR_CID, false, nullptr, AboutRedirector::Create },
       
  1480  #if defined(XP_WIN)
       
  1481      { &kNS_WINIEHISTORYENUMERATOR_CID, false, nullptr, nsIEHistoryEnumeratorConstructor },
       
  1482  #elif defined(XP_MACOSX)
       
  1483      { &kNS_SHELLSERVICE_CID, false, nullptr, nsMacShellServiceConstructor },
       
  1484  #endif
       
  1485  #if defined(MOZ_WIDGET_COCOA)
       
  1486 diff --git a/browser/components/preferences/in-content/main.js b/browser/components/preferences/in-content/main.js
    14 diff --git a/browser/components/preferences/in-content/main.js b/browser/components/preferences/in-content/main.js
  1487 --- a/browser/components/preferences/in-content/main.js
    15 --- a/browser/components/preferences/in-content/main.js
  1488 +++ b/browser/components/preferences/in-content/main.js
    16 +++ b/browser/components/preferences/in-content/main.js
  1489 @@ -289,16 +289,23 @@ var gMainPane = {
    17 @@ -341,16 +341,23 @@ var gMainPane = {
  1490            this._backoffIndex++ : backoffTimes.length - 1]);
    18          }, backoffTimes[this._backoffIndex + 1 < backoffTimes.length ? this._backoffIndex++ : backoffTimes.length - 1]);
  1491        };
    19        };
  1492  
    20  
  1493        window.setTimeout(() => {
    21        window.setTimeout(() => {
  1494          window.requestIdleCallback(pollForDefaultBrowser);
    22          window.requestIdleCallback(pollForDefaultBrowser);
  1495        }, backoffTimes[this._backoffIndex]);
    23        }, backoffTimes[this._backoffIndex]);
  1503 +    }
    31 +    }
  1504 +
    32 +
  1505      this.initBrowserContainers();
    33      this.initBrowserContainers();
  1506      this.buildContentProcessCountMenuList();
    34      this.buildContentProcessCountMenuList();
  1507  
    35  
  1508      let performanceSettingsLink = document.getElementById("performanceSettingsLearnMore");
    36      let performanceSettingsLink = document.getElementById(
  1509      let performanceSettingsUrl = Services.urlFormatter.formatURLPref("app.support.baseURL") + "performance";
    37        "performanceSettingsLearnMore"
  1510      performanceSettingsLink.setAttribute("href", performanceSettingsUrl);
    38      );
  1511  
    39      let performanceSettingsUrl =
  1512      this.updateDefaultPerformanceSettingsPref();
    40        Services.urlFormatter.formatURLPref("app.support.baseURL") +
  1513 @@ -1012,16 +1019,27 @@ var gMainPane = {
    41 @@ -1199,16 +1206,27 @@ var gMainPane = {
  1514        // Reset exponential backoff delay time in order to do visual update in pollForDefaultBrowser.
       
  1515        this._backoffIndex = 0;
    42        this._backoffIndex = 0;
  1516  
    43  
  1517        let shellSvc = getShellService();
    44        let shellSvc = getShellService();
  1518        if (!shellSvc)
    45        if (!shellSvc) {
  1519          return;
    46          return;
       
    47        }
  1520        try {
    48        try {
  1521          shellSvc.setDefaultBrowser(true, false);
    49          shellSvc.setDefaultBrowser(true, false);
  1522 +        if (kde_session == 1) {
    50 +        if (kde_session == 1) {
  1523 +          var shellObj = Components.classes["@mozilla.org/file/local;1"]
    51 +          var shellObj = Components.classes["@mozilla.org/file/local;1"]
  1524 +            .createInstance(Components.interfaces.nsILocalFile);
    52 +            .createInstance(Components.interfaces.nsILocalFile);
  1539        document.getElementById("setDefaultPane").selectedIndex = selectedIndex;
    67        document.getElementById("setDefaultPane").selectedIndex = selectedIndex;
  1540      }
    68      }
  1541 diff --git a/browser/components/shell/moz.build b/browser/components/shell/moz.build
    69 diff --git a/browser/components/shell/moz.build b/browser/components/shell/moz.build
  1542 --- a/browser/components/shell/moz.build
    70 --- a/browser/components/shell/moz.build
  1543 +++ b/browser/components/shell/moz.build
    71 +++ b/browser/components/shell/moz.build
  1544 @@ -39,16 +39,18 @@ if CONFIG['OS_ARCH'] == 'WINNT':
    72 @@ -28,16 +28,18 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'coco
  1545      ]
    73      ]
  1546  elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
    74  elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk':
  1547      SOURCES += [
    75      XPIDL_SOURCES += [
  1548          'nsMacShellService.cpp',
    76          'nsIGNOMEShellService.idl',
  1549      ]
    77      ]
  1550  elif 'gtk' in CONFIG['MOZ_WIDGET_TOOLKIT']:
    78  
  1551      SOURCES += [
    79      SOURCES += [
  1552          'nsGNOMEShellService.cpp',
    80          'nsGNOMEShellService.cpp',
  1553 +        'nsKDEShellService.cpp',
    81 +        'nsKDEShellService.cpp',
  1554 +        'nsUnixShellService.cpp',
    82 +        'nsUnixShellService.cpp',
  1555      ]
    83      ]
  1556  
    84  elif CONFIG['OS_ARCH'] == 'WINNT':
  1557  if SOURCES:
    85      SOURCES += [
  1558      FINAL_LIBRARY = 'browsercomps'
    86          'nsWindowsShellService.cpp',
  1559  
    87      ]
  1560  EXTRA_JS_MODULES += [
    88      LOCAL_INCLUDES += [
  1561      'HeadlessShell.jsm',
    89          '../../../other-licenses/nsis/Contrib/CityHash/cityhash',
  1562      'ShellService.jsm',
    90      ]
  1563 diff --git a/browser/components/shell/nsKDEShellService.cpp b/browser/components/shell/nsKDEShellService.cpp
    91 diff --git a/browser/components/shell/nsKDEShellService.cpp b/browser/components/shell/nsKDEShellService.cpp
  1564 new file mode 100644
    92 new file mode 100644
  1565 --- /dev/null
    93 --- /dev/null
  1566 +++ b/browser/components/shell/nsKDEShellService.cpp
    94 +++ b/browser/components/shell/nsKDEShellService.cpp
  1567 @@ -0,0 +1,153 @@
    95 @@ -0,0 +1,103 @@
  1568 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
    96 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
  1569 +/* This Source Code Form is subject to the terms of the Mozilla Public
    97 +/* This Source Code Form is subject to the terms of the Mozilla Public
  1570 + * License, v. 2.0. If a copy of the MPL was not distributed with this
    98 + * License, v. 2.0. If a copy of the MPL was not distributed with this
  1571 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
    99 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  1572 +
   100 +
  1596 +}
   124 +}
  1597 +
   125 +
  1598 +NS_IMPL_ISUPPORTS(nsKDEShellService, nsIGNOMEShellService, nsIShellService)
   126 +NS_IMPL_ISUPPORTS(nsKDEShellService, nsIGNOMEShellService, nsIShellService)
  1599 +
   127 +
  1600 +NS_IMETHODIMP
   128 +NS_IMETHODIMP
  1601 +nsKDEShellService::IsDefaultBrowser(bool aStartupCheck,
   129 +nsKDEShellService::IsDefaultBrowser(bool aForAllTypes,
  1602 +                                    bool aForAllTypes,
       
  1603 +                                    bool* aIsDefaultBrowser)
   130 +                                    bool* aIsDefaultBrowser)
  1604 +{
   131 +{
  1605 +    *aIsDefaultBrowser = false;
   132 +    *aIsDefaultBrowser = false;
  1606 +    if (aStartupCheck)
       
  1607 +        mCheckedThisSession = true;
       
  1608 +
   133 +
  1609 +    nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
   134 +    nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
  1610 +    if (!command)
   135 +    if (!command)
  1611 +        return NS_ERROR_FAILURE;
   136 +        return NS_ERROR_FAILURE;
  1612 +
   137 +
  1669 +nsKDEShellService::SetDesktopBackgroundColor(PRUint32 aColor)
   194 +nsKDEShellService::SetDesktopBackgroundColor(PRUint32 aColor)
  1670 +{
   195 +{
  1671 +    return NS_ERROR_NOT_IMPLEMENTED;
   196 +    return NS_ERROR_NOT_IMPLEMENTED;
  1672 +}
   197 +}
  1673 +
   198 +
  1674 +NS_IMETHODIMP
       
  1675 +nsKDEShellService::OpenApplication(PRInt32 aApplication)
       
  1676 +{
       
  1677 +    nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
       
  1678 +    if (!command)
       
  1679 +        return NS_ERROR_FAILURE;
       
  1680 +
       
  1681 +    nsCOMPtr<nsISupportsCString> str = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
       
  1682 +    if (!str)
       
  1683 +        return NS_ERROR_FAILURE;
       
  1684 +
       
  1685 +    if( aApplication == APPLICATION_MAIL )
       
  1686 +        str->SetData( NS_LITERAL_CSTRING( "OPENMAIL" ));
       
  1687 +    else if( aApplication == APPLICATION_NEWS )
       
  1688 +        str->SetData( NS_LITERAL_CSTRING( "OPENNEWS" ));
       
  1689 +    else
       
  1690 +        return NS_ERROR_NOT_IMPLEMENTED;
       
  1691 +
       
  1692 +    command->AppendElement( str );
       
  1693 +    return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
       
  1694 +}
       
  1695 +
       
  1696 +NS_IMETHODIMP
       
  1697 +nsKDEShellService::OpenApplicationWithURI(nsIFile* aApplication, const nsACString& aURI)
       
  1698 +{
       
  1699 +    nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
       
  1700 +    if (!command)
       
  1701 +        return NS_ERROR_FAILURE;
       
  1702 +
       
  1703 +    nsCOMPtr<nsISupportsCString> cmdstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
       
  1704 +    nsCOMPtr<nsISupportsCString> appstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
       
  1705 +    nsCOMPtr<nsISupportsCString> uristr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
       
  1706 +    if (!cmdstr || !appstr || !uristr)
       
  1707 +        return NS_ERROR_FAILURE;
       
  1708 +
       
  1709 +    cmdstr->SetData( NS_LITERAL_CSTRING( "RUN" ));
       
  1710 +    command->AppendElement( cmdstr );
       
  1711 +    nsAutoCString app;
       
  1712 +    nsresult rv = aApplication->GetNativePath( app );
       
  1713 +    NS_ENSURE_SUCCESS( rv, rv );
       
  1714 +    appstr->SetData( app );
       
  1715 +    command->AppendElement( appstr );
       
  1716 +    uristr->SetData( aURI );
       
  1717 +    command->AppendElement( uristr );
       
  1718 +    return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
       
  1719 +}
       
  1720 +
       
  1721 diff --git a/browser/components/shell/nsKDEShellService.h b/browser/components/shell/nsKDEShellService.h
   199 diff --git a/browser/components/shell/nsKDEShellService.h b/browser/components/shell/nsKDEShellService.h
  1722 new file mode 100644
   200 new file mode 100644
  1723 --- /dev/null
   201 --- /dev/null
  1724 +++ b/browser/components/shell/nsKDEShellService.h
   202 +++ b/browser/components/shell/nsKDEShellService.h
  1725 @@ -0,0 +1,30 @@
   203 @@ -0,0 +1,32 @@
  1726 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
   204 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
  1727 +/* This Source Code Form is subject to the terms of the Mozilla Public
   205 +/* This Source Code Form is subject to the terms of the Mozilla Public
  1728 + * License, v. 2.0. If a copy of the MPL was not distributed with this
   206 + * License, v. 2.0. If a copy of the MPL was not distributed with this
  1729 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
   207 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  1730 +
   208 +
  1731 +#ifndef nskdeshellservice_h____
   209 +#ifndef nskdeshellservice_h____
  1732 +#define nskdeshellservice_h____
   210 +#define nskdeshellservice_h____
  1733 +
   211 +
  1734 +#include "nsIGNOMEShellService.h"
   212 +#include "nsIGNOMEShellService.h"
       
   213 +#include "nsToolkitShellService.h"
  1735 +#include "nsString.h"
   214 +#include "nsString.h"
  1736 +#include "mozilla/Attributes.h"
   215 +#include "mozilla/Attributes.h"
  1737 +
   216 +
  1738 +class nsKDEShellService final : public nsIGNOMEShellService
   217 +class nsKDEShellService final : public nsIGNOMEShellService,
       
   218 +                                public nsToolkitShellService
  1739 +{
   219 +{
  1740 +public:
   220 +public:
  1741 +  nsKDEShellService() : mCheckedThisSession(false) { }
   221 +  nsKDEShellService() : mCheckedThisSession(false) { }
  1742 +
   222 +
  1743 +  NS_DECL_ISUPPORTS
   223 +  NS_DECL_ISUPPORTS
  1798 +
   278 +
  1799 +NS_IMETHODIMP
   279 +NS_IMETHODIMP
  1800 +nsUnixShellServiceConstructor(nsISupports *aOuter, REFNSIID aIID, void **aResult);
   280 +nsUnixShellServiceConstructor(nsISupports *aOuter, REFNSIID aIID, void **aResult);
  1801 +
   281 +
  1802 +#endif // nsunixshellservice_h____
   282 +#endif // nsunixshellservice_h____
  1803 diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in
       
  1804 --- a/browser/installer/package-manifest.in
       
  1805 +++ b/browser/installer/package-manifest.in
       
  1806 @@ -451,16 +451,18 @@
       
  1807  @RESPATH@/browser/defaults/settings/pinning
       
  1808  @RESPATH@/browser/defaults/settings/main
       
  1809  
       
  1810  ; Warning: changing the path to channel-prefs.js can cause bugs (Bug 756325)
       
  1811  ; Technically this is an app pref file, but we are keeping it in the original
       
  1812  ; gre location for now.
       
  1813  @RESPATH@/defaults/pref/channel-prefs.js
       
  1814  
       
  1815 +@RESPATH@/defaults/pref/kde.js
       
  1816 +
       
  1817  ; Services (gre) prefs
       
  1818  @RESPATH@/defaults/pref/services-sync.js
       
  1819  
       
  1820  ; [Layout Engine Resources]
       
  1821  ; Style Sheets, Graphics and other Resources used by the layout engine.
       
  1822  @RESPATH@/res/EditorOverride.css
       
  1823  @RESPATH@/res/contenteditable.css
       
  1824  @RESPATH@/res/designmode.css