Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP2:GA
MozillaFirefox.3830
firefox-kde.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File firefox-kde.patch of Package MozillaFirefox.3830
# HG changeset patch # Parent 8b5eb57961b457018bfefebe58dd414ae48f5bb3 diff --git a/browser/base/content/browser-kde.xul b/browser/base/content/browser-kde.xul new file mode 100644 --- /dev/null +++ b/browser/base/content/browser-kde.xul @@ -0,0 +1,1181 @@ +#filter substitution +<?xml version="1.0"?> +# -*- Mode: HTML -*- +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +<?xml-stylesheet href="chrome://browser/content/browser.css" type="text/css"?> +<?xml-stylesheet href="chrome://browser/content/places/places.css" type="text/css"?> +<?xml-stylesheet href="chrome://devtools/skin/common.css" type="text/css"?> +<?xml-stylesheet href="chrome://browser/skin/controlcenter/panel.css" type="text/css"?> +<?xml-stylesheet href="chrome://browser/skin/customizableui/panelUIOverlay.css" type="text/css"?> +<?xml-stylesheet href="chrome://browser/skin/" type="text/css"?> +<?xml-stylesheet href="chrome://browser/skin/browser-lightweightTheme.css" type="text/css"?> + +<?xul-overlay href="chrome://global/content/editMenuOverlay.xul"?> +<?xul-overlay href="chrome://browser/content/baseMenuOverlay.xul"?> +<?xul-overlay href="chrome://browser/content/places/placesOverlay.xul"?> + +# All DTD information is stored in a separate file so that it can be shared by +# hiddenWindow.xul. +#include browser-doctype.inc + +<window id="main-window" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:html="http://www.w3.org/1999/xhtml" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + onload="gBrowserInit.onLoad()" onunload="gBrowserInit.onUnload()" onclose="return WindowIsClosing();" + title="&mainWindow.title;" + title_normal="&mainWindow.title;" +#ifdef XP_MACOSX + title_privatebrowsing="&mainWindow.title;&mainWindow.titlemodifiermenuseparator;&mainWindow.titlePrivateBrowsingSuffix;" + titledefault="&mainWindow.title;" + titlemodifier="" + titlemodifier_normal="" + titlemodifier_privatebrowsing="&mainWindow.titlePrivateBrowsingSuffix;" +#else + title_privatebrowsing="&mainWindow.titlemodifier; &mainWindow.titlePrivateBrowsingSuffix;" + titlemodifier="&mainWindow.titlemodifier;" + titlemodifier_normal="&mainWindow.titlemodifier;" + titlemodifier_privatebrowsing="&mainWindow.titlemodifier; &mainWindow.titlePrivateBrowsingSuffix;" +#endif +#ifdef CAN_DRAW_IN_TITLEBAR +#ifdef XP_WIN + chromemargin="0,2,2,2" +#else + chromemargin="0,-1,-1,-1" +#endif + tabsintitlebar="true" +#endif + titlemenuseparator="&mainWindow.titlemodifiermenuseparator;" + lightweightthemes="true" + lightweightthemesfooter="browser-bottombox" + windowtype="navigator:browser" + macanimationtype="document" + screenX="4" screenY="4" + fullscreenbutton="true" + sizemode="normal" + retargetdocumentfocus="urlbar" + persist="screenX screenY width height sizemode"> + +# All JS files which are not content (only) dependent that browser.xul +# wishes to include *must* go into the global-scripts.inc file +# so that they can be shared by macBrowserOverlay.xul. +#include global-scripts.inc +<script type="application/javascript" src="chrome://browser/content/nsContextMenu.js"/> + +<script type="application/javascript" src="chrome://global/content/contentAreaUtils.js"/> + +<script type="application/javascript" src="chrome://browser/content/places/editBookmarkOverlay.js"/> + +# All sets except for popupsets (commands, keys, stringbundles and broadcasters) *must* go into the +# browser-sets.inc file for sharing with hiddenWindow.xul. +#define FULL_BROWSER_WINDOW +#include browser-sets.inc +#undef FULL_BROWSER_WINDOW + + <popupset id="mainPopupSet"> + <menupopup id="tabContextMenu" + onpopupshowing="if (event.target == this) TabContextMenu.updateContextMenu(this);" + onpopuphidden="if (event.target == this) TabContextMenu.contextTab = null;"> + <menuitem id="context_reloadTab" label="&reloadTab.label;" accesskey="&reloadTab.accesskey;" + oncommand="gBrowser.reloadTab(TabContextMenu.contextTab);"/> + <menuitem id="context_toggleMuteTab" oncommand="TabContextMenu.contextTab.toggleMuteAudio();"/> + <menuseparator/> + <menuitem id="context_pinTab" label="&pinTab.label;" + accesskey="&pinTab.accesskey;" + oncommand="gBrowser.pinTab(TabContextMenu.contextTab);"/> + <menuitem id="context_unpinTab" label="&unpinTab.label;" hidden="true" + accesskey="&unpinTab.accesskey;" + oncommand="gBrowser.unpinTab(TabContextMenu.contextTab);"/> + <menuitem id="context_openTabInWindow" label="&moveToNewWindow.label;" + accesskey="&moveToNewWindow.accesskey;" + tbattr="tabbrowser-multiple" + oncommand="gBrowser.replaceTabWithWindow(TabContextMenu.contextTab);"/> +#ifdef E10S_TESTING_ONLY + <menuitem id="context_openNonRemoteWindow" label="Open in new non-e10s window" + tbattr="tabbrowser-remote" + hidden="true" + oncommand="gBrowser.openNonRemoteWindow(TabContextMenu.contextTab);"/> +#endif + <menuseparator/> + <menuitem id="context_reloadAllTabs" label="&reloadAllTabs.label;" accesskey="&reloadAllTabs.accesskey;" + tbattr="tabbrowser-multiple-visible" + oncommand="gBrowser.reloadAllTabs();"/> + <menuitem id="context_bookmarkAllTabs" + label="&bookmarkAllTabs.label;" + accesskey="&bookmarkAllTabs.accesskey;" + command="Browser:BookmarkAllTabs"/> + <menuitem id="context_closeTabsToTheEnd" label="&closeTabsToTheEnd.label;" accesskey="&closeTabsToTheEnd.accesskey;" + oncommand="gBrowser.removeTabsToTheEndFrom(TabContextMenu.contextTab, {animate: true});"/> + <menuitem id="context_closeOtherTabs" label="&closeOtherTabs.label;" accesskey="&closeOtherTabs.accesskey;" + oncommand="gBrowser.removeAllTabsBut(TabContextMenu.contextTab);"/> + <menuseparator/> + <menuitem id="context_undoCloseTab" + label="&undoCloseTab.label;" + accesskey="&undoCloseTab.accesskey;" + observes="History:UndoCloseTab"/> + <menuitem id="context_closeTab" label="&closeTab.label;" accesskey="&closeTab.accesskey;" + oncommand="gBrowser.removeTab(TabContextMenu.contextTab, { animate: true });"/> + </menupopup> + + <!-- bug 415444/582485: event.stopPropagation is here for the cloned version + of this menupopup --> + <menupopup id="backForwardMenu" + onpopupshowing="return FillHistoryMenu(event.target);" + oncommand="gotoHistoryIndex(event); event.stopPropagation();" + onclick="checkForMiddleClick(this, event);"/> + <tooltip id="aHTMLTooltip" page="true"/> + <tooltip id="remoteBrowserTooltip"/> + + <!-- for search and content formfill/pw manager --> + <panel type="autocomplete" id="PopupAutoComplete" noautofocus="true" hidden="true"/> + + <!-- for search with one-off buttons --> + <panel type="autocomplete" id="PopupSearchAutoComplete" noautofocus="true" hidden="true"/> + + <!-- for url bar autocomplete --> + <panel type="autocomplete-richlistbox" id="PopupAutoCompleteRichResult" noautofocus="true" hidden="true"> +#ifdef NIGHTLY_BUILD + <hbox id="urlbar-search-footer" flex="1" align="stretch" pack="end"> + <button id="urlbar-search-settings" label="&changeSearchSettings.button;" + oncommand="BrowserUITelemetry.countSearchSettingsEvent('urlbar'); openPreferences('paneSearch')"/> + </hbox> +#endif + </panel> + + <!-- for select dropdowns. The menupopup is what shows the list of options, + and the popuponly menulist makes things like the menuactive attributes + work correctly on the menupopup. ContentSelectDropdown expects the + popuponly menulist to be its immediate parent. --> + <menulist popuponly="true" id="ContentSelectDropdown" hidden="true"> + <menupopup rolluponmousewheel="true" + activateontab="true" +#ifdef XP_WIN + consumeoutsideclicks="false" ignorekeys="handled" +#endif + /> + </menulist> + + <!-- for invalid form error message --> + <panel id="invalid-form-popup" type="arrow" orient="vertical" noautofocus="true" hidden="true" level="parent"> + <description/> + </panel> + + <panel id="editBookmarkPanel" + type="arrow" + footertype="promobox" + orient="vertical" + ignorekeys="true" + hidden="true" + onpopupshown="StarUI.panelShown(event);" + aria-labelledby="editBookmarkPanelTitle"> + <row id="editBookmarkPanelHeader" align="center" hidden="true"> + <vbox align="center"> + <image id="editBookmarkPanelStarIcon"/> + </vbox> + <vbox> + <label id="editBookmarkPanelTitle"/> + <description id="editBookmarkPanelDescription"/> + <hbox> + <button id="editBookmarkPanelRemoveButton" + class="editBookmarkPanelHeaderButton" + oncommand="StarUI.removeBookmarkButtonCommand();" + accesskey="&editBookmark.removeBookmark.accessKey;"/> + </hbox> + </vbox> + </row> + <vbox id="editBookmarkPanelContent" flex="1" hidden="true"/> + <hbox id="editBookmarkPanelBottomButtons" pack="end"> +#ifdef XP_UNIX + <button id="editBookmarkPanelDoneButton" + class="editBookmarkPanelBottomButton" + label="&editBookmark.done.label;" + default="true" + oncommand="StarUI.panel.hidePopup();"/> + <button id="editBookmarkPanelDeleteButton" + class="editBookmarkPanelBottomButton" + label="&editBookmark.cancel.label;" + oncommand="StarUI.cancelButtonOnCommand();"/> +#else + <button id="editBookmarkPanelDeleteButton" + class="editBookmarkPanelBottomButton" + label="&editBookmark.cancel.label;" + oncommand="StarUI.cancelButtonOnCommand();"/> + <button id="editBookmarkPanelDoneButton" + class="editBookmarkPanelBottomButton" + label="&editBookmark.done.label;" + default="true" + oncommand="StarUI.panel.hidePopup();"/> +#endif + </hbox> + </panel> + + <!-- UI tour experience --> + <panel id="UITourTooltip" + type="arrow" + hidden="true" + noautofocus="true" + noautohide="true" + align="start" + orient="vertical" + role="alert"> + <vbox> + <hbox pack="end"> + <toolbarbutton id="UITourTooltipClose" class="close-icon" + tooltiptext="&uiTour.infoPanel.close;"/> + </hbox> + <hbox id="UITourTooltipBody"> + <vbox id="UITourTooltipIconContainer"> + <image id="UITourTooltipIcon"/> + </vbox> + <vbox flex="1"> + <label id="UITourTooltipTitle" flex="1"/> + <description id="UITourTooltipDescription" flex="1"/> + </vbox> + </hbox> + <hbox id="UITourTooltipButtons" flex="1" align="center"/> + </vbox> + </panel> + <!-- type="default" forces frames to be created so that the panel's size can be determined --> + <panel id="UITourHighlightContainer" + type="default" + hidden="true" + noautofocus="true" + noautohide="true" + flip="none" + consumeoutsideclicks="false" + mousethrough="always"> + <box id="UITourHighlight"></box> + </panel> + + <panel id="social-share-panel" + class="social-panel" + type="arrow" + orient="vertical" + onpopupshowing="SocialShare.onShowing()" + onpopuphidden="SocialShare.onHidden()" + hidden="true"> + <hbox class="social-share-toolbar"> + <toolbarbutton id="manage-share-providers" class="toolbarbutton share-provider-button" + tooltiptext="&social.addons.label;" + oncommand="BrowserOpenAddonsMgr('addons://list/service'); + this.parentNode.parentNode.hidePopup();"/> + <arrowscrollbox id="social-share-provider-buttons" orient="horizontal" flex="1" pack="end"> + <toolbarbutton id="add-share-provider" class="toolbarbutton share-provider-button" type="radio" + group="share-providers" tooltiptext="&findShareServices.label;" + oncommand="SocialShare.showDirectory()"/> + </arrowscrollbox> + </hbox> + <hbox id="share-container" flex="1"/> + </panel> + + <panel id="social-notification-panel" + class="social-panel" + type="arrow" + hidden="true" + noautofocus="true"/> + <panel id="social-flyout-panel" + class="social-panel" + onpopupshown="SocialFlyout.onShown()" + onpopuphidden="SocialFlyout.onHidden()" + side="right" + type="arrow" + hidden="true" + flip="slide" + rolluponmousewheel="true" + noautofocus="true" + position="topcenter topright"/> + + <panel id="loop-notification-panel" + class="loop-panel social-panel" + type="arrow" + hidden="true" + noautofocus="true"/> + + <panel id="loop-panel" + class="loop-panel social-panel" + type="arrow" + orient="horizontal" + hidden="true"/> + + <menupopup id="toolbar-context-menu" + onpopupshowing="onViewToolbarsPopupShowing(event, document.getElementById('viewToolbarsMenuSeparator'));"> + <menuitem oncommand="gCustomizeMode.addToPanel(document.popupNode)" + accesskey="&customizeMenu.moveToPanel.accesskey;" + label="&customizeMenu.moveToPanel.label;" + contexttype="toolbaritem" + class="customize-context-moveToPanel"/> + <menuitem oncommand="gCustomizeMode.removeFromArea(document.popupNode)" + accesskey="&customizeMenu.removeFromToolbar.accesskey;" + label="&customizeMenu.removeFromToolbar.label;" + contexttype="toolbaritem" + class="customize-context-removeFromToolbar"/> + <menuitem id="toolbar-context-reloadAllTabs" + class="toolbaritem-tabsmenu" + contexttype="tabbar" + oncommand="gBrowser.reloadAllTabs();" + label="&toolbarContextMenu.reloadAllTabs.label;" + accesskey="&toolbarContextMenu.reloadAllTabs.accesskey;"/> + <menuitem id="toolbar-context-bookmarkAllTabs" + class="toolbaritem-tabsmenu" + contexttype="tabbar" + command="Browser:BookmarkAllTabs" + label="&toolbarContextMenu.bookmarkAllTabs.label;" + accesskey="&toolbarContextMenu.bookmarkAllTabs.accesskey;"/> + <menuitem id="toolbar-context-undoCloseTab" + class="toolbaritem-tabsmenu" + contexttype="tabbar" + label="&toolbarContextMenu.undoCloseTab.label;" + accesskey="&toolbarContextMenu.undoCloseTab.accesskey;" + observes="History:UndoCloseTab"/> + <menuseparator/> + <menuseparator id="viewToolbarsMenuSeparator"/> + <!-- XXXgijs: we're using oncommand handler here to avoid the event being + redirected to the command element, thus preventing + listeners on the menupopup or further up the tree from + seeing the command event pass by. The observes attribute is + here so that the menuitem is still disabled and re-enabled + correctly. --> + <menuitem oncommand="BrowserCustomizeToolbar()" + observes="cmd_CustomizeToolbars" + class="viewCustomizeToolbar" + label="&viewCustomizeToolbar.label;" + accesskey="&viewCustomizeToolbar.accesskey;"/> + </menupopup> + + <menupopup id="blockedPopupOptions" + onpopupshowing="gPopupBlockerObserver.fillPopupList(event);" + onpopuphiding="gPopupBlockerObserver.onPopupHiding(event);"> + <menuitem observes="blockedPopupAllowSite"/> + <menuitem observes="blockedPopupEditSettings"/> + <menuitem observes="blockedPopupDontShowMessage"/> + <menuseparator observes="blockedPopupsSeparator"/> + </menupopup> + + <menupopup id="autohide-context" + onpopupshowing="FullScreen.getAutohide(this.firstChild);"> + <menuitem type="checkbox" label="&fullScreenAutohide.label;" + accesskey="&fullScreenAutohide.accesskey;" + oncommand="FullScreen.setAutohide();"/> + <menuseparator/> + <menuitem label="&fullScreenExit.label;" + accesskey="&fullScreenExit.accesskey;" + oncommand="BrowserFullScreen();"/> + </menupopup> + + <menupopup id="contentAreaContextMenu" pagemenu="#page-menu-separator" + onpopupshowing="if (event.target != this) + return true; + gContextMenu = new nsContextMenu(this, event.shiftKey); + if (gContextMenu.shouldDisplay) + updateEditUIVisibility(); + return gContextMenu.shouldDisplay;" + onpopuphiding="if (event.target != this) + return; + gContextMenu.hiding(); + gContextMenu = null; + updateEditUIVisibility();"> +#include browser-context.inc + </menupopup> + + <menupopup id="placesContext"/> + + <panel id="ctrlTab-panel" class="KUI-panel" hidden="true" norestorefocus="true" level="top"> + <hbox> + <button class="ctrlTab-preview" flex="1"/> + <button class="ctrlTab-preview" flex="1"/> + <button class="ctrlTab-preview" flex="1"/> + <button class="ctrlTab-preview" flex="1"/> + <button class="ctrlTab-preview" flex="1"/> + <button class="ctrlTab-preview" flex="1"/> + </hbox> + <hbox pack="center"> + <button id="ctrlTab-showAll" class="ctrlTab-preview" noicon="true"/> + </hbox> + </panel> + + <!-- Sync Panel --> + <panel id="sync-start-panel" class="sync-panel" type="arrow" hidden="true" + noautofocus="true" onclick="this.hidePopup();" + flip="slide"> + <hbox class="sync-panel-outer"> + <image class="sync-panel-icon"/> + <vbox class="sync-panel-inner"> + <description id="sync-start-panel-title" + value="&syncStartPanel2.heading;"/> + <description id="sync-start-panel-subtitle" + value="&syncStartPanel2.subTitle;"/> + </vbox> + </hbox> + </panel> + + <!-- Bookmarks and history tooltip --> + <tooltip id="bhTooltip"/> + + <tooltip id="tabbrowser-tab-tooltip" onpopupshowing="gBrowser.createTooltip(event);"/> + + <tooltip id="back-button-tooltip"> + <label class="tooltip-label" value="&backButton.tooltip;"/> +#ifdef XP_MACOSX + <label class="tooltip-label" value="&backForwardButtonMenuMac.tooltip;"/> +#else + <label class="tooltip-label" value="&backForwardButtonMenu.tooltip;"/> +#endif + </tooltip> + + <tooltip id="forward-button-tooltip"> + <label class="tooltip-label" value="&forwardButton.tooltip;"/> +#ifdef XP_MACOSX + <label class="tooltip-label" value="&backForwardButtonMenuMac.tooltip;"/> +#else + <label class="tooltip-label" value="&backForwardButtonMenu.tooltip;"/> +#endif + </tooltip> + + <tooltip id="share-button-tooltip" onpopupshowing="SocialShare.createTooltip(event);"> + <label class="tooltip-label"/> + <label class="tooltip-label"/> + </tooltip> + +#include popup-notifications.inc + +#include ../../components/customizableui/content/panelUI.inc.xul +#include ../../components/controlcenter/content/panel.inc.xul + + <hbox id="downloads-animation-container" mousethrough="always"> + <vbox id="downloads-notification-anchor"> + <vbox id="downloads-indicator-notification"/> + </vbox> + </hbox> + + <hbox id="bookmarked-notification-container" mousethrough="always"> + <vbox id="bookmarked-notification-anchor"> + <vbox id="bookmarked-notification"/> + </vbox> + <vbox id="bookmarked-notification-dropmarker-anchor"> + <image id="bookmarked-notification-dropmarker-icon"/> + </vbox> + </hbox> + + <tooltip id="dynamic-shortcut-tooltip" + onpopupshowing="UpdateDynamicShortcutTooltipText(this);"/> + </popupset> + +#ifdef CAN_DRAW_IN_TITLEBAR +<vbox id="titlebar"> + <hbox id="titlebar-content"> + <spacer id="titlebar-spacer" flex="1"/> + <hbox id="titlebar-buttonbox-container"> +#ifdef XP_WIN + <hbox id="private-browsing-indicator-titlebar"> + <hbox class="private-browsing-indicator"/> + </hbox> +#endif + <hbox id="titlebar-buttonbox"> + <toolbarbutton class="titlebar-button" id="titlebar-min" oncommand="window.minimize();"/> + <toolbarbutton class="titlebar-button" id="titlebar-max" oncommand="onTitlebarMaxClick();"/> + <toolbarbutton class="titlebar-button" id="titlebar-close" command="cmd_closeWindow"/> + </hbox> + </hbox> +#ifdef XP_MACOSX + <!-- OS X does not natively support RTL for its titlebar items, so we prevent this secondary + buttonbox from reversing order in RTL by forcing an LTR direction. --> + <hbox id="titlebar-secondary-buttonbox" dir="ltr"> + <hbox class="private-browsing-indicator"/> + <hbox id="titlebar-fullscreen-button"/> + </hbox> +#endif + </hbox> +</vbox> +#endif + +<deck flex="1" id="tab-view-deck"> +<vbox flex="1" id="browser-panel"> + + <toolbox id="navigator-toolbox" mode="icons"> + <!-- Menu --> + <toolbar type="menubar" id="toolbar-menubar" class="chromeclass-menubar" customizable="true" + defaultset="menubar-items" + mode="icons" iconsize="small" +#ifdef MENUBAR_CAN_AUTOHIDE + toolbarname="&menubarCmd.label;" + accesskey="&menubarCmd.accesskey;" +#if defined(MOZ_WIDGET_GTK) || defined(MOZ_WIDGET_QT) + autohide="true" +#endif +#endif + context="toolbar-context-menu"> + <toolbaritem id="menubar-items" align="center"> +# The entire main menubar is placed into browser-menubar.inc, so that it can be shared by +# hiddenWindow.xul. +#include browser-menubar.inc + </toolbaritem> + +#ifdef CAN_DRAW_IN_TITLEBAR +#ifndef XP_MACOSX + <hbox class="titlebar-placeholder" type="caption-buttons" ordinal="1000" + id="titlebar-placeholder-on-menubar-for-caption-buttons" persist="width" + skipintoolbarset="true"/> +#endif +#endif + </toolbar> + + <toolbar id="TabsToolbar" + fullscreentoolbar="true" + customizable="true" + mode="icons" + iconsize="small" + aria-label="&tabsToolbar.label;" + context="toolbar-context-menu" + defaultset="tabbrowser-tabs,new-tab-button,alltabs-button" + collapsed="true"> + +#if defined(MOZ_WIDGET_GTK) || defined(MOZ_WIDGET_QT) + <hbox id="private-browsing-indicator" + skipintoolbarset="true"/> +#endif + + <tabs id="tabbrowser-tabs" + class="tabbrowser-tabs" + tabbrowser="content" + flex="1" + setfocus="false" + tooltip="tabbrowser-tab-tooltip" + stopwatchid="FX_TAB_CLICK_MS"> + <tab class="tabbrowser-tab" selected="true" visuallyselected="true" fadein="true"/> + </tabs> + + <toolbarbutton id="new-tab-button" + class="toolbarbutton-1 chromeclass-toolbar-additional" + label="&tabCmd.label;" + command="cmd_newNavigatorTab" + onclick="checkForMiddleClick(this, event);" + tooltip="dynamic-shortcut-tooltip" + ondrop="newTabButtonObserver.onDrop(event)" + ondragover="newTabButtonObserver.onDragOver(event)" + ondragenter="newTabButtonObserver.onDragOver(event)" + ondragexit="newTabButtonObserver.onDragExit(event)" + cui-areatype="toolbar" + removable="true"/> + + <toolbarbutton id="alltabs-button" + class="toolbarbutton-1 chromeclass-toolbar-additional tabs-alltabs-button" + type="menu" + label="&listAllTabs.label;" + tooltiptext="&listAllTabs.label;" + removable="false"> + <menupopup id="alltabs-popup" + position="after_end"> + <menuitem id="alltabs_undoCloseTab" + class="menuitem-iconic" + key="key_undoCloseTab" + label="&undoCloseTab.label;" + observes="History:UndoCloseTab"/> + <menuseparator id="alltabs-popup-separator"/> + </menupopup> + </toolbarbutton> + +#if !defined(MOZ_WIDGET_GTK) && !defined(MOZ_WIDGET_QT) + <hbox class="private-browsing-indicator" skipintoolbarset="true"/> +#endif +#ifdef CAN_DRAW_IN_TITLEBAR + <hbox class="titlebar-placeholder" type="caption-buttons" + id="titlebar-placeholder-on-TabsToolbar-for-captions-buttons" persist="width" +#ifndef XP_MACOSX + ordinal="1000" +#endif + skipintoolbarset="true"/> + +#ifdef XP_MACOSX + <hbox class="titlebar-placeholder" type="fullscreen-button" + id="titlebar-placeholder-on-TabsToolbar-for-fullscreen-button" persist="width" + skipintoolbarset="true"/> +#endif +#endif + </toolbar> + + <!-- + CAVEAT EMPTOR + Should you need to add items to the toolbar here, make sure to also add them + to the default placements of buttons in CustomizableUI.jsm, so the + customization code doesn't get confused. + --> + <toolbar id="nav-bar" + aria-label="&navbarCmd.label;" + fullscreentoolbar="true" mode="icons" customizable="true" + iconsize="small" +#ifdef MOZ_DEV_EDITION + defaultset="urlbar-container,search-container,developer-button,bookmarks-menu-button,pocket-button,downloads-button,home-button,loop-button" +#else + defaultset="urlbar-container,search-container,bookmarks-menu-button,pocket-button,downloads-button,home-button,loop-button" +#endif + customizationtarget="nav-bar-customization-target" + overflowable="true" + overflowbutton="nav-bar-overflow-button" + overflowtarget="widget-overflow-list" + overflowpanel="widget-overflow" + context="toolbar-context-menu"> + + <hbox id="nav-bar-customization-target" flex="1"> + <toolbaritem id="urlbar-container" flex="400" persist="width" + removable="false" + class="chromeclass-location" overflows="false"> + <toolbarbutton id="back-button" class="toolbarbutton-1 chromeclass-toolbar-additional" + label="&backCmd.label;" + command="Browser:BackOrBackDuplicate" + onclick="checkForMiddleClick(this, event);" + tooltip="back-button-tooltip" + context="backForwardMenu"/> + <hbox id="urlbar-wrapper" flex="1"> + <toolbarbutton id="forward-button" class="toolbarbutton-1 chromeclass-toolbar-additional" + label="&forwardCmd.label;" + command="Browser:ForwardOrForwardDuplicate" + onclick="checkForMiddleClick(this, event);" + tooltip="forward-button-tooltip" + context="backForwardMenu"/> + <textbox id="urlbar" flex="1" + placeholder="&urlbar.placeholder2;" + type="autocomplete" + autocompletesearch="urlinline history" + autocompletesearchparam="enable-actions" + autocompletepopup="PopupAutoCompleteRichResult" + completeselectedindex="true" + shrinkdelay="250" + tabscrolling="true" + showcommentcolumn="true" + showimagecolumn="true" + enablehistory="true" + maxrows="6" + newlines="stripsurroundingwhitespace" + ontextentered="this.handleCommand(param);" + ontextreverted="return this.handleRevert();" + pageproxystate="invalid" + onfocus="document.getElementById('identity-box').style.MozUserFocus= 'normal'" + onblur="setTimeout(() => { document.getElementById('identity-box').style.MozUserFocus = ''; }, 0);"> + <box id="notification-popup-box" hidden="true" align="center"> + <image id="default-notification-icon" class="notification-anchor-icon" role="button" + aria-label="&urlbar.defaultNotificationAnchor.label;"/> + <!-- NB: the identity-notification-icon is used for persona-based auth and preffed + off by default. It hasn't been updated for some time and liable to being + removed.--> + <image id="identity-notification-icon" class="notification-anchor-icon" role="button"/> + <image id="geo-notification-icon" class="notification-anchor-icon" role="button" + aria-label="&urlbar.geolocationNotificationAnchor.label;"/> + <image id="addons-notification-icon" class="notification-anchor-icon" role="button" + aria-label="&urlbar.addonsNotificationAnchor.label;"/> + <image id="indexedDB-notification-icon" class="notification-anchor-icon" role="button" + aria-label="&urlbar.indexedDBNotificationAnchor.label;"/> + <image id="login-fill-notification-icon" class="notification-anchor-icon" role="button" + aria-label="&urlbar.loginFillNotificationAnchor.label;"/> + <image id="password-notification-icon" class="notification-anchor-icon" role="button" + aria-label="&urlbar.passwordNotificationAnchor.label;"/> + <image id="webapps-notification-icon" class="notification-anchor-icon" role="button" + aria-label="&urlbar.webappsNotificationAnchor.label;"/> + <image id="plugins-notification-icon" class="notification-anchor-icon" role="button" + aria-label="&urlbar.pluginsNotificationAnchor.label;"/> + <image id="web-notifications-notification-icon" class="notification-anchor-icon" role="button" + aria-label="&urlbar.webNotsNotificationAnchor3.label;"/> + <image id="webRTC-shareDevices-notification-icon" class="notification-anchor-icon" role="button" + aria-label="&urlbar.webRTCShareDevicesNotificationAnchor.label;"/> + <image id="webRTC-sharingDevices-notification-icon" class="notification-anchor-icon" role="button" + aria-label="&urlbar.webRTCSharingDevicesNotificationAnchor.label;"/> + <image id="webRTC-shareMicrophone-notification-icon" class="notification-anchor-icon" role="button" + aria-label="&urlbar.webRTCShareMicrophoneNotificationAnchor.label;"/> + <image id="webRTC-sharingMicrophone-notification-icon" class="notification-anchor-icon" role="button" + aria-label="&urlbar.webRTCSharingMicrophoneNotificationAnchor.label;"/> + <image id="webRTC-shareScreen-notification-icon" class="notification-anchor-icon" role="button" + aria-label="&urlbar.webRTCShareScreenNotificationAnchor.label;"/> + <image id="webRTC-sharingScreen-notification-icon" class="notification-anchor-icon" role="button" + aria-label="&urlbar.webRTCSharingScreenNotificationAnchor.label;"/> + <image id="pointerLock-notification-icon" class="notification-anchor-icon" role="button" + aria-label="&urlbar.pointerLockNotificationAnchor.label;"/> + <image id="servicesInstall-notification-icon" class="notification-anchor-icon" role="button" + aria-label="&urlbar.servicesNotificationAnchor.label;"/> + <image id="translate-notification-icon" class="notification-anchor-icon" role="button" + aria-label="&urlbar.translateNotificationAnchor.label;"/> + <image id="translated-notification-icon" class="notification-anchor-icon" role="button" + aria-label="&urlbar.translatedNotificationAnchor.label;"/> + <image id="eme-notification-icon" class="notification-anchor-icon" role="button" + aria-label="&urlbar.emeNotificationAnchor.label;"/> + </box> + <!-- Use onclick instead of normal popup= syntax since the popup + code fires onmousedown, and hence eats our favicon drag events. + We only add the identity-box button to the tab order when the location bar + has focus, otherwise pressing F6 focuses it instead of the location bar --> + <box id="identity-box" role="button" + align="center" + aria-label="&urlbar.viewSiteInfo.label;" + onclick="gIdentityHandler.handleIdentityButtonEvent(event);" + onkeypress="gIdentityHandler.handleIdentityButtonEvent(event);" + ondragstart="gIdentityHandler.onDragStart(event);"> + <image id="identity-icon" + consumeanchor="identity-box" + onclick="PageProxyClickHandler(event);"/> + <image id="tracking-protection-icon"/> + <image id="connection-icon"/> + <hbox id="identity-icon-labels"> + <label id="identity-icon-label" class="plain" flex="1"/> + <label id="identity-icon-country-label" class="plain"/> + </hbox> + </box> + <box id="urlbar-display-box" align="center"> + <label class="urlbar-display urlbar-display-switchtab" value="&urlbar.switchToTab.label;"/> + </box> + <hbox id="urlbar-icons"> + <image id="page-report-button" + class="urlbar-icon" + hidden="true" + tooltiptext="&pageReportIcon.tooltip;" + onclick="gPopupBlockerObserver.onReportButtonClick(event);"/> + <image id="reader-mode-button" + class="urlbar-icon" + hidden="true" + onclick="ReaderParent.buttonClick(event);"/> + </hbox> + <hbox id="userContext-icons"> + <label id="userContext-label"/> + <image id="userContext-indicator"/> + </hbox> + <toolbarbutton id="urlbar-go-button" + class="chromeclass-toolbar-additional" + onclick="gURLBar.handleCommand(event);" + tooltiptext="&goEndCap.tooltip;"/> + <toolbarbutton id="urlbar-reload-button" + class="chromeclass-toolbar-additional" + command="Browser:ReloadOrDuplicate" + onclick="checkForMiddleClick(this, event);" + tooltiptext="&reloadButton.tooltip;"/> + <toolbarbutton id="urlbar-stop-button" + class="chromeclass-toolbar-additional" + command="Browser:Stop" + tooltiptext="&stopButton.tooltip;"/> + </textbox> + </hbox> + </toolbaritem> + + <toolbaritem id="search-container" title="&searchItem.title;" + align="center" class="chromeclass-toolbar-additional panel-wide-item" + cui-areatype="toolbar" + flex="100" persist="width" removable="true"> + <searchbar id="searchbar" flex="1"/> + </toolbaritem> + + <toolbarbutton id="bookmarks-menu-button" + class="toolbarbutton-1 chromeclass-toolbar-additional" + removable="true" + type="menu-button" + label="&bookmarksMenuButton.label;" + tooltip="dynamic-shortcut-tooltip" + anchor="dropmarker" + ondragenter="PlacesMenuDNDHandler.onDragEnter(event);" + ondragover="PlacesMenuDNDHandler.onDragOver(event);" + ondragleave="PlacesMenuDNDHandler.onDragLeave(event);" + ondrop="PlacesMenuDNDHandler.onDrop(event);" + cui-areatype="toolbar" + oncommand="BookmarkingUI.onCommand(event);"> + <observes element="bookmarkThisPageBroadcaster" attribute="starred"/> + <observes element="bookmarkThisPageBroadcaster" attribute="buttontooltiptext"/> + <menupopup id="BMB_bookmarksPopup" + class="cui-widget-panel cui-widget-panelview cui-widget-panelWithFooter PanelUI-subView" + placespopup="true" + context="placesContext" + openInTabs="children" + oncommand="BookmarksEventHandler.onCommand(event, this.parentNode._placesView);" + onclick="BookmarksEventHandler.onClick(event, this.parentNode._placesView);" + onpopupshowing="BookmarkingUI.onPopupShowing(event); + BookmarkingUI.updatePocketItemVisibility('BMB_'); + BookmarkingUI.attachPlacesView(event, this);" + tooltip="bhTooltip" popupsinherittooltip="true"> + <menuitem id="BMB_viewBookmarksSidebar" + class="subviewbutton" + label="&viewBookmarksSidebar2.label;" + type="checkbox" + oncommand="SidebarUI.toggle('viewBookmarksSidebar');"> + <observes element="viewBookmarksSidebar" attribute="checked"/> + </menuitem> + <!-- NB: temporary solution for bug 985024, this should go away soon. --> + <menuitem id="BMB_bookmarksShowAllTop" + class="menuitem-iconic subviewbutton" + label="&showAllBookmarks2.label;" + command="Browser:ShowAllBookmarks" + key="manBookmarkKb"/> + <menuseparator/> + <menuitem id="BMB_pocket" + class="menuitem-iconic bookmark-item subviewbutton" + label="&pocketMenuitem.label;" + oncommand="openUILink(Pocket.listURL, event);"/> + <menuseparator id="BMB_pocketSeparator"/> + <menuitem id="BMB_subscribeToPageMenuitem" +#ifndef XP_MACOSX + class="menuitem-iconic subviewbutton" +#else + class="subviewbutton" +#endif + label="&subscribeToPageMenuitem.label;" + oncommand="return FeedHandler.subscribeToFeed(null, event);" + onclick="checkForMiddleClick(this, event);" + observes="singleFeedMenuitemState"/> + <menu id="BMB_subscribeToPageMenupopup" +#ifndef XP_MACOSX + class="menu-iconic subviewbutton" +#else + class="subviewbutton" +#endif + label="&subscribeToPageMenupopup.label;" + observes="multipleFeedsMenuState"> + <menupopup id="BMB_subscribeToPageSubmenuMenupopup" + onpopupshowing="return FeedHandler.buildFeedList(event.target);" + oncommand="return FeedHandler.subscribeToFeed(null, event);" + onclick="checkForMiddleClick(this, event);"/> + </menu> + <menuseparator/> + <menu id="BMB_bookmarksToolbar" + class="menu-iconic bookmark-item subviewbutton" + label="&personalbarCmd.label;" + container="true"> + <menupopup id="BMB_bookmarksToolbarPopup" + placespopup="true" + context="placesContext" + onpopupshowing="if (!this.parentNode._placesView) + new PlacesMenu(event, 'place:folder=TOOLBAR', + PlacesUIUtils.getViewForNode(this.parentNode.parentNode).options);"> + <menuitem id="BMB_viewBookmarksToolbar" + placesanonid="view-toolbar" + toolbarId="PersonalToolbar" + type="checkbox" + oncommand="onViewToolbarCommand(event)" + label="&viewBookmarksToolbar.label;"/> + <menuseparator/> + <!-- Bookmarks toolbar items --> + </menupopup> + </menu> + <menu id="BMB_unsortedBookmarks" + class="menu-iconic bookmark-item subviewbutton" + label="&bookmarksMenuButton.unsorted.label;" + container="true"> + <menupopup id="BMB_unsortedBookmarksPopup" + placespopup="true" + context="placesContext" + onpopupshowing="if (!this.parentNode._placesView) + new PlacesMenu(event, 'place:folder=UNFILED_BOOKMARKS', + PlacesUIUtils.getViewForNode(this.parentNode.parentNode).options);"/> + </menu> + <menuseparator/> + <!-- Bookmarks menu items will go here --> + <menuitem id="BMB_bookmarksShowAll" + class="subviewbutton panel-subview-footer" + label="&showAllBookmarks2.label;" + command="Browser:ShowAllBookmarks" + key="manBookmarkKb"/> + </menupopup> + </toolbarbutton> + + <!-- This is a placeholder for the Downloads Indicator. It is visible + during the customization of the toolbar, in the palette, and before + the Downloads Indicator overlay is loaded. --> + <toolbarbutton id="downloads-button" class="toolbarbutton-1 chromeclass-toolbar-additional" + key="key_openDownloads" + oncommand="DownloadsIndicatorView.onCommand(event);" + ondrop="DownloadsIndicatorView.onDrop(event);" + ondragover="DownloadsIndicatorView.onDragOver(event);" + ondragenter="DownloadsIndicatorView.onDragOver(event);" + label="&downloads.label;" + removable="true" + cui-areatype="toolbar" + tooltip="dynamic-shortcut-tooltip"/> + + <toolbarbutton id="home-button" class="toolbarbutton-1 chromeclass-toolbar-additional" + removable="true" + label="&homeButton.label;" + ondragover="homeButtonObserver.onDragOver(event)" + ondragenter="homeButtonObserver.onDragOver(event)" + ondrop="homeButtonObserver.onDrop(event)" + ondragexit="homeButtonObserver.onDragExit(event)" + key="goHome" + onclick="BrowserGoHome(event);" + cui-areatype="toolbar" + aboutHomeOverrideTooltip="&abouthome.pageTitle;"/> + </hbox> + + <toolbarbutton id="nav-bar-overflow-button" + class="toolbarbutton-1 chromeclass-toolbar-additional overflow-button" + skipintoolbarset="true" + tooltiptext="&navbarOverflow.label;"/> + + <toolbaritem id="PanelUI-button" + class="chromeclass-toolbar-additional" + removable="false"> + <toolbarbutton id="PanelUI-menu-button" + class="toolbarbutton-1 badged-button" + consumeanchor="PanelUI-button" + label="&brandShortName;" + tooltiptext="&appmenu.tooltip;"/> + </toolbaritem> + + <hbox id="window-controls" hidden="true" pack="end" skipintoolbarset="true" + ordinal="1000"> + <toolbarbutton id="minimize-button" + tooltiptext="&fullScreenMinimize.tooltip;" + oncommand="window.minimize();"/> + + <toolbarbutton id="restore-button" +#ifdef XP_MACOSX +# Prior to 10.7 there wasn't a native fullscreen button so we use #restore-button +# to exit fullscreen and want it to behave like other toolbar buttons. + class="toolbarbutton-1" +#endif + tooltiptext="&fullScreenRestore.tooltip;" + oncommand="BrowserFullScreen();"/> + + <toolbarbutton id="close-button" + tooltiptext="&fullScreenClose.tooltip;" + oncommand="BrowserTryToCloseWindow();"/> + </hbox> + </toolbar> + + <toolbarset id="customToolbars" context="toolbar-context-menu"/> + + <toolbar id="PersonalToolbar" + mode="icons" iconsize="small" + class="chromeclass-directories" + context="toolbar-context-menu" + defaultset="personal-bookmarks" + toolbarname="&personalbarCmd.label;" accesskey="&personalbarCmd.accesskey;" + collapsed="true" + customizable="true"> + <toolbaritem id="personal-bookmarks" + title="&bookmarksToolbarItem.label;" + cui-areatype="toolbar" + removable="true"> + <toolbarbutton id="bookmarks-toolbar-placeholder" + class="toolbarbutton-1" + mousethrough="never" + label="&bookmarksToolbarItem.label;" + oncommand="PlacesToolbarHelper.onPlaceholderCommand();"/> + <hbox flex="1" + id="PlacesToolbar" + context="placesContext" + onclick="BookmarksEventHandler.onClick(event, this._placesView);" + oncommand="BookmarksEventHandler.onCommand(event, this._placesView);" + tooltip="bhTooltip" + popupsinherittooltip="true"> + <hbox flex="1"> + <hbox id="PlacesToolbarDropIndicatorHolder" align="center" collapsed="true"> + <image id="PlacesToolbarDropIndicator" + mousethrough="always" + collapsed="true"/> + </hbox> + <scrollbox orient="horizontal" + id="PlacesToolbarItems" + flex="1"/> + <toolbarbutton type="menu" + id="PlacesChevron" + class="chevron" + mousethrough="never" + collapsed="true" + tooltiptext="&bookmarksToolbarChevron.tooltip;" + onpopupshowing="document.getElementById('PlacesToolbar') + ._placesView._onChevronPopupShowing(event);"> + <menupopup id="PlacesChevronPopup" + placespopup="true" + tooltip="bhTooltip" popupsinherittooltip="true" + context="placesContext"/> + </toolbarbutton> + </hbox> + </hbox> + </toolbaritem> + </toolbar> + + <!-- This is a shim which will go away ASAP. See bug 749804 for details --> + <toolbar id="addon-bar" toolbar-delegate="nav-bar" mode="icons" iconsize="small" + customizable="true"> + <hbox id="addonbar-closebutton"/> + <statusbar id="status-bar"/> + </toolbar> + + <toolbarpalette id="BrowserToolbarPalette"> + +# Update primaryToolbarButtons in browser/themes/shared/browser.inc when adding +# or removing default items with the toolbarbutton-1 class. + + <toolbarbutton id="print-button" class="toolbarbutton-1 chromeclass-toolbar-additional" +#ifdef XP_MACOSX + command="cmd_print" + tooltip="dynamic-shortcut-tooltip" +#else + command="cmd_printPreview" + tooltiptext="&printButton.tooltip;" +#endif + label="&printButton.label;"/> + + + <toolbarbutton id="new-window-button" class="toolbarbutton-1 chromeclass-toolbar-additional" + label="&newNavigatorCmd.label;" + command="key_newNavigator" + tooltip="dynamic-shortcut-tooltip" + ondrop="newWindowButtonObserver.onDrop(event)" + ondragover="newWindowButtonObserver.onDragOver(event)" + ondragenter="newWindowButtonObserver.onDragOver(event)" + ondragexit="newWindowButtonObserver.onDragExit(event)"/> + + <toolbarbutton id="fullscreen-button" class="toolbarbutton-1 chromeclass-toolbar-additional" + observes="View:FullScreen" + type="checkbox" + label="&fullScreenCmd.label;" + tooltip="dynamic-shortcut-tooltip"/> + </toolbarpalette> + </toolbox> + + <hbox id="fullscr-toggler" hidden="true"/> + + <deck id="content-deck" flex="1"> + <hbox flex="1" id="browser"> + <vbox id="browser-border-start" hidden="true" layer="true"/> + <vbox id="sidebar-box" hidden="true" class="chromeclass-extrachrome"> + <sidebarheader id="sidebar-header" align="center"> + <label id="sidebar-title" persist="value" flex="1" crop="end" control="sidebar"/> + <image id="sidebar-throbber"/> + <toolbarbutton class="close-icon tabbable" tooltiptext="&sidebarCloseButton.tooltip;" oncommand="SidebarUI.hide();"/> + </sidebarheader> + <browser id="sidebar" flex="1" autoscroll="false" disablehistory="true" + style="min-width: 14em; width: 18em; max-width: 36em;" tooltip="aHTMLTooltip"/> + </vbox> + + <splitter id="sidebar-splitter" class="chromeclass-extrachrome sidebar-splitter" hidden="true"/> + <vbox id="appcontent" flex="1"> + <notificationbox id="high-priority-global-notificationbox" notificationside="top"/> + <tabbrowser id="content" + flex="1" contenttooltip="aHTMLTooltip" + tabcontainer="tabbrowser-tabs" + contentcontextmenu="contentAreaContextMenu" + autocompletepopup="PopupAutoComplete" + selectmenulist="ContentSelectDropdown"/> + <chatbar id="pinnedchats" layer="true" mousethrough="always" hidden="true"/> + </vbox> + <splitter id="social-sidebar-splitter" + class="chromeclass-extrachrome sidebar-splitter" + observes="socialSidebarBroadcaster"/> + <vbox id="social-sidebar-box" + class="chromeclass-extrachrome" + observes="socialSidebarBroadcaster" + persist="width"> + + <sidebarheader id="social-sidebar-header" class="sidebar-header" align="center"> + <image id="social-sidebar-favico"/> + <label id="social-sidebar-title" class="sidebar-title" persist="value" flex="1" crop="end" control="sidebar"/> + <toolbarbutton id="social-sidebar-button" + class="toolbarbutton-1" + type="menu"> + <menupopup id="social-statusarea-popup" position="after_end"> + <menuitem class="social-toggle-sidebar-menuitem" + type="checkbox" + autocheck="false" + command="Social:ToggleSidebar" + label="&social.toggleSidebar.label;" + accesskey="&social.toggleSidebar.accesskey;"/> + <menuitem class="social-toggle-notifications-menuitem" + type="checkbox" + autocheck="false" + command="Social:ToggleNotifications" + label="&social.toggleNotifications.label;" + accesskey="&social.toggleNotifications.accesskey;"/> + <menuseparator/> + <menuseparator class="social-provider-menu" hidden="true"/> + <menuitem class="social-addons-menuitem" command="Social:Addons" + label="&social.addons.label;"/> + <menuitem label="&social.learnMore.label;" + accesskey="&social.learnMore.accesskey;" + oncommand="SocialUI.showLearnMore();"/> + </menupopup> + </toolbarbutton> + </sidebarheader> + + <browser id="social-sidebar-browser" + type="content" + context="contentAreaContextMenu" + message="true" + messagemanagergroup="social" + disableglobalhistory="true" + tooltip="aHTMLTooltip" + popupnotificationanchor="social-sidebar-favico" + flex="1" + style="min-width: 14em; width: 18em; max-width: 36em;"/> + </vbox> + <vbox id="browser-border-end" hidden="true" layer="true"/> + </hbox> +#include ../../components/customizableui/content/customizeMode.inc.xul + </deck> + + <html:div id="fullscreen-warning" hidden="true"> + <html:div id="fullscreen-domain-text"> + &fullscreenWarning.beforeDomain.label; + <html:span id="fullscreen-domain"/> + &fullscreenWarning.afterDomain.label; + </html:div> + <html:div id="fullscreen-generic-text"> + &fullscreenWarning.generic.label; + </html:div> + <html:button id="fullscreen-exit-button" + onclick="FullScreen.exitDomFullScreen();"> +#ifdef XP_MACOSX + &exitDOMFullscreenMac.button; +#else + &exitDOMFullscreen.button; +#endif + </html:button> + </html:div> + + <vbox id="browser-bottombox" layer="true"> + <notificationbox id="global-notificationbox" notificationside="bottom"/> + <toolbar id="developer-toolbar" + hidden="true"> +#ifdef XP_MACOSX + <toolbarbutton id="developer-toolbar-closebutton" + class="devtools-closebutton" + oncommand="DeveloperToolbar.hide();" + tooltiptext="&devToolbarCloseButton.tooltiptext;"/> +#endif + <stack class="gclitoolbar-stack-node" flex="1"> + <textbox class="gclitoolbar-input-node" rows="1"/> + <hbox class="gclitoolbar-complete-node"/> + </stack> + <toolbarbutton id="developer-toolbar-toolbox-button" + class="developer-toolbar-button" + observes="devtoolsMenuBroadcaster_DevToolbox" + tooltiptext="&devToolbarToolsButton.tooltip;"/> +#ifndef XP_MACOSX + <toolbarbutton id="developer-toolbar-closebutton" + class="devtools-closebutton" + oncommand="DeveloperToolbar.hide();" + tooltiptext="&devToolbarCloseButton.tooltiptext;"/> +#endif + </toolbar> + </vbox> + + <svg:svg height="0"> +#include tab-shape.inc.svg + <svg:clipPath id="urlbar-back-button-clip-path"> +#ifndef XP_MACOSX + <svg:path d="M -9,-4 l 0,1 a 15 15 0 0,1 0,30 l 0,1 l 10000,0 l 0,-32 l -10000,0 z" /> +#else + <svg:path d="M -11,-5 a 16 16 0 0 1 0,34 l 10000,0 l 0,-34 l -10000,0 z"/> +#endif + </svg:clipPath> +#ifdef XP_WIN + <svg:clipPath id="urlbar-back-button-clip-path-win10"> + <svg:path d="M -6,-2 l 0,1 a 15 15 0 0,1 0,30 l 0,1 l 10000,0 l 0,-32 l -10000,0 z" /> + </svg:clipPath> +#endif + </svg:svg> + +</vbox> +# <iframe id="tab-view"> is dynamically appended as the 2nd child of #tab-view-deck. +# Introducing the iframe dynamically, as needed, was found to be better than +# starting with an empty iframe here in browser.xul from a Ts standpoint. +</deck> + +</window> diff --git a/browser/base/jar.mn b/browser/base/jar.mn --- a/browser/base/jar.mn +++ b/browser/base/jar.mn @@ -71,16 +71,18 @@ browser.jar: content/browser/aboutTabCrashed.css (content/aboutTabCrashed.css) content/browser/aboutTabCrashed.js (content/aboutTabCrashed.js) content/browser/aboutTabCrashed.xhtml (content/aboutTabCrashed.xhtml) * content/browser/aboutTabGroupsMigration.xhtml (content/aboutTabGroupsMigration.xhtml) content/browser/aboutTabGroupsMigration.js (content/aboutTabGroupsMigration.js) * content/browser/browser.css (content/browser.css) content/browser/browser.js (content/browser.js) * content/browser/browser.xul (content/browser.xul) +* content/browser/browser-kde.xul (content/browser-kde.xul) +% override chrome://browser/content/browser.xul chrome://browser/content/browser-kde.xul desktop=kde content/browser/browser-addons.js (content/browser-addons.js) content/browser/browser-ctrlTab.js (content/browser-ctrlTab.js) content/browser/browser-customization.js (content/browser-customization.js) content/browser/browser-data-submission-info-bar.js (content/browser-data-submission-info-bar.js) content/browser/browser-devedition.js (content/browser-devedition.js) content/browser/browser-eme.js (content/browser-eme.js) content/browser/browser-feeds.js (content/browser-feeds.js) content/browser/browser-fullScreen.js (content/browser-fullScreen.js) diff --git a/browser/components/build/nsModule.cpp b/browser/components/build/nsModule.cpp --- a/browser/components/build/nsModule.cpp +++ b/browser/components/build/nsModule.cpp @@ -8,17 +8,17 @@ #include "nsBrowserCompsCID.h" #include "DirectoryProvider.h" #if defined(XP_WIN) #include "nsWindowsShellService.h" #elif defined(XP_MACOSX) #include "nsMacShellService.h" #elif defined(MOZ_WIDGET_GTK) -#include "nsGNOMEShellService.h" +#include "nsUnixShellService.h" #endif #if defined(XP_WIN) #include "nsIEHistoryEnumerator.h" #endif #include "rdf.h" #include "nsFeedSniffer.h" @@ -31,18 +31,16 @@ using namespace mozilla::browser; ///////////////////////////////////////////////////////////////////////////// NS_GENERIC_FACTORY_CONSTRUCTOR(DirectoryProvider) #if defined(XP_WIN) NS_GENERIC_FACTORY_CONSTRUCTOR(nsWindowsShellService) #elif defined(XP_MACOSX) NS_GENERIC_FACTORY_CONSTRUCTOR(nsMacShellService) -#elif defined(MOZ_WIDGET_GTK) -NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGNOMEShellService, Init) #endif #if defined(XP_WIN) NS_GENERIC_FACTORY_CONSTRUCTOR(nsIEHistoryEnumerator) #endif NS_GENERIC_FACTORY_CONSTRUCTOR(nsFeedSniffer) @@ -60,17 +58,17 @@ NS_DEFINE_NAMED_CID(NS_WINIEHISTORYENUME NS_DEFINE_NAMED_CID(NS_SHELLSERVICE_CID); #endif static const mozilla::Module::CIDEntry kBrowserCIDs[] = { { &kNS_BROWSERDIRECTORYPROVIDER_CID, false, nullptr, DirectoryProviderConstructor }, #if defined(XP_WIN) { &kNS_SHELLSERVICE_CID, false, nullptr, nsWindowsShellServiceConstructor }, #elif defined(MOZ_WIDGET_GTK) - { &kNS_SHELLSERVICE_CID, false, nullptr, nsGNOMEShellServiceConstructor }, + { &kNS_SHELLSERVICE_CID, false, nullptr, nsUnixShellServiceConstructor }, #endif { &kNS_FEEDSNIFFER_CID, false, nullptr, nsFeedSnifferConstructor }, { &kNS_BROWSER_ABOUT_REDIRECTOR_CID, false, nullptr, AboutRedirector::Create }, #if defined(XP_WIN) { &kNS_WINIEHISTORYENUMERATOR_CID, false, nullptr, nsIEHistoryEnumeratorConstructor }, #elif defined(XP_MACOSX) { &kNS_SHELLSERVICE_CID, false, nullptr, nsMacShellServiceConstructor }, #endif diff --git a/browser/components/preferences/in-content/main.js b/browser/components/preferences/in-content/main.js --- a/browser/components/preferences/in-content/main.js +++ b/browser/components/preferences/in-content/main.js @@ -18,16 +18,22 @@ var gMainPane = { init: function () { function setEventListener(aId, aEventType, aCallback) { document.getElementById(aId) .addEventListener(aEventType, aCallback.bind(gMainPane)); } + var env = Components.classes["@mozilla.org/process/environment;1"] + .getService(Components.interfaces.nsIEnvironment); + var kde_session = 0; + if (env.get('KDE_FULL_SESSION') == "true") + kde_session = 1; + #ifdef HAVE_SHELL_SERVICE this.updateSetDefaultBrowser(); #ifdef XP_WIN // In Windows 8 we launch the control panel since it's the only // way to get all file type association prefs. So we don't know // when the user will select the default. We refresh here periodically // in case the default changes. On other Windows OS's defaults can also // be set while the prefs are open. @@ -720,16 +726,27 @@ var gMainPane = { */ setDefaultBrowser: function() { let shellSvc = getShellService(); if (!shellSvc) return; try { shellSvc.setDefaultBrowser(true, false); + if (kde_session == 1) { + var shellObj = Components.classes["@mozilla.org/file/local;1"] + .createInstance(Components.interfaces.nsILocalFile); + shellObj.initWithPath("/usr/bin/kwriteconfig"); + var process = Components.classes["@mozilla.org/process/util;1"] + .createInstance(Components.interfaces.nsIProcess); + process.init(shellObj); + var args = ["--file", "kdeglobals", "--group", "General", "--key", + "BrowserApplication", "firefox"]; + process.run(false, args, args.length); + } } catch (ex) { Cu.reportError(ex); return; } let selectedIndex = shellSvc.isDefaultBrowser(false, true) ? 1 : 0; document.getElementById("setDefaultPane").selectedIndex = selectedIndex; } diff --git a/browser/components/shell/moz.build b/browser/components/shell/moz.build --- a/browser/components/shell/moz.build +++ b/browser/components/shell/moz.build @@ -30,16 +30,18 @@ if CONFIG['OS_ARCH'] == 'WINNT': ] elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa': SOURCES += [ 'nsMacShellService.cpp', ] elif CONFIG['MOZ_WIDGET_GTK']: SOURCES += [ 'nsGNOMEShellService.cpp', + 'nsKDEShellService.cpp', + 'nsUnixShellService.cpp', ] if SOURCES: FINAL_LIBRARY = 'browsercomps' EXTRA_COMPONENTS += [ 'nsSetDefaultBrowser.js', 'nsSetDefaultBrowser.manifest', diff --git a/browser/components/shell/nsKDEShellService.cpp b/browser/components/shell/nsKDEShellService.cpp new file mode 100644 --- /dev/null +++ b/browser/components/shell/nsKDEShellService.cpp @@ -0,0 +1,251 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "mozilla/ArrayUtils.h" + +#include "nsCOMPtr.h" +#include "nsKDEShellService.h" +#include "nsShellService.h" +#include "nsKDEUtils.h" +#include "nsIPrefService.h" +#include "nsIProcess.h" +#include "nsIFile.h" +#include "nsServiceManagerUtils.h" +#include "nsComponentManagerUtils.h" +#include "nsIMutableArray.h" +#include "nsISupportsPrimitives.h" +#include "nsArrayUtils.h" + +using namespace mozilla; + +nsresult +nsKDEShellService::Init() +{ + if( !nsKDEUtils::kdeSupport()) + return NS_ERROR_NOT_AVAILABLE; + return NS_OK; +} + +NS_IMPL_ISUPPORTS(nsKDEShellService, nsIShellService) + +NS_IMETHODIMP +nsKDEShellService::IsDefaultBrowser(bool aStartupCheck, + bool aForAllTypes, + bool* aIsDefaultBrowser) +{ + *aIsDefaultBrowser = false; + if (aStartupCheck) + mCheckedThisSession = true; + + nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID ); + if (!command) + return NS_ERROR_FAILURE; + + nsCOMPtr<nsISupportsCString> str = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); + if (!str) + return NS_ERROR_FAILURE; + + str->SetData( NS_LITERAL_CSTRING( "ISDEFAULTBROWSER" )); + command->AppendElement( str, false ); + + if( nsKDEUtils::command( command )) + *aIsDefaultBrowser = true; + return NS_OK; +} + +NS_IMETHODIMP +nsKDEShellService::SetDefaultBrowser(bool aClaimAllTypes, + bool aForAllUsers) +{ + nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID ); + if (!command) + return NS_ERROR_FAILURE; + + nsCOMPtr<nsISupportsCString> cmdstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); + nsCOMPtr<nsISupportsCString> paramstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); + if (!cmdstr || !paramstr) + return NS_ERROR_FAILURE; + + cmdstr->SetData( NS_LITERAL_CSTRING( "SETDEFAULTBROWSER" )); + command->AppendElement( cmdstr, false ); + + paramstr->SetData( aClaimAllTypes ? NS_LITERAL_CSTRING( "ALLTYPES" ) : NS_LITERAL_CSTRING( "NORMAL" )); + command->AppendElement( paramstr, false ); + + return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +nsKDEShellService::GetShouldCheckDefaultBrowser(bool* aResult) +{ + // If we've already checked, the browser has been started and this is a + // new window open, and we don't want to check again. + if (mCheckedThisSession) { + *aResult = false; + return NS_OK; + } + + nsresult rv; +#ifndef RELEASE_BUILD + bool skipDefaultBrowserCheck; + rv = GetShouldSkipCheckDefaultBrowser(&skipDefaultBrowserCheck); + if (NS_FAILED(rv)) { + return rv; + } + if (skipDefaultBrowserCheck) { + *aResult = false; + return rv; + } +#endif + + nsCOMPtr<nsIPrefBranch> prefs; + nsCOMPtr<nsIPrefService> pserve(do_GetService(NS_PREFSERVICE_CONTRACTID)); + if (pserve) + pserve->GetBranch("", getter_AddRefs(prefs)); + + if (prefs) + prefs->GetBoolPref(PREF_CHECKDEFAULTBROWSER, aResult); + + return NS_OK; +} + +NS_IMETHODIMP +nsKDEShellService::SetShouldCheckDefaultBrowser(bool aShouldCheck) +{ + nsCOMPtr<nsIPrefBranch> prefs; + nsCOMPtr<nsIPrefService> pserve(do_GetService(NS_PREFSERVICE_CONTRACTID)); + if (pserve) + pserve->GetBranch("", getter_AddRefs(prefs)); + + if (prefs) + prefs->SetBoolPref(PREF_CHECKDEFAULTBROWSER, aShouldCheck); + + return NS_OK; +} + +NS_IMETHODIMP +nsKDEShellService::GetCanSetDesktopBackground(bool* aResult) +{ + *aResult = true; + return NS_OK; +} + +NS_IMETHODIMP +nsKDEShellService::SetDesktopBackground(nsIDOMElement* aElement, + PRInt32 aPosition) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +nsKDEShellService::GetDesktopBackgroundColor(PRUint32 *aColor) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +nsKDEShellService::SetDesktopBackgroundColor(PRUint32 aColor) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +nsKDEShellService::OpenApplication(PRInt32 aApplication) +{ + nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID ); + if (!command) + return NS_ERROR_FAILURE; + + nsCOMPtr<nsISupportsCString> str = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); + if (!str) + return NS_ERROR_FAILURE; + + if( aApplication == APPLICATION_MAIL ) + str->SetData( NS_LITERAL_CSTRING( "OPENMAIL" )); + else if( aApplication == APPLICATION_NEWS ) + str->SetData( NS_LITERAL_CSTRING( "OPENNEWS" )); + else + return NS_ERROR_NOT_IMPLEMENTED; + + command->AppendElement( str, false ); + return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +nsKDEShellService::OpenApplicationWithURI(nsIFile* aApplication, const nsACString& aURI) +{ + nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID ); + if (!command) + return NS_ERROR_FAILURE; + + nsCOMPtr<nsISupportsCString> cmdstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); + nsCOMPtr<nsISupportsCString> appstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); + nsCOMPtr<nsISupportsCString> uristr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); + if (!cmdstr || !appstr || !uristr) + return NS_ERROR_FAILURE; + + cmdstr->SetData( NS_LITERAL_CSTRING( "RUN" )); + command->AppendElement( cmdstr, false ); + nsAutoCString app; + nsresult rv = aApplication->GetNativePath( app ); + NS_ENSURE_SUCCESS( rv, rv ); + appstr->SetData( app ); + command->AppendElement( appstr, false ); + uristr->SetData( aURI ); + command->AppendElement( uristr, false ); + return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +nsKDEShellService::GetDefaultFeedReader(nsIFile** _retval) +{ + *_retval = nullptr; + + nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID ); + if( !command ) + return NS_ERROR_FAILURE; + + nsCOMPtr<nsISupportsCString> str = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); + if( !str ) + return NS_ERROR_FAILURE; + + str->SetData( NS_LITERAL_CSTRING( "GETDEFAULTFEEDREADER" )); + command->AppendElement( str, false ); + + nsCOMPtr<nsIArray> output; + if( !nsKDEUtils::command( command, getter_AddRefs( output ) ) ) + return NS_ERROR_FAILURE; + + PRUint32 length; + output->GetLength( &length ); + if( length != 1 ) + return NS_ERROR_FAILURE; + + nsCOMPtr<nsISupportsCString> resstr = do_QueryElementAt( output, 0 ); + if( !resstr ) + return NS_ERROR_FAILURE; + + nsAutoCString path; + resstr->GetData( path ); + if (path.IsEmpty()) + return NS_ERROR_FAILURE; + + nsresult rv; + nsCOMPtr<nsIFile> defaultReader = + do_CreateInstance("@mozilla.org/file/local;1", &rv); + NS_ENSURE_SUCCESS(rv, rv); + + rv = defaultReader->InitWithNativePath(path); + NS_ENSURE_SUCCESS(rv, rv); + + bool exists; + rv = defaultReader->Exists(&exists); + NS_ENSURE_SUCCESS(rv, rv); + if (!exists) + return NS_ERROR_FAILURE; + + NS_ADDREF(*_retval = defaultReader); + return NS_OK; +} diff --git a/browser/components/shell/nsKDEShellService.h b/browser/components/shell/nsKDEShellService.h new file mode 100644 --- /dev/null +++ b/browser/components/shell/nsKDEShellService.h @@ -0,0 +1,29 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef nskdeshellservice_h____ +#define nskdeshellservice_h____ + +#include "nsIShellService.h" +#include "nsStringAPI.h" +#include "mozilla/Attributes.h" + +class nsKDEShellService final : public nsIShellService +{ +public: + nsKDEShellService() : mCheckedThisSession(false) { } + + NS_DECL_ISUPPORTS + NS_DECL_NSISHELLSERVICE + + nsresult Init(); + +private: + ~nsKDEShellService() {} + + bool mCheckedThisSession; +}; + +#endif // nskdeshellservice_h____ diff --git a/browser/components/shell/nsUnixShellService.cpp b/browser/components/shell/nsUnixShellService.cpp new file mode 100644 --- /dev/null +++ b/browser/components/shell/nsUnixShellService.cpp @@ -0,0 +1,22 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +#include "nsUnixShellService.h" +#include "nsGNOMEShellService.h" +#include "nsKDEShellService.h" +#include "nsKDEUtils.h" +#include "mozilla/ModuleUtils.h" + +NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGNOMEShellService, Init) +NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsKDEShellService, Init) + +NS_METHOD +nsUnixShellServiceConstructor(nsISupports *aOuter, REFNSIID aIID, void **aResult) +{ + if( nsKDEUtils::kdeSupport()) + return nsKDEShellServiceConstructor( aOuter, aIID, aResult ); + return nsGNOMEShellServiceConstructor( aOuter, aIID, aResult ); +} diff --git a/browser/components/shell/nsUnixShellService.h b/browser/components/shell/nsUnixShellService.h new file mode 100644 --- /dev/null +++ b/browser/components/shell/nsUnixShellService.h @@ -0,0 +1,15 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +#ifndef nsunixshellservice_h____ +#define nsunixshellservice_h____ + +#include "nsIShellService.h" + +NS_METHOD +nsUnixShellServiceConstructor(nsISupports *aOuter, REFNSIID aIID, void **aResult); + +#endif // nsunixshellservice_h____ diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in --- a/browser/installer/package-manifest.in +++ b/browser/installer/package-manifest.in @@ -705,16 +705,17 @@ @RESPATH@/defaults/autoconfig/prefcalls.js @RESPATH@/browser/defaults/profile/prefs.js @RESPATH@/browser/defaults/permissions ; Warning: changing the path to channel-prefs.js can cause bugs (Bug 756325) ; Technically this is an app pref file, but we are keeping it in the original ; gre location for now. @RESPATH@/defaults/pref/channel-prefs.js +@BINPATH@/defaults/pref/kde.js ; Services (gre) prefs #ifdef MOZ_SERVICES_NOTIFICATIONS @RESPATH@/defaults/pref/services-notifications.js #endif @RESPATH@/defaults/pref/services-sync.js ; [Layout Engine Resources]
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor