Mageia Bugzilla – Attachment 10717 Details for
Bug 24258
Firefox 60.5
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
New Account
|
Forgot Password
[patch]
rediffed firefox-kde.patch
firefox-kde.patch (text/plain), 77.84 KB, created by
Giuseppe Ghibò
on 2019-02-02 18:15:27 CET
(
hide
)
Description:
rediffed firefox-kde.patch
Filename:
MIME Type:
Creator:
Giuseppe Ghibò
Created:
2019-02-02 18:15:27 CET
Size:
77.84 KB
patch
obsolete
>diff -up firefox-60.5.0/browser/base/content/browser-kde.xul.firefox-kde firefox-60.5.0/browser/base/content/browser-kde.xul >--- firefox-60.5.0/browser/base/content/browser-kde.xul.firefox-kde 2019-01-31 20:58:02.090288335 +0100 >+++ firefox-60.5.0/browser/base/content/browser-kde.xul 2019-01-31 20:58:02.090288335 +0100 >@@ -0,0 +1,1280 @@ >+#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/downloads/downloads.css"?> >+<?xml-stylesheet href="chrome://browser/content/places/places.css" type="text/css"?> >+<?xml-stylesheet href="chrome://browser/content/usercontext/usercontext.css" type="text/css"?> >+<?xml-stylesheet href="chrome://browser/skin/controlcenter/panel.css" type="text/css"?> >+<?xml-stylesheet href="chrome://browser/skin/customizableui/panelUI.css" type="text/css"?> >+<?xml-stylesheet href="chrome://browser/skin/downloads/downloads.css"?> >+<?xml-stylesheet href="chrome://browser/skin/" type="text/css"?> >+<?xml-stylesheet href="chrome://browser/content/tabbrowser.css" type="text/css"?> >+ >+<?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:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" >+ 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;" >+ 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"> >+ Services.scriptloader.loadSubScript("chrome://global/content/contentAreaUtils.js", this); >+ Services.scriptloader.loadSubScript("chrome://browser/content/tabbrowser.js", this); >+</script> >+ >+# 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_duplicateTab" label="&duplicateTab.label;" >+ accesskey="&duplicateTab.accesskey;" >+ oncommand="duplicateTabIn(TabContextMenu.contextTab, 'tab');"/> >+ <menuitem id="context_openTabInWindow" label="&moveToNewWindow.label;" >+ accesskey="&moveToNewWindow.accesskey;" >+ tbattr="tabbrowser-multiple" >+ oncommand="gBrowser.replaceTabWithWindow(TabContextMenu.contextTab);"/> >+ <menuseparator id="context_sendTabToDevice_separator" class="sync-ui-item"/> >+ <menu id="context_sendTabToDevice" label="&sendTabToDevice.label;" >+ class="sync-ui-item" >+ accesskey="&sendTabToDevice.accesskey;"> >+ <menupopup id="context_sendTabToDevicePopupMenu" >+ onpopupshowing="gSync.populateSendTabToDevicesMenu(event.target, TabContextMenu.contextTab.linkedBrowser.currentURI.spec, TabContextMenu.contextTab.linkedBrowser.contentTitle);"/> >+ </menu> >+ <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-richlistbox" >+ id="PopupAutoComplete" >+ role="group" >+ noautofocus="true" >+ hidden="true" >+ overflowpadding="4" >+ norolluponanchor="true" >+ nomaxresults="true" /> >+ >+ <!-- for search with one-off buttons --> >+ <panel type="autocomplete-richlistbox" >+ id="PopupSearchAutoComplete" >+ role="group" >+ noautofocus="true" >+ hidden="true" /> >+ >+ <!-- for url bar autocomplete --> >+ <panel type="autocomplete-richlistbox" >+ id="PopupAutoCompleteRichResult" >+ role="group" >+ noautofocus="true" >+ hidden="true" >+ flip="none" >+ level="parent" >+ overflowpadding="15" /> >+ >+ <!-- for date/time picker. consumeoutsideclicks is set to never, so that >+ clicks on the anchored input box are never consumed. --> >+ <panel id="DateTimePickerPanel" >+ type="arrow" >+ hidden="true" >+ orient="vertical" >+ noautofocus="true" >+ norolluponanchor="true" >+ consumeoutsideclicks="never" >+ level="parent" >+ tabspecific="true"> >+ </panel> >+ >+ <!-- for select dropdowns. The menupopup is what shows the list of options, >+ and the popuponly menulist makes things like the menuactive attributes >+ work correctly on the menupopup. ContentSelectDropdown expects the >+ popuponly menulist to be its immediate parent. --> >+ <menulist popuponly="true" id="ContentSelectDropdown" hidden="true"> >+ <menupopup rolluponmousewheel="true" >+ activateontab="true" position="after_start" >+ level="parent" >+#ifdef XP_WIN >+ consumeoutsideclicks="false" ignorekeys="shortcuts" >+#endif >+ /> >+ </menulist> >+ >+ <!-- for invalid form error message --> >+ <panel id="invalid-form-popup" type="arrow" orient="vertical" noautofocus="true" hidden="true" level="parent"> >+ <description/> >+ </panel> >+ >+ <panel id="editBookmarkPanel" >+ type="arrow" >+ orient="vertical" >+ ignorekeys="true" >+ hidden="true" >+ tabspecific="true" >+ 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"/> >+ </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="editBookmarkPanelRemoveButton" >+ class="editBookmarkPanelBottomButton" >+ oncommand="StarUI.removeBookmarkButtonCommand();" >+ accesskey="&editBookmark.removeBookmark.accessKey;"/> >+#else >+ <button id="editBookmarkPanelRemoveButton" >+ class="editBookmarkPanelBottomButton" >+ oncommand="StarUI.removeBookmarkButtonCommand();" >+ accesskey="&editBookmark.removeBookmark.accessKey;"/> >+ <button id="editBookmarkPanelDoneButton" >+ class="editBookmarkPanelBottomButton" >+ label="&editBookmark.done.label;" >+ default="true" >+ oncommand="StarUI.panel.hidePopup();"/> >+#endif >+ </hbox> >+ </panel> >+ >+ <!-- UI tour experience --> >+ <panel id="UITourTooltip" >+ type="arrow" >+ hidden="true" >+ noautofocus="true" >+ noautohide="true" >+ align="start" >+ orient="vertical" >+ role="alert"> >+ <vbox> >+ <hbox id="UITourTooltipBody"> >+ <image id="UITourTooltipIcon"/> >+ <vbox flex="1"> >+ <hbox id="UITourTooltipTitleContainer"> >+ <label id="UITourTooltipTitle" flex="1"/> >+ <toolbarbutton id="UITourTooltipClose" class="close-icon" >+ tooltiptext="&uiTour.infoPanel.close;"/> >+ </hbox> >+ <description id="UITourTooltipDescription" flex="1"/> >+ </vbox> >+ </hbox> >+ <hbox id="UITourTooltipButtons" flex="1" align="center"/> >+ </vbox> >+ </panel> >+ <!-- type="default" forces frames to be created so that the panel's size can be determined --> >+ <panel id="UITourHighlightContainer" >+ type="default" >+ hidden="true" >+ noautofocus="true" >+ noautohide="true" >+ flip="none" >+ consumeoutsideclicks="false" >+ mousethrough="always"> >+ <box id="UITourHighlight"></box> >+ </panel> >+ >+ <panel id="sidebarMenu-popup" >+ class="cui-widget-panel" >+ role="group" >+ type="arrow" >+ hidden="true" >+ flip="slide" >+ orient="vertical" >+ position="bottomcenter topleft"> >+ <toolbarbutton id="sidebar-switcher-bookmarks" >+ class="subviewbutton subviewbutton-iconic" >+ key="viewBookmarksSidebarKb" >+ observes="viewBookmarksSidebar" >+ oncommand="SidebarUI.show('viewBookmarksSidebar');"> >+ <observes element="viewBookmarksSidebar" attribute="checked"/> >+ </toolbarbutton> >+ <toolbarbutton id="sidebar-switcher-history" >+ label="&historyButton.label;" >+ class="subviewbutton subviewbutton-iconic" >+ key="key_gotoHistory" >+ observes="viewHistorySidebar" >+ oncommand="SidebarUI.show('viewHistorySidebar');"> >+ <observes element="viewHistorySidebar" attribute="checked"/> >+ </toolbarbutton> >+ <toolbarbutton id="sidebar-switcher-tabs" >+ label="&syncedTabs.sidebar.label;" >+ class="subviewbutton subviewbutton-iconic sync-ui-item" >+ observes="viewTabsSidebar" >+ oncommand="SidebarUI.show('viewTabsSidebar');"> >+ <observes element="viewTabsSidebar" attribute="checked"/> >+ </toolbarbutton> >+ <toolbarseparator/> >+ <!-- Extension toolbarbuttons go here. --> >+ <toolbarseparator id="sidebar-extensions-separator"/> >+ <toolbarbutton id="sidebar-reverse-position" >+ class="subviewbutton" >+ oncommand="SidebarUI.reversePosition()"/> >+ <toolbarseparator/> >+ <toolbarbutton label="&sidebarMenuClose.label;" >+ class="subviewbutton" >+ oncommand="SidebarUI.hide()"/> >+ </panel> >+ >+ <menupopup id="toolbar-context-menu" >+ onpopupshowing="onViewToolbarsPopupShowing(event, document.getElementById('viewToolbarsMenuSeparator'));"> >+ <menuitem oncommand="gCustomizeMode.addToPanel(document.popupNode)" >+ accesskey="&customizeMenu.pinToOverflowMenu.accesskey;" >+ label="&customizeMenu.pinToOverflowMenu.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="gCustomizeMode.enter()" >+ observes="cmd_CustomizeToolbars" >+ class="viewCustomizeToolbar" >+ label="&viewCustomizeToolbar.label;" >+ accesskey="&viewCustomizeToolbar.accesskey;"/> >+ </menupopup> >+ >+ <menupopup id="blockedPopupOptions" >+ onpopupshowing="gPopupBlockerObserver.fillPopupList(event);" >+ onpopuphiding="gPopupBlockerObserver.onPopupHiding(event);"> >+ <menuitem 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" 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> >+ >+ <panel id="pageActionPanel" >+ class="cui-widget-panel" >+ role="group" >+ type="arrow" >+ hidden="true" >+ flip="slide" >+ photon="true" >+ position="bottomcenter topright" >+ tabspecific="true" >+ noautofocus="true" >+ copyURL-title="&pageAction.copyLink.label;" >+ emailLink-title="&emailPageCmd.label;" >+ sendToDevice-title="&pageAction.sendTabToDevice.label;" >+ sendToDevice-notReadyTitle="&sendToDevice.syncNotReady.label;"> >+ <panelmultiview id="pageActionPanelMultiView" >+ mainViewId="pageActionPanelMainView" >+ viewCacheId="appMenu-viewCache"> >+ <panelview id="pageActionPanelMainView" >+ context="pageActionContextMenu" >+ class="PanelUI-subView"> >+ <vbox class="panel-subview-body"/> >+ </panelview> >+ </panelmultiview> >+ </panel> >+ <panel id="pageActionFeedback" >+ role="alert" >+ type="arrow" >+ hidden="true" >+ flip="slide" >+ position="bottomcenter topright" >+ tabspecific="true" >+ noautofocus="true" >+ copyURLFeedback="©URLFeedback.label;" >+ sendToDeviceFeedback="&sendToDeviceFeedback.label;" >+ sendToDeviceOfflineFeedback="&sendToDeviceOfflineFeedback.label;"> >+ <hbox id="pageActionFeedbackAnimatableBox"> >+ <image id="pageActionFeedbackAnimatableImage"/> >+ </hbox> >+ <label id="pageActionFeedbackMessage"/> >+ </panel> >+ >+ <menupopup id="pageActionContextMenu" >+ onpopupshowing="BrowserPageActions.onContextMenuShowing(event, this);"> >+ <menuitem class="pageActionContextMenuItem builtInUnpinned" >+ label="&pageAction.addToUrlbar.label;" >+ oncommand="BrowserPageActions.togglePinningForContextAction();"/> >+ <menuitem class="pageActionContextMenuItem builtInPinned" >+ label="&pageAction.removeFromUrlbar.label;" >+ oncommand="BrowserPageActions.togglePinningForContextAction();"/> >+ <menuitem class="pageActionContextMenuItem extensionUnpinned" >+ label="&pageAction.allowInUrlbar.label;" >+ oncommand="BrowserPageActions.togglePinningForContextAction();"/> >+ <menuitem class="pageActionContextMenuItem extensionPinned" >+ label="&pageAction.disallowInUrlbar.label;" >+ oncommand="BrowserPageActions.togglePinningForContextAction();"/> >+ <menuseparator class="pageActionContextMenuItem extensionPinned extensionUnpinned"/> >+ <menuitem class="pageActionContextMenuItem extensionPinned extensionUnpinned" >+ label="&pageAction.manageExtension.label;" >+ oncommand="BrowserPageActions.openAboutAddonsForContextAction();"/> >+ </menupopup> >+ >+ <!-- 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> >+ >+#include popup-notifications.inc >+ >+#include ../../components/customizableui/content/panelUI.inc.xul >+#include ../../components/controlcenter/content/panel.inc.xul >+#include ../../components/downloads/content/downloadsPanel.inc.xul >+ >+ <hbox id="downloads-animation-container" mousethrough="always"> >+ <vbox id="downloads-notification-anchor" hidden="true"> >+ <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);"/> >+ >+ <menupopup id="SyncedTabsSidebarContext"> >+ <menuitem label="&syncedTabs.context.open.label;" >+ accesskey="&syncedTabs.context.open.accesskey;" >+ id="syncedTabsOpenSelected" where="current"/> >+ <menuitem label="&syncedTabs.context.openInNewTab.label;" >+ accesskey="&syncedTabs.context.openInNewTab.accesskey;" >+ id="syncedTabsOpenSelectedInTab" where="tab"/> >+ <menuitem label="&syncedTabs.context.openInNewWindow.label;" >+ accesskey="&syncedTabs.context.openInNewWindow.accesskey;" >+ id="syncedTabsOpenSelectedInWindow" where="window"/> >+ <menuitem label="&syncedTabs.context.openInNewPrivateWindow.label;" >+ accesskey="&syncedTabs.context.openInNewPrivateWindow.accesskey;" >+ id="syncedTabsOpenSelectedInPrivateWindow" where="window" private="true"/> >+ <menuseparator/> >+ <menuitem label="&syncedTabs.context.bookmarkSingleTab.label;" >+ accesskey="&syncedTabs.context.bookmarkSingleTab.accesskey;" >+ id="syncedTabsBookmarkSelected"/> >+ <menuitem label="&syncedTabs.context.copy.label;" >+ accesskey="&syncedTabs.context.copy.accesskey;" >+ id="syncedTabsCopySelected"/> >+ <menuseparator/> >+ <menuitem label="&syncedTabs.context.openAllInTabs.label;" >+ accesskey="&syncedTabs.context.openAllInTabs.accesskey;" >+ id="syncedTabsOpenAllInTabs"/> >+ <menuitem label="&syncedTabs.context.managedevices.label;" >+ accesskey="&syncedTabs.context.managedevices.accesskey;" >+ id="syncedTabsManageDevices" >+ oncommand="gSync.openDevicesManagementPage('syncedtabs-sidebar');"/> >+ <menuitem label="&syncSyncNowItem.label;" >+ accesskey="&syncSyncNowItem.accesskey;" >+ id="syncedTabsRefresh"/> >+ </menupopup> >+ <menupopup id="SyncedTabsSidebarTabsFilterContext" >+ class="textbox-contextmenu"> >+ <menuitem label="&undoCmd.label;" >+ accesskey="&undoCmd.accesskey;" >+ cmd="cmd_undo"/> >+ <menuseparator/> >+ <menuitem label="&cutCmd.label;" >+ accesskey="&cutCmd.accesskey;" >+ cmd="cmd_cut"/> >+ <menuitem label="©Cmd.label;" >+ accesskey="©Cmd.accesskey;" >+ cmd="cmd_copy"/> >+ <menuitem label="&pasteCmd.label;" >+ accesskey="&pasteCmd.accesskey;" >+ cmd="cmd_paste"/> >+ <menuitem label="&deleteCmd.label;" >+ accesskey="&deleteCmd.accesskey;" >+ cmd="cmd_delete"/> >+ <menuseparator/> >+ <menuitem label="&selectAllCmd.label;" >+ accesskey="&selectAllCmd.accesskey;" >+ cmd="cmd_selectAll"/> >+ <menuseparator/> >+ <menuitem label="&syncSyncNowItem.label;" >+ accesskey="&syncSyncNowItem.accesskey;" >+ id="syncedTabsRefreshFilter"/> >+ </menupopup> >+ </popupset> >+ <box id="appMenu-viewCache" hidden="true"/> >+ >+#ifdef CAN_DRAW_IN_TITLEBAR >+<vbox id="titlebar"> >+ <hbox id="titlebar-content"> >+ <spacer id="titlebar-spacer" flex="1"/> >+ <hbox id="titlebar-buttonbox-container"> >+ <hbox id="titlebar-buttonbox" class="titlebar-color"> >+ <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"> >+ <button class="accessibility-indicator" tooltiptext="&accessibilityIndicator.tooltip;" aria-live="polite"/> >+ <hbox class="private-browsing-indicator"/> >+ <hbox id="titlebar-fullscreen-button"/> >+ </hbox> >+#endif >+ </hbox> >+</vbox> >+#endif >+ >+ <toolbox id="navigator-toolbox"> >+ <!-- Menu --> >+ <toolbar type="menubar" id="toolbar-menubar" >+ class="chromeclass-menubar titlebar-color" >+ customizable="true" >+ mode="icons" >+#ifdef MENUBAR_CAN_AUTOHIDE >+ toolbarname="&menubarCmd.label;" >+ accesskey="&menubarCmd.accesskey;" >+ autohide="true" >+#endif >+ context="toolbar-context-menu"> >+ <toolbaritem id="menubar-items" align="center"> >+# The entire main menubar is placed into browser-menubar.inc, so that it can be shared 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" >+ skipintoolbarset="true"/> >+#endif >+#endif >+ </toolbar> >+ >+ <toolbar id="TabsToolbar" >+ class="titlebar-color" >+ fullscreentoolbar="true" >+ customizable="true" >+ mode="icons" >+ aria-label="&tabsToolbar.label;" >+ context="toolbar-context-menu" >+ collapsed="true"> >+ >+#ifdef CAN_DRAW_IN_TITLEBAR >+ <hbox class="titlebar-placeholder" type="pre-tabs" >+ skipintoolbarset="true"/> >+#endif >+ >+ <tabs id="tabbrowser-tabs" >+ flex="1" >+ setfocus="false" >+ tooltip="tabbrowser-tab-tooltip" >+ stopwatchid="FX_TAB_CLICK_MS"> >+ <tab class="tabbrowser-tab" selected="true" visuallyselected="true" fadein="true"/> >+ </tabs> >+ >+ <toolbarbutton id="new-tab-button" >+ class="toolbarbutton-1 chromeclass-toolbar-additional" >+ label="&tabCmd.label;" >+ command="cmd_newNavigatorTab" >+ onclick="checkForMiddleClick(this, event);" >+ tooltip="dynamic-shortcut-tooltip" >+ ondrop="newTabButtonObserver.onDrop(event)" >+ ondragover="newTabButtonObserver.onDragOver(event)" >+ ondragenter="newTabButtonObserver.onDragOver(event)" >+ ondragexit="newTabButtonObserver.onDragExit(event)" >+ cui-areatype="toolbar" >+ removable="true"/> >+ >+ <toolbarbutton id="alltabs-button" >+ class="toolbarbutton-1 chromeclass-toolbar-additional tabs-alltabs-button" >+ type="menu" >+ label="&listAllTabs.label;" >+ tooltiptext="&listAllTabs.label;" >+ removable="false"> >+ <menupopup id="alltabs-popup" >+ position="after_end"> >+ <menuitem id="alltabs_undoCloseTab" >+ key="key_undoCloseTab" >+ label="&undoCloseTab.label;" >+ observes="History:UndoCloseTab"/> >+ <menuseparator id="alltabs-popup-separator-1"/> >+ <menu id="alltabs_containersTab" >+ label="&newUserContext.label;"> >+ <menupopup id="alltabs_containersMenuTab" /> >+ </menu> >+ <menuseparator id="alltabs-popup-separator-2"/> >+ </menupopup> >+ </toolbarbutton> >+ >+#ifdef CAN_DRAW_IN_TITLEBAR >+ <hbox class="titlebar-placeholder" type="post-tabs" >+ ordinal="1000" >+ skipintoolbarset="true"/> >+#endif >+ >+ <button class="accessibility-indicator" tooltiptext="&accessibilityIndicator.tooltip;" >+ ordinal="1000" >+ aria-live="polite" skipintoolbarset="true"/> >+ <hbox class="private-browsing-indicator" skipintoolbarset="true" >+ ordinal="1000"/> >+#ifdef CAN_DRAW_IN_TITLEBAR >+ <hbox class="titlebar-placeholder" type="caption-buttons" >+#ifndef XP_MACOSX >+ ordinal="1000" >+#endif >+ skipintoolbarset="true"/> >+ >+#ifdef XP_MACOSX >+ <hbox class="titlebar-placeholder" type="fullscreen-button" >+ skipintoolbarset="true"/> >+#endif >+#endif >+ </toolbar> >+ >+ <toolbar id="nav-bar" >+ aria-label="&navbarCmd.label;" >+ fullscreentoolbar="true" mode="icons" customizable="true" >+ customizationtarget="nav-bar-customization-target" >+ overflowable="true" >+ overflowbutton="nav-bar-overflow-button" >+ overflowtarget="widget-overflow-list" >+ overflowpanel="widget-overflow" >+ context="toolbar-context-menu"> >+ >+ <hbox id="nav-bar-customization-target" flex="1"> >+ <toolbarbutton id="back-button" class="toolbarbutton-1 chromeclass-toolbar-additional" >+ label="&backCmd.label;" >+ removable="false" overflows="false" >+ keepbroadcastattributeswhencustomizing="true" >+ command="Browser:BackOrBackDuplicate" >+ onclick="checkForMiddleClick(this, event);" >+ tooltip="back-button-tooltip" >+ context="backForwardMenu"/> >+ <toolbarbutton id="forward-button" class="toolbarbutton-1 chromeclass-toolbar-additional" >+ label="&forwardCmd.label;" >+ removable="false" overflows="false" >+ keepbroadcastattributeswhencustomizing="true" >+ command="Browser:ForwardOrForwardDuplicate" >+ onclick="checkForMiddleClick(this, event);" >+ tooltip="forward-button-tooltip" >+ context="backForwardMenu"/> >+ <toolbaritem id="stop-reload-button" class="chromeclass-toolbar-additional" >+ title="&reloadCmd.label;" >+ removable="true" overflows="false"> >+ <toolbarbutton id="reload-button" class="toolbarbutton-1" >+ label="&reloadCmd.label;" >+ command="Browser:ReloadOrDuplicate" >+ onclick="checkForMiddleClick(this, event);" >+ tooltip="dynamic-shortcut-tooltip"> >+ <box class="toolbarbutton-animatable-box"> >+ <image class="toolbarbutton-animatable-image"/> >+ </box> >+ </toolbarbutton> >+ <toolbarbutton id="stop-button" class="toolbarbutton-1" >+ label="&stopCmd.label;" >+ command="Browser:Stop" >+ tooltip="dynamic-shortcut-tooltip"> >+ <box class="toolbarbutton-animatable-box"> >+ <image class="toolbarbutton-animatable-image"/> >+ </box> >+ </toolbarbutton> >+ </toolbaritem> >+ <toolbarbutton id="home-button" class="toolbarbutton-1 chromeclass-toolbar-additional" >+ removable="true" >+ label="&homeButton.label;" >+ ondragover="homeButtonObserver.onDragOver(event)" >+ ondragenter="homeButtonObserver.onDragOver(event)" >+ ondrop="homeButtonObserver.onDrop(event)" >+ ondragexit="homeButtonObserver.onDragExit(event)" >+ key="goHome" >+ onclick="BrowserGoHome(event);" >+ cui-areatype="toolbar" >+ aboutHomeOverrideTooltip="&abouthome.pageTitle;"/> >+ <toolbarspring cui-areatype="toolbar" class="chromeclass-toolbar-additional"/> >+ <toolbaritem id="urlbar-container" flex="400" persist="width" >+ removable="false" >+ class="chromeclass-location" overflows="false"> >+ <textbox id="urlbar" flex="1" >+ placeholder="&urlbar.placeholder2;" >+ defaultPlaceholder="&urlbar.placeholder2;" >+ focused="true" >+ type="autocomplete" >+ autocompletesearch="unifiedcomplete" >+ autocompletesearchparam="enable-actions" >+ autocompletepopup="PopupAutoCompleteRichResult" >+ completeselectedindex="true" >+ shrinkdelay="250" >+ tabscrolling="true" >+ newlines="stripsurroundingwhitespace" >+ ontextentered="this.handleCommand(param);" >+ ontextreverted="return this.handleRevert();" >+ pageproxystate="invalid"> >+ <!-- Use onclick instead of normal popup= syntax since the popup >+ code fires onmousedown, and hence eats our favicon drag events. --> >+ <box id="identity-box" role="button" >+ align="center" >+ aria-label="&urlbar.viewSiteInfo.label;" >+ onclick="gIdentityHandler.handleIdentityButtonEvent(event);" >+ onkeypress="gIdentityHandler.handleIdentityButtonEvent(event);" >+ ondragstart="gIdentityHandler.onDragStart(event);"> >+ <image id="identity-icon" >+ consumeanchor="identity-box" >+ onclick="PageProxyClickHandler(event);"/> >+ <image id="sharing-icon" mousethrough="always"/> >+ <image id="tracking-protection-icon"/> >+ <box id="blocked-permissions-container" align="center"> >+ <image data-permission-id="geo" class="blocked-permission-icon geo-icon" role="button" >+ tooltiptext="&urlbar.geolocationBlocked.tooltip;"/> >+ <image data-permission-id="desktop-notification" class="blocked-permission-icon desktop-notification-icon" role="button" >+ tooltiptext="&urlbar.webNotificationsBlocked.tooltip;"/> >+ <image data-permission-id="camera" class="blocked-permission-icon camera-icon" role="button" >+ tooltiptext="&urlbar.cameraBlocked.tooltip;"/> >+ <image data-permission-id="microphone" class="blocked-permission-icon microphone-icon" role="button" >+ tooltiptext="&urlbar.microphoneBlocked.tooltip;"/> >+ <image data-permission-id="screen" class="blocked-permission-icon screen-icon" role="button" >+ tooltiptext="&urlbar.screenBlocked.tooltip;"/> >+ <image data-permission-id="persistent-storage" class="blocked-permission-icon persistent-storage-icon" role="button" >+ tooltiptext="&urlbar.persistentStorageBlocked.tooltip;"/> >+ <image data-permission-id="popup" class="blocked-permission-icon popup-icon" role="button" >+ tooltiptext="&urlbar.popupBlocked.tooltip;"/> >+ <image data-permission-id="canvas" class="blocked-permission-icon canvas-icon" role="button" >+ tooltiptext="&urlbar.canvasBlocked.tooltip;"/> >+ <image data-permission-id="plugin:flash" class="blocked-permission-icon plugin-icon" role="button" >+ tooltiptext="&urlbar.flashPluginBlocked.tooltip;"/> >+ <image data-permission-id="midi" class="blocked-permission-icon midi-icon" role="button" >+ tooltiptext="&urlbar.midiBlocked.tooltip;"/> >+ </box> >+ <box id="notification-popup-box" >+ hidden="true" >+ onmouseover="document.getElementById('identity-box').classList.add('no-hover');" >+ onmouseout="document.getElementById('identity-box').classList.remove('no-hover');" >+ align="center"> >+ <image id="default-notification-icon" class="notification-anchor-icon" role="button" >+ tooltiptext="&urlbar.defaultNotificationAnchor.tooltip;"/> >+ <image id="geo-notification-icon" class="notification-anchor-icon geo-icon" role="button" >+ tooltiptext="&urlbar.geolocationNotificationAnchor.tooltip;"/> >+ <image id="addons-notification-icon" class="notification-anchor-icon install-icon" role="button" >+ tooltiptext="&urlbar.addonsNotificationAnchor.tooltip;"/> >+ <image id="canvas-notification-icon" class="notification-anchor-icon" role="button" >+ tooltiptext="&urlbar.canvasNotificationAnchor.tooltip;"/> >+ <image id="indexedDB-notification-icon" class="notification-anchor-icon indexedDB-icon" role="button" >+ tooltiptext="&urlbar.indexedDBNotificationAnchor.tooltip;"/> >+ <image id="password-notification-icon" class="notification-anchor-icon login-icon" role="button" >+ tooltiptext="&urlbar.passwordNotificationAnchor.tooltip;"/> >+ <stack id="plugins-notification-icon" class="notification-anchor-icon" role="button" align="center" >+ tooltiptext="&urlbar.pluginsNotificationAnchor.tooltip;"> >+ <image class="plugin-icon" /> >+ <image id="plugin-icon-badge" /> >+ </stack> >+ <image id="web-notifications-notification-icon" class="notification-anchor-icon desktop-notification-icon" role="button" >+ tooltiptext="&urlbar.webNotificationAnchor.tooltip;"/> >+ <image id="webRTC-shareDevices-notification-icon" class="notification-anchor-icon camera-icon" role="button" >+ tooltiptext="&urlbar.webRTCShareDevicesNotificationAnchor.tooltip;"/> >+ <image id="webRTC-shareMicrophone-notification-icon" class="notification-anchor-icon microphone-icon" role="button" >+ tooltiptext="&urlbar.webRTCShareMicrophoneNotificationAnchor.tooltip;"/> >+ <image id="webRTC-shareScreen-notification-icon" class="notification-anchor-icon screen-icon" role="button" >+ tooltiptext="&urlbar.webRTCShareScreenNotificationAnchor.tooltip;"/> >+ <image id="servicesInstall-notification-icon" class="notification-anchor-icon service-icon" role="button" >+ tooltiptext="&urlbar.servicesNotificationAnchor.tooltip;"/> >+ <image id="translate-notification-icon" class="notification-anchor-icon translation-icon" role="button" >+ tooltiptext="&urlbar.translateNotificationAnchor.tooltip;"/> >+ <image id="translated-notification-icon" class="notification-anchor-icon translation-icon in-use" role="button" >+ tooltiptext="&urlbar.translatedNotificationAnchor.tooltip;"/> >+ <image id="eme-notification-icon" class="notification-anchor-icon drm-icon" role="button" >+ tooltiptext="&urlbar.emeNotificationAnchor.tooltip;"/> >+ <image id="persistent-storage-notification-icon" class="notification-anchor-icon persistent-storage-icon" role="button" >+ tooltiptext="&urlbar.persistentStorageNotificationAnchor.tooltip;"/> >+ <image id="midi-notification-icon" class="notification-anchor-icon midi-icon" role="button" >+ tooltiptext="&urlbar.midiNotificationAnchor.tooltip;"/> >+ <image id="webauthn-notification-icon" class="notification-anchor-icon" role="button" >+ tooltiptext="&urlbar.defaultNotificationAnchor.tooltip;"/> >+ </box> >+ <image id="connection-icon"/> >+ <image id="extension-icon"/> >+ <image id="remote-control-icon" >+ tooltiptext="&urlbar.remoteControlNotificationAnchor.tooltip;"/> >+ <hbox id="identity-icon-labels"> >+ <label id="identity-icon-label" class="plain" flex="1"/> >+ <label id="identity-icon-country-label" class="plain"/> >+ </hbox> >+ </box> >+ <box id="urlbar-display-box" align="center"> >+ <label id="switchtab" class="urlbar-display urlbar-display-switchtab" value="&urlbar.switchToTab.label;"/> >+ <label id="extension" class="urlbar-display urlbar-display-extension" value="&urlbar.extension.label;"/> >+ </box> >+ <hbox id="page-action-buttons" context="pageActionContextMenu"> >+ <hbox id="userContext-icons" hidden="true"> >+ <label id="userContext-label"/> >+ <image id="userContext-indicator"/> >+ </hbox> >+ <image id="reader-mode-button" >+ class="urlbar-icon urlbar-page-action" >+ tooltip="dynamic-shortcut-tooltip" >+ role="button" >+ hidden="true" >+ onclick="ReaderParent.buttonClick(event);"/> >+ <toolbarbutton id="urlbar-zoom-button" >+ onclick="FullZoom.reset();" >+ tooltip="dynamic-shortcut-tooltip" >+ hidden="true"/> >+ <box id="pageActionSeparator" class="urlbar-page-action"/> >+ <image id="pageActionButton" >+ class="urlbar-icon urlbar-page-action" >+ role="button" >+ tooltiptext="&pageActionButton.tooltip;" >+ onmousedown="BrowserPageActions.mainButtonClicked(event);"/> >+ <hbox id="star-button-box" >+ hidden="true" >+ class="urlbar-icon-wrapper urlbar-page-action" >+ onclick="BrowserPageActions.doCommandForAction(PageActions.actionForID('bookmark'), event, this);"> >+ <image id="star-button" >+ class="urlbar-icon" >+ role="button" >+ observes="bookmarkThisPageBroadcaster"/> >+ <hbox id="star-button-animatable-box"> >+ <image id="star-button-animatable-image" >+ role="presentation" >+ observes="bookmarkThisPageBroadcaster"/> >+ </hbox> >+ </hbox> >+ </hbox> >+ </textbox> >+ </toolbaritem> >+ >+ <toolbarspring cui-areatype="toolbar" class="chromeclass-toolbar-additional"/> >+ >+ <!-- This is a placeholder for the Downloads Indicator. It is visible >+ during the customization of the toolbar, in the palette, and before >+ the Downloads Indicator overlay is loaded. --> >+ <toolbarbutton id="downloads-button" >+ class="toolbarbutton-1 chromeclass-toolbar-additional badged-button" >+ key="key_openDownloads" >+ onmousedown="DownloadsIndicatorView.onCommand(event);" >+ ondrop="DownloadsIndicatorView.onDrop(event);" >+ ondragover="DownloadsIndicatorView.onDragOver(event);" >+ ondragenter="DownloadsIndicatorView.onDragOver(event);" >+ label="&downloads.label;" >+ removable="true" >+ overflows="false" >+ cui-areatype="toolbar" >+ hidden="true" >+ tooltip="dynamic-shortcut-tooltip" >+ indicator="true"> >+ <!-- The panel's anchor area is smaller than the outer button, but must >+ always be visible and must not move or resize when the indicator >+ state changes, otherwise the panel could change its position or lose >+ its arrow unexpectedly. --> >+ <stack id="downloads-indicator-anchor" >+ consumeanchor="downloads-button"> >+ <box id="downloads-indicator-icon"/> >+ <stack id="downloads-indicator-progress-outer"> >+ <box id="downloads-indicator-progress-inner"/> >+ </stack> >+ </stack> >+ </toolbarbutton> >+ >+ <toolbarbutton id="library-button" class="toolbarbutton-1 chromeclass-toolbar-additional subviewbutton-nav" >+ removable="true" >+ onmousedown="PanelUI.showSubView('appMenu-libraryView', this, event);" >+ closemenu="none" >+ cui-areatype="toolbar" >+ tooltiptext="&libraryButton.tooltip;" >+ label="&places.library.title;"/> >+ >+ </hbox> >+ >+ <toolbarbutton id="nav-bar-overflow-button" >+ class="toolbarbutton-1 chromeclass-toolbar-additional overflow-button" >+ skipintoolbarset="true" >+ tooltiptext="&navbarOverflow.label;"> >+ <box class="toolbarbutton-animatable-box"> >+ <image class="toolbarbutton-animatable-image"/> >+ </box> >+ </toolbarbutton> >+ >+ <toolbaritem id="PanelUI-button" >+ removable="false"> >+ <toolbarbutton id="PanelUI-menu-button" >+ class="toolbarbutton-1 badged-button" >+ consumeanchor="PanelUI-button" >+ label="&brandShortName;" >+ tooltiptext="&appmenu.tooltip;"/> >+ </toolbaritem> >+ >+ <hbox id="window-controls" hidden="true" pack="end" skipintoolbarset="true" >+ ordinal="1000"> >+ <toolbarbutton id="minimize-button" >+ tooltiptext="&fullScreenMinimize.tooltip;" >+ oncommand="window.minimize();"/> >+ >+ <toolbarbutton id="restore-button" >+#ifdef XP_MACOSX >+# Prior to 10.7 there wasn't a native fullscreen button so we use #restore-button >+# to exit fullscreen and want it to behave like other toolbar buttons. >+ class="toolbarbutton-1" >+#endif >+ tooltiptext="&fullScreenRestore.tooltip;" >+ oncommand="BrowserFullScreen();"/> >+ >+ <toolbarbutton id="close-button" >+ tooltiptext="&fullScreenClose.tooltip;" >+ oncommand="BrowserTryToCloseWindow();"/> >+ </hbox> >+ </toolbar> >+ >+ <toolbar id="PersonalToolbar" >+ mode="icons" >+ class="chromeclass-directories" >+ context="toolbar-context-menu" >+ toolbarname="&personalbarCmd.label;" accesskey="&personalbarCmd.accesskey;" >+ collapsed="true" >+ customizable="true"> >+ <toolbaritem id="personal-bookmarks" >+ title="&bookmarksToolbarItem.label;" >+ cui-areatype="toolbar" >+ removable="true"> >+ <toolbarbutton id="bookmarks-toolbar-placeholder" >+ class="bookmark-item" >+ label="&bookmarksToolbarItem.label;"/> >+ <toolbarbutton id="bookmarks-toolbar-button" >+ class="toolbarbutton-1" >+ flex="1" >+ label="&bookmarksToolbarItem.label;" >+ oncommand="PlacesToolbarHelper.onPlaceholderCommand();"/> >+ <hbox flex="1" >+ id="PlacesToolbar" >+ context="placesContext" >+ onmouseup="BookmarksEventHandler.onMouseUp(event);" >+ onclick="BookmarksEventHandler.onClick(event, this._placesView);" >+ oncommand="BookmarksEventHandler.onCommand(event);" >+ tooltip="bhTooltip" >+ popupsinherittooltip="true"> >+ <hbox flex="1"> >+ <hbox id="PlacesToolbarDropIndicatorHolder" align="center" collapsed="true"> >+ <image id="PlacesToolbarDropIndicator" >+ mousethrough="always" >+ collapsed="true"/> >+ </hbox> >+ <scrollbox orient="horizontal" >+ id="PlacesToolbarItems" >+ flex="1"/> >+ <toolbarbutton type="menu" >+ id="PlacesChevron" >+ class="toolbarbutton-1" >+ mousethrough="never" >+ collapsed="true" >+ tooltiptext="&bookmarksToolbarChevron.tooltip;" >+ onpopupshowing="document.getElementById('PlacesToolbar') >+ ._placesView._onChevronPopupShowing(event);"> >+ <menupopup id="PlacesChevronPopup" >+ placespopup="true" >+ tooltip="bhTooltip" popupsinherittooltip="true" >+ context="placesContext"/> >+ </toolbarbutton> >+ </hbox> >+ </hbox> >+ </toolbaritem> >+ </toolbar> >+ >+ <toolbarpalette id="BrowserToolbarPalette"> >+ >+ <toolbarbutton id="print-button" class="toolbarbutton-1 chromeclass-toolbar-additional" >+#ifdef XP_MACOSX >+ command="cmd_print" >+ tooltip="dynamic-shortcut-tooltip" >+#else >+ command="cmd_printPreview" >+ tooltiptext="&printButton.tooltip;" >+#endif >+ label="&printButton.label;"/> >+ >+ >+ <toolbarbutton id="new-window-button" class="toolbarbutton-1 chromeclass-toolbar-additional" >+ label="&newNavigatorCmd.label;" >+ command="cmd_newNavigator" >+ tooltip="dynamic-shortcut-tooltip" >+ ondrop="newWindowButtonObserver.onDrop(event)" >+ ondragover="newWindowButtonObserver.onDragOver(event)" >+ ondragenter="newWindowButtonObserver.onDragOver(event)" >+ ondragexit="newWindowButtonObserver.onDragExit(event)"/> >+ >+ <toolbarbutton id="fullscreen-button" class="toolbarbutton-1 chromeclass-toolbar-additional" >+ observes="View:FullScreen" >+ type="checkbox" >+ label="&fullScreenCmd.label;" >+ tooltip="dynamic-shortcut-tooltip"/> >+ >+ <toolbarbutton id="bookmarks-menu-button" >+ class="toolbarbutton-1 chromeclass-toolbar-additional subviewbutton-nav" >+ type="menu" >+ label="&bookmarksMenuButton2.label;" >+ tooltip="dynamic-shortcut-tooltip" >+ anchor="dropmarker" >+ ondragenter="PlacesMenuDNDHandler.onDragEnter(event);" >+ ondragover="PlacesMenuDNDHandler.onDragOver(event);" >+ ondragleave="PlacesMenuDNDHandler.onDragLeave(event);" >+ ondrop="PlacesMenuDNDHandler.onDrop(event);" >+ oncommand="BookmarkingUI.onCommand(event);"> >+ <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" >+ onmouseup="BookmarksEventHandler.onMouseUp(event);" >+ oncommand="BookmarksEventHandler.onCommand(event);" >+ onclick="BookmarksEventHandler.onClick(event, this.parentNode._placesView);" >+ onpopupshowing="BookmarkingUI.onPopupShowing(event); >+ BookmarkingUI.attachPlacesView(event, this);" >+ tooltip="bhTooltip" popupsinherittooltip="true"> >+ <menuitem id="BMB_viewBookmarksSidebar" >+ class="menuitem-iconic subviewbutton" >+ label-show="&viewBookmarksSidebar2.label;" >+ label-hide="&hideBookmarksSidebar.label;" >+ oncommand="SidebarUI.toggle('viewBookmarksSidebar');"/> >+ <!-- NB: temporary solution for bug 985024, this should go away soon. --> >+ <menuitem id="BMB_bookmarksShowAllTop" >+ class="menuitem-iconic subviewbutton" >+ label="&showAllBookmarks2.label;" >+ command="Browser:ShowAllBookmarks" >+ key="manBookmarkKb"/> >+ <menuseparator/> >+ <menu id="BMB_bookmarksToolbar" >+ class="menu-iconic bookmark-item subviewbutton" >+ label="&personalbarCmd.label;" >+ container="true"> >+ <menupopup id="BMB_bookmarksToolbarPopup" >+ placespopup="true" >+ context="placesContext" >+ onpopupshowing="if (!this.parentNode._placesView) >+ new PlacesMenu(event, 'place:folder=TOOLBAR', >+ PlacesUIUtils.getViewForNode(this.parentNode.parentNode).options);"> >+ <menuitem id="BMB_viewBookmarksToolbar" >+ class="menuitem-iconic subviewbutton" >+ label-show="&viewBookmarksToolbar.label;" >+ label-hide="&hideBookmarksToolbar.label;" >+ oncommand="BookmarkingUI.toggleBookmarksToolbar();"/> >+ <menuseparator/> >+ <!-- Bookmarks toolbar items --> >+ </menupopup> >+ </menu> >+ <menu id="BMB_unsortedBookmarks" >+ class="menu-iconic bookmark-item subviewbutton" >+ label="&bookmarksMenuButton.other.label;" >+ container="true"> >+ <menupopup id="BMB_unsortedBookmarksPopup" >+ placespopup="true" >+ context="placesContext" >+ onpopupshowing="if (!this.parentNode._placesView) >+ new PlacesMenu(event, 'place:folder=UNFILED_BOOKMARKS', >+ PlacesUIUtils.getViewForNode(this.parentNode.parentNode).options);"/> >+ </menu> >+ <menu id="BMB_mobileBookmarks" >+ class="menu-iconic bookmark-item subviewbutton" >+ label="&bookmarksMenuButton.mobile.label;" >+ hidden="true" >+ container="true"> >+ <menupopup id="BMB_mobileBookmarksPopup" >+ placespopup="true" >+ context="placesContext" >+ onpopupshowing="if (!this.parentNode._placesView) >+ new PlacesMenu(event, 'place:folder=MOBILE_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> >+ >+ <toolbaritem id="search-container" >+ class="chromeclass-toolbar-additional" >+ title="&searchItem.title;" >+ align="center" >+ flex="100" >+ persist="width"> >+ <searchbar id="searchbar" flex="1"/> >+ </toolbaritem> >+ </toolbarpalette> >+ <box id="library-animatable-box" class="toolbarbutton-animatable-box"> >+ <image class="toolbarbutton-animatable-image"/> >+ </box> >+ </toolbox> >+ >+ <hbox id="fullscr-toggler" hidden="true"/> >+ >+ <deck id="content-deck" flex="1"> >+ <hbox flex="1" id="browser"> >+ <vbox id="browser-border-start" hidden="true" layer="true"/> >+ <vbox id="sidebar-box" hidden="true" class="chromeclass-extrachrome"> >+ <sidebarheader id="sidebar-header" align="center"> >+ <toolbarbutton id="sidebar-switcher-target" flex="1" class="tabbable"> >+ <image id="sidebar-icon" consumeanchor="sidebar-switcher-target"/> >+ <label id="sidebar-title" persist="value" crop="end" flex="1" control="sidebar"/> >+ <image id="sidebar-switcher-arrow"/> >+ </toolbarbutton> >+ <image id="sidebar-throbber"/> >+# To ensure the button label's intrinsic width doesn't expand the sidebar >+# if the label is long, the button needs flex=1. >+# To ensure the button doesn't expand unnecessarily for short labels, the >+# spacer should significantly out-flex the button. >+ <spacer flex="1000"/> >+ <toolbarbutton id="sidebar-close" class="close-icon tabbable" tooltiptext="&sidebarCloseButton.tooltip;" oncommand="SidebarUI.hide();"/> >+ </sidebarheader> >+ <browser id="sidebar" flex="1" autoscroll="false" disablehistory="true" disablefullscreen="true" >+ style="min-width: 14em; width: 18em; max-width: 36em;" tooltip="aHTMLTooltip"/> >+ </vbox> >+ >+ <splitter id="sidebar-splitter" class="chromeclass-extrachrome sidebar-splitter" hidden="true"/> >+ <vbox id="appcontent" flex="1"> >+ <notificationbox id="high-priority-global-notificationbox" notificationside="top"/> >+ <tabbox id="tabbrowser-tabbox" >+ flex="1" eventnode="document" tabcontainer="tabbrowser-tabs" >+ onselect="if (event.target.localName == 'tabpanels') gBrowser.updateCurrentBrowser();"> >+ <tabpanels flex="1" class="plain" selectedIndex="0" id="tabbrowser-tabpanels"> >+ <notificationbox flex="1" notificationside="top"> >+ <hbox flex="1" class="browserSidebarContainer"> >+ <vbox flex="1" class="browserContainer"> >+ <stack flex="1" class="browserStack"> >+ <browser id="tabbrowser-initialBrowser" type="content" >+ message="true" messagemanagergroup="browsers" >+ primary="true" blank="true" >+ tooltip="aHTMLTooltip" >+ contextmenu="contentAreaContextMenu" >+ autocompletepopup="PopupAutoComplete" >+ selectmenulist="ContentSelectDropdown" >+ datetimepicker="DateTimePickerPanel"/> >+ </stack> >+ </vbox> >+ </hbox> >+ </notificationbox> >+ </tabpanels> >+ </tabbox> >+ </vbox> >+ <vbox id="browser-border-end" hidden="true" layer="true"/> >+ </hbox> >+#include ../../components/customizableui/content/customizeMode.inc.xul >+ </deck> >+ >+ <html:div id="fullscreen-warning" class="pointerlockfswarning" hidden="true"> >+ <html:div class="pointerlockfswarning-domain-text"> >+ &fullscreenWarning.beforeDomain.label; >+ <html:span class="pointerlockfswarning-domain"/> >+ &fullscreenWarning.afterDomain.label; >+ </html:div> >+ <html:div class="pointerlockfswarning-generic-text"> >+ &fullscreenWarning.generic.label; >+ </html:div> >+ <html:button id="fullscreen-exit-button" >+ onclick="FullScreen.exitDomFullScreen();"> >+#ifdef XP_MACOSX >+ &exitDOMFullscreenMac.button; >+#else >+ &exitDOMFullscreen.button; >+#endif >+ </html:button> >+ </html:div> >+ >+ <html:div id="pointerlock-warning" class="pointerlockfswarning" hidden="true"> >+ <html:div class="pointerlockfswarning-domain-text"> >+ &pointerlockWarning.beforeDomain.label; >+ <html:span class="pointerlockfswarning-domain"/> >+ &pointerlockWarning.afterDomain.label; >+ </html:div> >+ <html:div class="pointerlockfswarning-generic-text"> >+ &pointerlockWarning.generic.label; >+ </html:div> >+ </html:div> >+ >+ <vbox id="browser-bottombox" layer="true"> >+ <notificationbox id="global-notificationbox" notificationside="bottom"/> >+ </vbox> >+ >+</window> >diff -up firefox-60.5.0/browser/base/jar.mn.firefox-kde firefox-60.5.0/browser/base/jar.mn >--- firefox-60.5.0/browser/base/jar.mn.firefox-kde 2019-01-24 18:30:39.000000000 +0100 >+++ firefox-60.5.0/browser/base/jar.mn 2019-01-31 20:58:02.090288335 +0100 >@@ -47,6 +47,8 @@ browser.jar: > * 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-captivePortal.js (content/browser-captivePortal.js) > content/browser/browser-ctrlTab.js (content/browser-ctrlTab.js) >diff -up firefox-60.5.0/browser/components/build/nsModule.cpp.firefox-kde firefox-60.5.0/browser/components/build/nsModule.cpp >--- firefox-60.5.0/browser/components/build/nsModule.cpp.firefox-kde 2019-01-24 18:30:40.000000000 +0100 >+++ firefox-60.5.0/browser/components/build/nsModule.cpp 2019-01-31 20:59:16.120386103 +0100 >@@ -13,7 +13,7 @@ > #elif defined(XP_MACOSX) > #include "nsMacShellService.h" > #elif defined(MOZ_WIDGET_GTK) >-#include "nsGNOMEShellService.h" >+#include "nsUnixShellService.h" > #endif > > #if defined(XP_WIN) >@@ -37,8 +37,6 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(Directory > 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) >@@ -70,7 +68,7 @@ static const mozilla::Module::CIDEntry k > #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 }, >diff -up firefox-60.5.0/browser/components/preferences/in-content/main.js.firefox-kde firefox-60.5.0/browser/components/preferences/in-content/main.js >--- firefox-60.5.0/browser/components/preferences/in-content/main.js.firefox-kde 2019-01-24 18:30:40.000000000 +0100 >+++ firefox-60.5.0/browser/components/preferences/in-content/main.js 2019-01-31 20:58:02.090288335 +0100 >@@ -338,6 +338,13 @@ var gMainPane = { > }, backoffTimes[this._backoffIndex]); > } > >+ var env = Components.classes["@mozilla.org/process/environment;1"] >+ .getService(Components.interfaces.nsIEnvironment); >+ var kde_session = 0; >+ if (env.get('KDE_FULL_SESSION') == "true") { >+ kde_session = 1; >+ } >+ > this.initBrowserContainers(); > this.buildContentProcessCountMenuList(); > >@@ -1065,6 +1072,17 @@ var gMainPane = { > 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; >diff -up firefox-60.5.0/browser/components/shell/moz.build.firefox-kde firefox-60.5.0/browser/components/shell/moz.build >--- firefox-60.5.0/browser/components/shell/moz.build.firefox-kde 2019-01-24 18:30:40.000000000 +0100 >+++ firefox-60.5.0/browser/components/shell/moz.build 2019-01-31 20:58:02.100288346 +0100 >@@ -44,6 +44,8 @@ elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'co > elif 'gtk' in CONFIG['MOZ_WIDGET_TOOLKIT']: > SOURCES += [ > 'nsGNOMEShellService.cpp', >+ 'nsKDEShellService.cpp', >+ 'nsUnixShellService.cpp', > ] > > if SOURCES: >diff -up firefox-60.5.0/browser/components/shell/nsKDEShellService.cpp.firefox-kde firefox-60.5.0/browser/components/shell/nsKDEShellService.cpp >--- firefox-60.5.0/browser/components/shell/nsKDEShellService.cpp.firefox-kde 2019-01-31 20:58:02.100288346 +0100 >+++ firefox-60.5.0/browser/components/shell/nsKDEShellService.cpp 2019-01-31 20:58:02.100288346 +0100 >@@ -0,0 +1,204 @@ >+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ >+/* This Source Code Form is subject to the terms of the Mozilla Public >+ * License, v. 2.0. If a copy of the MPL was not distributed with this >+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ >+ >+#include "mozilla/ArrayUtils.h" >+ >+#include "nsCOMPtr.h" >+#include "nsKDEShellService.h" >+#include "nsShellService.h" >+#include "nsKDEUtils.h" >+#include "nsIPrefService.h" >+#include "nsIProcess.h" >+#include "nsIFile.h" >+#include "nsServiceManagerUtils.h" >+#include "nsComponentManagerUtils.h" >+#include "nsIMutableArray.h" >+#include "nsISupportsPrimitives.h" >+#include "nsArrayUtils.h" >+ >+using namespace mozilla; >+ >+nsresult >+nsKDEShellService::Init() >+{ >+ if( !nsKDEUtils::kdeSupport()) >+ return NS_ERROR_NOT_AVAILABLE; >+ return NS_OK; >+} >+ >+NS_IMPL_ISUPPORTS(nsKDEShellService, nsIGNOMEShellService, nsIShellService) >+ >+NS_IMETHODIMP >+nsKDEShellService::IsDefaultBrowser(bool 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 ); >+ >+ if( nsKDEUtils::command( command )) >+ *aIsDefaultBrowser = true; >+ return NS_OK; >+} >+ >+NS_IMETHODIMP >+nsKDEShellService::SetDefaultBrowser(bool aClaimAllTypes, >+ bool aForAllUsers) >+{ >+ nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID ); >+ if (!command) >+ return NS_ERROR_FAILURE; >+ >+ nsCOMPtr<nsISupportsCString> cmdstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); >+ nsCOMPtr<nsISupportsCString> paramstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); >+ if (!cmdstr || !paramstr) >+ return NS_ERROR_FAILURE; >+ >+ cmdstr->SetData( NS_LITERAL_CSTRING( "SETDEFAULTBROWSER" )); >+ command->AppendElement( cmdstr ); >+ >+ paramstr->SetData( aClaimAllTypes ? NS_LITERAL_CSTRING( "ALLTYPES" ) : NS_LITERAL_CSTRING( "NORMAL" )); >+ command->AppendElement( paramstr ); >+ >+ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE; >+} >+ >+NS_IMETHODIMP >+nsKDEShellService::GetCanSetDesktopBackground(bool* aResult) >+{ >+ *aResult = true; >+ return NS_OK; >+} >+ >+NS_IMETHODIMP >+nsKDEShellService::SetDesktopBackground(nsIDOMElement* aElement, >+ int32_t aPosition, >+ const nsACString& aImageName) >+{ >+ return NS_ERROR_NOT_IMPLEMENTED; >+} >+ >+NS_IMETHODIMP >+nsKDEShellService::GetDesktopBackgroundColor(PRUint32 *aColor) >+{ >+ return NS_ERROR_NOT_IMPLEMENTED; >+} >+ >+NS_IMETHODIMP >+nsKDEShellService::SetDesktopBackgroundColor(PRUint32 aColor) >+{ >+ return NS_ERROR_NOT_IMPLEMENTED; >+} >+ >+NS_IMETHODIMP >+nsKDEShellService::OpenApplication(PRInt32 aApplication) >+{ >+ nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID ); >+ if (!command) >+ return NS_ERROR_FAILURE; >+ >+ nsCOMPtr<nsISupportsCString> str = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); >+ if (!str) >+ return NS_ERROR_FAILURE; >+ >+ if( aApplication == APPLICATION_MAIL ) >+ str->SetData( NS_LITERAL_CSTRING( "OPENMAIL" )); >+ else if( aApplication == APPLICATION_NEWS ) >+ str->SetData( NS_LITERAL_CSTRING( "OPENNEWS" )); >+ else >+ return NS_ERROR_NOT_IMPLEMENTED; >+ >+ command->AppendElement( str ); >+ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE; >+} >+ >+NS_IMETHODIMP >+nsKDEShellService::OpenApplicationWithURI(nsIFile* aApplication, const nsACString& aURI) >+{ >+ nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID ); >+ if (!command) >+ return NS_ERROR_FAILURE; >+ >+ nsCOMPtr<nsISupportsCString> cmdstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); >+ nsCOMPtr<nsISupportsCString> appstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); >+ nsCOMPtr<nsISupportsCString> uristr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); >+ if (!cmdstr || !appstr || !uristr) >+ return NS_ERROR_FAILURE; >+ >+ cmdstr->SetData( NS_LITERAL_CSTRING( "RUN" )); >+ command->AppendElement( cmdstr ); >+ nsAutoCString app; >+ nsresult rv = aApplication->GetNativePath( app ); >+ NS_ENSURE_SUCCESS( rv, rv ); >+ appstr->SetData( app ); >+ command->AppendElement( appstr ); >+ uristr->SetData( aURI ); >+ command->AppendElement( uristr ); >+ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE; >+} >+ >+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 ); >+ >+ 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 -up firefox-60.5.0/browser/components/shell/nsKDEShellService.h.firefox-kde firefox-60.5.0/browser/components/shell/nsKDEShellService.h >--- firefox-60.5.0/browser/components/shell/nsKDEShellService.h.firefox-kde 2019-01-31 20:58:02.100288346 +0100 >+++ firefox-60.5.0/browser/components/shell/nsKDEShellService.h 2019-01-31 20:58:02.100288346 +0100 >@@ -0,0 +1,30 @@ >+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ >+/* This Source Code Form is subject to the terms of the Mozilla Public >+ * License, v. 2.0. If a copy of the MPL was not distributed with this >+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ >+ >+#ifndef nskdeshellservice_h____ >+#define nskdeshellservice_h____ >+ >+#include "nsIGNOMEShellService.h" >+#include "nsString.h" >+#include "mozilla/Attributes.h" >+ >+class nsKDEShellService final : public nsIGNOMEShellService >+{ >+public: >+ nsKDEShellService() : mCheckedThisSession(false) { } >+ >+ NS_DECL_ISUPPORTS >+ NS_DECL_NSIGNOMESHELLSERVICE >+ NS_DECL_NSISHELLSERVICE >+ >+ nsresult Init(); >+ >+private: >+ ~nsKDEShellService() {} >+ >+ bool mCheckedThisSession; >+}; >+ >+#endif // nskdeshellservice_h____ >diff -up firefox-60.5.0/browser/components/shell/nsUnixShellService.cpp.firefox-kde firefox-60.5.0/browser/components/shell/nsUnixShellService.cpp >--- firefox-60.5.0/browser/components/shell/nsUnixShellService.cpp.firefox-kde 2019-01-31 20:58:02.100288346 +0100 >+++ firefox-60.5.0/browser/components/shell/nsUnixShellService.cpp 2019-01-31 20:58:02.100288346 +0100 >@@ -0,0 +1,22 @@ >+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ >+/* This Source Code Form is subject to the terms of the Mozilla Public >+ * License, v. 2.0. If a copy of the MPL was not distributed with this >+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ >+ >+ >+#include "nsUnixShellService.h" >+#include "nsGNOMEShellService.h" >+#include "nsKDEShellService.h" >+#include "nsKDEUtils.h" >+#include "mozilla/ModuleUtils.h" >+ >+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGNOMEShellService, Init) >+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsKDEShellService, Init) >+ >+NS_IMETHODIMP >+nsUnixShellServiceConstructor(nsISupports *aOuter, REFNSIID aIID, void **aResult) >+{ >+ if( nsKDEUtils::kdeSupport()) >+ return nsKDEShellServiceConstructor( aOuter, aIID, aResult ); >+ return nsGNOMEShellServiceConstructor( aOuter, aIID, aResult ); >+} >diff -up firefox-60.5.0/browser/components/shell/nsUnixShellService.h.firefox-kde firefox-60.5.0/browser/components/shell/nsUnixShellService.h >--- firefox-60.5.0/browser/components/shell/nsUnixShellService.h.firefox-kde 2019-01-31 20:58:02.100288346 +0100 >+++ firefox-60.5.0/browser/components/shell/nsUnixShellService.h 2019-01-31 20:58:02.100288346 +0100 >@@ -0,0 +1,15 @@ >+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ >+/* This Source Code Form is subject to the terms of the Mozilla Public >+ * License, v. 2.0. If a copy of the MPL was not distributed with this >+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ >+ >+ >+#ifndef nsunixshellservice_h____ >+#define nsunixshellservice_h____ >+ >+#include "nsIGNOMEShellService.h" >+ >+NS_IMETHODIMP >+nsUnixShellServiceConstructor(nsISupports *aOuter, REFNSIID aIID, void **aResult); >+ >+#endif // nsunixshellservice_h____ >diff -up firefox-60.5.0/browser/installer/package-manifest.in.firefox-kde firefox-60.5.0/browser/installer/package-manifest.in >--- firefox-60.5.0/browser/installer/package-manifest.in.firefox-kde 2019-01-24 18:30:40.000000000 +0100 >+++ firefox-60.5.0/browser/installer/package-manifest.in 2019-01-31 20:58:02.100288346 +0100 >@@ -651,6 +651,8 @@ > ; gre location for now. > @RESPATH@/defaults/pref/channel-prefs.js > >+@BINPATH@/defaults/pref/kde.js >+ > ; Remote control protocol prefs > ; defined in ../../testing/marionette/prefs/marionette.js > @RESPATH@/defaults/pref/marionette.js
diff -up firefox-60.5.0/browser/base/content/browser-kde.xul.firefox-kde firefox-60.5.0/browser/base/content/browser-kde.xul --- firefox-60.5.0/browser/base/content/browser-kde.xul.firefox-kde 2019-01-31 20:58:02.090288335 +0100 +++ firefox-60.5.0/browser/base/content/browser-kde.xul 2019-01-31 20:58:02.090288335 +0100 @@ -0,0 +1,1280 @@ +#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/downloads/downloads.css"?> +<?xml-stylesheet href="chrome://browser/content/places/places.css" type="text/css"?> +<?xml-stylesheet href="chrome://browser/content/usercontext/usercontext.css" type="text/css"?> +<?xml-stylesheet href="chrome://browser/skin/controlcenter/panel.css" type="text/css"?> +<?xml-stylesheet href="chrome://browser/skin/customizableui/panelUI.css" type="text/css"?> +<?xml-stylesheet href="chrome://browser/skin/downloads/downloads.css"?> +<?xml-stylesheet href="chrome://browser/skin/" type="text/css"?> +<?xml-stylesheet href="chrome://browser/content/tabbrowser.css" type="text/css"?> + +<?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:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + 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;" + 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"> + Services.scriptloader.loadSubScript("chrome://global/content/contentAreaUtils.js", this); + Services.scriptloader.loadSubScript("chrome://browser/content/tabbrowser.js", this); +</script> + +# 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_duplicateTab" label="&duplicateTab.label;" + accesskey="&duplicateTab.accesskey;" + oncommand="duplicateTabIn(TabContextMenu.contextTab, 'tab');"/> + <menuitem id="context_openTabInWindow" label="&moveToNewWindow.label;" + accesskey="&moveToNewWindow.accesskey;" + tbattr="tabbrowser-multiple" + oncommand="gBrowser.replaceTabWithWindow(TabContextMenu.contextTab);"/> + <menuseparator id="context_sendTabToDevice_separator" class="sync-ui-item"/> + <menu id="context_sendTabToDevice" label="&sendTabToDevice.label;" + class="sync-ui-item" + accesskey="&sendTabToDevice.accesskey;"> + <menupopup id="context_sendTabToDevicePopupMenu" + onpopupshowing="gSync.populateSendTabToDevicesMenu(event.target, TabContextMenu.contextTab.linkedBrowser.currentURI.spec, TabContextMenu.contextTab.linkedBrowser.contentTitle);"/> + </menu> + <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-richlistbox" + id="PopupAutoComplete" + role="group" + noautofocus="true" + hidden="true" + overflowpadding="4" + norolluponanchor="true" + nomaxresults="true" /> + + <!-- for search with one-off buttons --> + <panel type="autocomplete-richlistbox" + id="PopupSearchAutoComplete" + role="group" + noautofocus="true" + hidden="true" /> + + <!-- for url bar autocomplete --> + <panel type="autocomplete-richlistbox" + id="PopupAutoCompleteRichResult" + role="group" + noautofocus="true" + hidden="true" + flip="none" + level="parent" + overflowpadding="15" /> + + <!-- for date/time picker. consumeoutsideclicks is set to never, so that + clicks on the anchored input box are never consumed. --> + <panel id="DateTimePickerPanel" + type="arrow" + hidden="true" + orient="vertical" + noautofocus="true" + norolluponanchor="true" + consumeoutsideclicks="never" + level="parent" + tabspecific="true"> + </panel> + + <!-- for select dropdowns. The menupopup is what shows the list of options, + and the popuponly menulist makes things like the menuactive attributes + work correctly on the menupopup. ContentSelectDropdown expects the + popuponly menulist to be its immediate parent. --> + <menulist popuponly="true" id="ContentSelectDropdown" hidden="true"> + <menupopup rolluponmousewheel="true" + activateontab="true" position="after_start" + level="parent" +#ifdef XP_WIN + consumeoutsideclicks="false" ignorekeys="shortcuts" +#endif + /> + </menulist> + + <!-- for invalid form error message --> + <panel id="invalid-form-popup" type="arrow" orient="vertical" noautofocus="true" hidden="true" level="parent"> + <description/> + </panel> + + <panel id="editBookmarkPanel" + type="arrow" + orient="vertical" + ignorekeys="true" + hidden="true" + tabspecific="true" + 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"/> + </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="editBookmarkPanelRemoveButton" + class="editBookmarkPanelBottomButton" + oncommand="StarUI.removeBookmarkButtonCommand();" + accesskey="&editBookmark.removeBookmark.accessKey;"/> +#else + <button id="editBookmarkPanelRemoveButton" + class="editBookmarkPanelBottomButton" + oncommand="StarUI.removeBookmarkButtonCommand();" + accesskey="&editBookmark.removeBookmark.accessKey;"/> + <button id="editBookmarkPanelDoneButton" + class="editBookmarkPanelBottomButton" + label="&editBookmark.done.label;" + default="true" + oncommand="StarUI.panel.hidePopup();"/> +#endif + </hbox> + </panel> + + <!-- UI tour experience --> + <panel id="UITourTooltip" + type="arrow" + hidden="true" + noautofocus="true" + noautohide="true" + align="start" + orient="vertical" + role="alert"> + <vbox> + <hbox id="UITourTooltipBody"> + <image id="UITourTooltipIcon"/> + <vbox flex="1"> + <hbox id="UITourTooltipTitleContainer"> + <label id="UITourTooltipTitle" flex="1"/> + <toolbarbutton id="UITourTooltipClose" class="close-icon" + tooltiptext="&uiTour.infoPanel.close;"/> + </hbox> + <description id="UITourTooltipDescription" flex="1"/> + </vbox> + </hbox> + <hbox id="UITourTooltipButtons" flex="1" align="center"/> + </vbox> + </panel> + <!-- type="default" forces frames to be created so that the panel's size can be determined --> + <panel id="UITourHighlightContainer" + type="default" + hidden="true" + noautofocus="true" + noautohide="true" + flip="none" + consumeoutsideclicks="false" + mousethrough="always"> + <box id="UITourHighlight"></box> + </panel> + + <panel id="sidebarMenu-popup" + class="cui-widget-panel" + role="group" + type="arrow" + hidden="true" + flip="slide" + orient="vertical" + position="bottomcenter topleft"> + <toolbarbutton id="sidebar-switcher-bookmarks" + class="subviewbutton subviewbutton-iconic" + key="viewBookmarksSidebarKb" + observes="viewBookmarksSidebar" + oncommand="SidebarUI.show('viewBookmarksSidebar');"> + <observes element="viewBookmarksSidebar" attribute="checked"/> + </toolbarbutton> + <toolbarbutton id="sidebar-switcher-history" + label="&historyButton.label;" + class="subviewbutton subviewbutton-iconic" + key="key_gotoHistory" + observes="viewHistorySidebar" + oncommand="SidebarUI.show('viewHistorySidebar');"> + <observes element="viewHistorySidebar" attribute="checked"/> + </toolbarbutton> + <toolbarbutton id="sidebar-switcher-tabs" + label="&syncedTabs.sidebar.label;" + class="subviewbutton subviewbutton-iconic sync-ui-item" + observes="viewTabsSidebar" + oncommand="SidebarUI.show('viewTabsSidebar');"> + <observes element="viewTabsSidebar" attribute="checked"/> + </toolbarbutton> + <toolbarseparator/> + <!-- Extension toolbarbuttons go here. --> + <toolbarseparator id="sidebar-extensions-separator"/> + <toolbarbutton id="sidebar-reverse-position" + class="subviewbutton" + oncommand="SidebarUI.reversePosition()"/> + <toolbarseparator/> + <toolbarbutton label="&sidebarMenuClose.label;" + class="subviewbutton" + oncommand="SidebarUI.hide()"/> + </panel> + + <menupopup id="toolbar-context-menu" + onpopupshowing="onViewToolbarsPopupShowing(event, document.getElementById('viewToolbarsMenuSeparator'));"> + <menuitem oncommand="gCustomizeMode.addToPanel(document.popupNode)" + accesskey="&customizeMenu.pinToOverflowMenu.accesskey;" + label="&customizeMenu.pinToOverflowMenu.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="gCustomizeMode.enter()" + observes="cmd_CustomizeToolbars" + class="viewCustomizeToolbar" + label="&viewCustomizeToolbar.label;" + accesskey="&viewCustomizeToolbar.accesskey;"/> + </menupopup> + + <menupopup id="blockedPopupOptions" + onpopupshowing="gPopupBlockerObserver.fillPopupList(event);" + onpopuphiding="gPopupBlockerObserver.onPopupHiding(event);"> + <menuitem 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" 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> + + <panel id="pageActionPanel" + class="cui-widget-panel" + role="group" + type="arrow" + hidden="true" + flip="slide" + photon="true" + position="bottomcenter topright" + tabspecific="true" + noautofocus="true" + copyURL-title="&pageAction.copyLink.label;" + emailLink-title="&emailPageCmd.label;" + sendToDevice-title="&pageAction.sendTabToDevice.label;" + sendToDevice-notReadyTitle="&sendToDevice.syncNotReady.label;"> + <panelmultiview id="pageActionPanelMultiView" + mainViewId="pageActionPanelMainView" + viewCacheId="appMenu-viewCache"> + <panelview id="pageActionPanelMainView" + context="pageActionContextMenu" + class="PanelUI-subView"> + <vbox class="panel-subview-body"/> + </panelview> + </panelmultiview> + </panel> + <panel id="pageActionFeedback" + role="alert" + type="arrow" + hidden="true" + flip="slide" + position="bottomcenter topright" + tabspecific="true" + noautofocus="true" + copyURLFeedback="©URLFeedback.label;" + sendToDeviceFeedback="&sendToDeviceFeedback.label;" + sendToDeviceOfflineFeedback="&sendToDeviceOfflineFeedback.label;"> + <hbox id="pageActionFeedbackAnimatableBox"> + <image id="pageActionFeedbackAnimatableImage"/> + </hbox> + <label id="pageActionFeedbackMessage"/> + </panel> + + <menupopup id="pageActionContextMenu" + onpopupshowing="BrowserPageActions.onContextMenuShowing(event, this);"> + <menuitem class="pageActionContextMenuItem builtInUnpinned" + label="&pageAction.addToUrlbar.label;" + oncommand="BrowserPageActions.togglePinningForContextAction();"/> + <menuitem class="pageActionContextMenuItem builtInPinned" + label="&pageAction.removeFromUrlbar.label;" + oncommand="BrowserPageActions.togglePinningForContextAction();"/> + <menuitem class="pageActionContextMenuItem extensionUnpinned" + label="&pageAction.allowInUrlbar.label;" + oncommand="BrowserPageActions.togglePinningForContextAction();"/> + <menuitem class="pageActionContextMenuItem extensionPinned" + label="&pageAction.disallowInUrlbar.label;" + oncommand="BrowserPageActions.togglePinningForContextAction();"/> + <menuseparator class="pageActionContextMenuItem extensionPinned extensionUnpinned"/> + <menuitem class="pageActionContextMenuItem extensionPinned extensionUnpinned" + label="&pageAction.manageExtension.label;" + oncommand="BrowserPageActions.openAboutAddonsForContextAction();"/> + </menupopup> + + <!-- 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> + +#include popup-notifications.inc + +#include ../../components/customizableui/content/panelUI.inc.xul +#include ../../components/controlcenter/content/panel.inc.xul +#include ../../components/downloads/content/downloadsPanel.inc.xul + + <hbox id="downloads-animation-container" mousethrough="always"> + <vbox id="downloads-notification-anchor" hidden="true"> + <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);"/> + + <menupopup id="SyncedTabsSidebarContext"> + <menuitem label="&syncedTabs.context.open.label;" + accesskey="&syncedTabs.context.open.accesskey;" + id="syncedTabsOpenSelected" where="current"/> + <menuitem label="&syncedTabs.context.openInNewTab.label;" + accesskey="&syncedTabs.context.openInNewTab.accesskey;" + id="syncedTabsOpenSelectedInTab" where="tab"/> + <menuitem label="&syncedTabs.context.openInNewWindow.label;" + accesskey="&syncedTabs.context.openInNewWindow.accesskey;" + id="syncedTabsOpenSelectedInWindow" where="window"/> + <menuitem label="&syncedTabs.context.openInNewPrivateWindow.label;" + accesskey="&syncedTabs.context.openInNewPrivateWindow.accesskey;" + id="syncedTabsOpenSelectedInPrivateWindow" where="window" private="true"/> + <menuseparator/> + <menuitem label="&syncedTabs.context.bookmarkSingleTab.label;" + accesskey="&syncedTabs.context.bookmarkSingleTab.accesskey;" + id="syncedTabsBookmarkSelected"/> + <menuitem label="&syncedTabs.context.copy.label;" + accesskey="&syncedTabs.context.copy.accesskey;" + id="syncedTabsCopySelected"/> + <menuseparator/> + <menuitem label="&syncedTabs.context.openAllInTabs.label;" + accesskey="&syncedTabs.context.openAllInTabs.accesskey;" + id="syncedTabsOpenAllInTabs"/> + <menuitem label="&syncedTabs.context.managedevices.label;" + accesskey="&syncedTabs.context.managedevices.accesskey;" + id="syncedTabsManageDevices" + oncommand="gSync.openDevicesManagementPage('syncedtabs-sidebar');"/> + <menuitem label="&syncSyncNowItem.label;" + accesskey="&syncSyncNowItem.accesskey;" + id="syncedTabsRefresh"/> + </menupopup> + <menupopup id="SyncedTabsSidebarTabsFilterContext" + class="textbox-contextmenu"> + <menuitem label="&undoCmd.label;" + accesskey="&undoCmd.accesskey;" + cmd="cmd_undo"/> + <menuseparator/> + <menuitem label="&cutCmd.label;" + accesskey="&cutCmd.accesskey;" + cmd="cmd_cut"/> + <menuitem label="©Cmd.label;" + accesskey="©Cmd.accesskey;" + cmd="cmd_copy"/> + <menuitem label="&pasteCmd.label;" + accesskey="&pasteCmd.accesskey;" + cmd="cmd_paste"/> + <menuitem label="&deleteCmd.label;" + accesskey="&deleteCmd.accesskey;" + cmd="cmd_delete"/> + <menuseparator/> + <menuitem label="&selectAllCmd.label;" + accesskey="&selectAllCmd.accesskey;" + cmd="cmd_selectAll"/> + <menuseparator/> + <menuitem label="&syncSyncNowItem.label;" + accesskey="&syncSyncNowItem.accesskey;" + id="syncedTabsRefreshFilter"/> + </menupopup> + </popupset> + <box id="appMenu-viewCache" hidden="true"/> + +#ifdef CAN_DRAW_IN_TITLEBAR +<vbox id="titlebar"> + <hbox id="titlebar-content"> + <spacer id="titlebar-spacer" flex="1"/> + <hbox id="titlebar-buttonbox-container"> + <hbox id="titlebar-buttonbox" class="titlebar-color"> + <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"> + <button class="accessibility-indicator" tooltiptext="&accessibilityIndicator.tooltip;" aria-live="polite"/> + <hbox class="private-browsing-indicator"/> + <hbox id="titlebar-fullscreen-button"/> + </hbox> +#endif + </hbox> +</vbox> +#endif + + <toolbox id="navigator-toolbox"> + <!-- Menu --> + <toolbar type="menubar" id="toolbar-menubar" + class="chromeclass-menubar titlebar-color" + customizable="true" + mode="icons" +#ifdef MENUBAR_CAN_AUTOHIDE + toolbarname="&menubarCmd.label;" + accesskey="&menubarCmd.accesskey;" + autohide="true" +#endif + context="toolbar-context-menu"> + <toolbaritem id="menubar-items" align="center"> +# The entire main menubar is placed into browser-menubar.inc, so that it can be shared 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" + skipintoolbarset="true"/> +#endif +#endif + </toolbar> + + <toolbar id="TabsToolbar" + class="titlebar-color" + fullscreentoolbar="true" + customizable="true" + mode="icons" + aria-label="&tabsToolbar.label;" + context="toolbar-context-menu" + collapsed="true"> + +#ifdef CAN_DRAW_IN_TITLEBAR + <hbox class="titlebar-placeholder" type="pre-tabs" + skipintoolbarset="true"/> +#endif + + <tabs id="tabbrowser-tabs" + flex="1" + setfocus="false" + tooltip="tabbrowser-tab-tooltip" + stopwatchid="FX_TAB_CLICK_MS"> + <tab class="tabbrowser-tab" selected="true" visuallyselected="true" fadein="true"/> + </tabs> + + <toolbarbutton id="new-tab-button" + class="toolbarbutton-1 chromeclass-toolbar-additional" + label="&tabCmd.label;" + command="cmd_newNavigatorTab" + onclick="checkForMiddleClick(this, event);" + tooltip="dynamic-shortcut-tooltip" + ondrop="newTabButtonObserver.onDrop(event)" + ondragover="newTabButtonObserver.onDragOver(event)" + ondragenter="newTabButtonObserver.onDragOver(event)" + ondragexit="newTabButtonObserver.onDragExit(event)" + cui-areatype="toolbar" + removable="true"/> + + <toolbarbutton id="alltabs-button" + class="toolbarbutton-1 chromeclass-toolbar-additional tabs-alltabs-button" + type="menu" + label="&listAllTabs.label;" + tooltiptext="&listAllTabs.label;" + removable="false"> + <menupopup id="alltabs-popup" + position="after_end"> + <menuitem id="alltabs_undoCloseTab" + key="key_undoCloseTab" + label="&undoCloseTab.label;" + observes="History:UndoCloseTab"/> + <menuseparator id="alltabs-popup-separator-1"/> + <menu id="alltabs_containersTab" + label="&newUserContext.label;"> + <menupopup id="alltabs_containersMenuTab" /> + </menu> + <menuseparator id="alltabs-popup-separator-2"/> + </menupopup> + </toolbarbutton> + +#ifdef CAN_DRAW_IN_TITLEBAR + <hbox class="titlebar-placeholder" type="post-tabs" + ordinal="1000" + skipintoolbarset="true"/> +#endif + + <button class="accessibility-indicator" tooltiptext="&accessibilityIndicator.tooltip;" + ordinal="1000" + aria-live="polite" skipintoolbarset="true"/> + <hbox class="private-browsing-indicator" skipintoolbarset="true" + ordinal="1000"/> +#ifdef CAN_DRAW_IN_TITLEBAR + <hbox class="titlebar-placeholder" type="caption-buttons" +#ifndef XP_MACOSX + ordinal="1000" +#endif + skipintoolbarset="true"/> + +#ifdef XP_MACOSX + <hbox class="titlebar-placeholder" type="fullscreen-button" + skipintoolbarset="true"/> +#endif +#endif + </toolbar> + + <toolbar id="nav-bar" + aria-label="&navbarCmd.label;" + fullscreentoolbar="true" mode="icons" customizable="true" + customizationtarget="nav-bar-customization-target" + overflowable="true" + overflowbutton="nav-bar-overflow-button" + overflowtarget="widget-overflow-list" + overflowpanel="widget-overflow" + context="toolbar-context-menu"> + + <hbox id="nav-bar-customization-target" flex="1"> + <toolbarbutton id="back-button" class="toolbarbutton-1 chromeclass-toolbar-additional" + label="&backCmd.label;" + removable="false" overflows="false" + keepbroadcastattributeswhencustomizing="true" + command="Browser:BackOrBackDuplicate" + onclick="checkForMiddleClick(this, event);" + tooltip="back-button-tooltip" + context="backForwardMenu"/> + <toolbarbutton id="forward-button" class="toolbarbutton-1 chromeclass-toolbar-additional" + label="&forwardCmd.label;" + removable="false" overflows="false" + keepbroadcastattributeswhencustomizing="true" + command="Browser:ForwardOrForwardDuplicate" + onclick="checkForMiddleClick(this, event);" + tooltip="forward-button-tooltip" + context="backForwardMenu"/> + <toolbaritem id="stop-reload-button" class="chromeclass-toolbar-additional" + title="&reloadCmd.label;" + removable="true" overflows="false"> + <toolbarbutton id="reload-button" class="toolbarbutton-1" + label="&reloadCmd.label;" + command="Browser:ReloadOrDuplicate" + onclick="checkForMiddleClick(this, event);" + tooltip="dynamic-shortcut-tooltip"> + <box class="toolbarbutton-animatable-box"> + <image class="toolbarbutton-animatable-image"/> + </box> + </toolbarbutton> + <toolbarbutton id="stop-button" class="toolbarbutton-1" + label="&stopCmd.label;" + command="Browser:Stop" + tooltip="dynamic-shortcut-tooltip"> + <box class="toolbarbutton-animatable-box"> + <image class="toolbarbutton-animatable-image"/> + </box> + </toolbarbutton> + </toolbaritem> + <toolbarbutton id="home-button" class="toolbarbutton-1 chromeclass-toolbar-additional" + removable="true" + label="&homeButton.label;" + ondragover="homeButtonObserver.onDragOver(event)" + ondragenter="homeButtonObserver.onDragOver(event)" + ondrop="homeButtonObserver.onDrop(event)" + ondragexit="homeButtonObserver.onDragExit(event)" + key="goHome" + onclick="BrowserGoHome(event);" + cui-areatype="toolbar" + aboutHomeOverrideTooltip="&abouthome.pageTitle;"/> + <toolbarspring cui-areatype="toolbar" class="chromeclass-toolbar-additional"/> + <toolbaritem id="urlbar-container" flex="400" persist="width" + removable="false" + class="chromeclass-location" overflows="false"> + <textbox id="urlbar" flex="1" + placeholder="&urlbar.placeholder2;" + defaultPlaceholder="&urlbar.placeholder2;" + focused="true" + type="autocomplete" + autocompletesearch="unifiedcomplete" + autocompletesearchparam="enable-actions" + autocompletepopup="PopupAutoCompleteRichResult" + completeselectedindex="true" + shrinkdelay="250" + tabscrolling="true" + newlines="stripsurroundingwhitespace" + ontextentered="this.handleCommand(param);" + ontextreverted="return this.handleRevert();" + pageproxystate="invalid"> + <!-- Use onclick instead of normal popup= syntax since the popup + code fires onmousedown, and hence eats our favicon drag events. --> + <box id="identity-box" role="button" + align="center" + aria-label="&urlbar.viewSiteInfo.label;" + onclick="gIdentityHandler.handleIdentityButtonEvent(event);" + onkeypress="gIdentityHandler.handleIdentityButtonEvent(event);" + ondragstart="gIdentityHandler.onDragStart(event);"> + <image id="identity-icon" + consumeanchor="identity-box" + onclick="PageProxyClickHandler(event);"/> + <image id="sharing-icon" mousethrough="always"/> + <image id="tracking-protection-icon"/> + <box id="blocked-permissions-container" align="center"> + <image data-permission-id="geo" class="blocked-permission-icon geo-icon" role="button" + tooltiptext="&urlbar.geolocationBlocked.tooltip;"/> + <image data-permission-id="desktop-notification" class="blocked-permission-icon desktop-notification-icon" role="button" + tooltiptext="&urlbar.webNotificationsBlocked.tooltip;"/> + <image data-permission-id="camera" class="blocked-permission-icon camera-icon" role="button" + tooltiptext="&urlbar.cameraBlocked.tooltip;"/> + <image data-permission-id="microphone" class="blocked-permission-icon microphone-icon" role="button" + tooltiptext="&urlbar.microphoneBlocked.tooltip;"/> + <image data-permission-id="screen" class="blocked-permission-icon screen-icon" role="button" + tooltiptext="&urlbar.screenBlocked.tooltip;"/> + <image data-permission-id="persistent-storage" class="blocked-permission-icon persistent-storage-icon" role="button" + tooltiptext="&urlbar.persistentStorageBlocked.tooltip;"/> + <image data-permission-id="popup" class="blocked-permission-icon popup-icon" role="button" + tooltiptext="&urlbar.popupBlocked.tooltip;"/> + <image data-permission-id="canvas" class="blocked-permission-icon canvas-icon" role="button" + tooltiptext="&urlbar.canvasBlocked.tooltip;"/> + <image data-permission-id="plugin:flash" class="blocked-permission-icon plugin-icon" role="button" + tooltiptext="&urlbar.flashPluginBlocked.tooltip;"/> + <image data-permission-id="midi" class="blocked-permission-icon midi-icon" role="button" + tooltiptext="&urlbar.midiBlocked.tooltip;"/> + </box> + <box id="notification-popup-box" + hidden="true" + onmouseover="document.getElementById('identity-box').classList.add('no-hover');" + onmouseout="document.getElementById('identity-box').classList.remove('no-hover');" + align="center"> + <image id="default-notification-icon" class="notification-anchor-icon" role="button" + tooltiptext="&urlbar.defaultNotificationAnchor.tooltip;"/> + <image id="geo-notification-icon" class="notification-anchor-icon geo-icon" role="button" + tooltiptext="&urlbar.geolocationNotificationAnchor.tooltip;"/> + <image id="addons-notification-icon" class="notification-anchor-icon install-icon" role="button" + tooltiptext="&urlbar.addonsNotificationAnchor.tooltip;"/> + <image id="canvas-notification-icon" class="notification-anchor-icon" role="button" + tooltiptext="&urlbar.canvasNotificationAnchor.tooltip;"/> + <image id="indexedDB-notification-icon" class="notification-anchor-icon indexedDB-icon" role="button" + tooltiptext="&urlbar.indexedDBNotificationAnchor.tooltip;"/> + <image id="password-notification-icon" class="notification-anchor-icon login-icon" role="button" + tooltiptext="&urlbar.passwordNotificationAnchor.tooltip;"/> + <stack id="plugins-notification-icon" class="notification-anchor-icon" role="button" align="center" + tooltiptext="&urlbar.pluginsNotificationAnchor.tooltip;"> + <image class="plugin-icon" /> + <image id="plugin-icon-badge" /> + </stack> + <image id="web-notifications-notification-icon" class="notification-anchor-icon desktop-notification-icon" role="button" + tooltiptext="&urlbar.webNotificationAnchor.tooltip;"/> + <image id="webRTC-shareDevices-notification-icon" class="notification-anchor-icon camera-icon" role="button" + tooltiptext="&urlbar.webRTCShareDevicesNotificationAnchor.tooltip;"/> + <image id="webRTC-shareMicrophone-notification-icon" class="notification-anchor-icon microphone-icon" role="button" + tooltiptext="&urlbar.webRTCShareMicrophoneNotificationAnchor.tooltip;"/> + <image id="webRTC-shareScreen-notification-icon" class="notification-anchor-icon screen-icon" role="button" + tooltiptext="&urlbar.webRTCShareScreenNotificationAnchor.tooltip;"/> + <image id="servicesInstall-notification-icon" class="notification-anchor-icon service-icon" role="button" + tooltiptext="&urlbar.servicesNotificationAnchor.tooltip;"/> + <image id="translate-notification-icon" class="notification-anchor-icon translation-icon" role="button" + tooltiptext="&urlbar.translateNotificationAnchor.tooltip;"/> + <image id="translated-notification-icon" class="notification-anchor-icon translation-icon in-use" role="button" + tooltiptext="&urlbar.translatedNotificationAnchor.tooltip;"/> + <image id="eme-notification-icon" class="notification-anchor-icon drm-icon" role="button" + tooltiptext="&urlbar.emeNotificationAnchor.tooltip;"/> + <image id="persistent-storage-notification-icon" class="notification-anchor-icon persistent-storage-icon" role="button" + tooltiptext="&urlbar.persistentStorageNotificationAnchor.tooltip;"/> + <image id="midi-notification-icon" class="notification-anchor-icon midi-icon" role="button" + tooltiptext="&urlbar.midiNotificationAnchor.tooltip;"/> + <image id="webauthn-notification-icon" class="notification-anchor-icon" role="button" + tooltiptext="&urlbar.defaultNotificationAnchor.tooltip;"/> + </box> + <image id="connection-icon"/> + <image id="extension-icon"/> + <image id="remote-control-icon" + tooltiptext="&urlbar.remoteControlNotificationAnchor.tooltip;"/> + <hbox id="identity-icon-labels"> + <label id="identity-icon-label" class="plain" flex="1"/> + <label id="identity-icon-country-label" class="plain"/> + </hbox> + </box> + <box id="urlbar-display-box" align="center"> + <label id="switchtab" class="urlbar-display urlbar-display-switchtab" value="&urlbar.switchToTab.label;"/> + <label id="extension" class="urlbar-display urlbar-display-extension" value="&urlbar.extension.label;"/> + </box> + <hbox id="page-action-buttons" context="pageActionContextMenu"> + <hbox id="userContext-icons" hidden="true"> + <label id="userContext-label"/> + <image id="userContext-indicator"/> + </hbox> + <image id="reader-mode-button" + class="urlbar-icon urlbar-page-action" + tooltip="dynamic-shortcut-tooltip" + role="button" + hidden="true" + onclick="ReaderParent.buttonClick(event);"/> + <toolbarbutton id="urlbar-zoom-button" + onclick="FullZoom.reset();" + tooltip="dynamic-shortcut-tooltip" + hidden="true"/> + <box id="pageActionSeparator" class="urlbar-page-action"/> + <image id="pageActionButton" + class="urlbar-icon urlbar-page-action" + role="button" + tooltiptext="&pageActionButton.tooltip;" + onmousedown="BrowserPageActions.mainButtonClicked(event);"/> + <hbox id="star-button-box" + hidden="true" + class="urlbar-icon-wrapper urlbar-page-action" + onclick="BrowserPageActions.doCommandForAction(PageActions.actionForID('bookmark'), event, this);"> + <image id="star-button" + class="urlbar-icon" + role="button" + observes="bookmarkThisPageBroadcaster"/> + <hbox id="star-button-animatable-box"> + <image id="star-button-animatable-image" + role="presentation" + observes="bookmarkThisPageBroadcaster"/> + </hbox> + </hbox> + </hbox> + </textbox> + </toolbaritem> + + <toolbarspring cui-areatype="toolbar" class="chromeclass-toolbar-additional"/> + + <!-- This is a placeholder for the Downloads Indicator. It is visible + during the customization of the toolbar, in the palette, and before + the Downloads Indicator overlay is loaded. --> + <toolbarbutton id="downloads-button" + class="toolbarbutton-1 chromeclass-toolbar-additional badged-button" + key="key_openDownloads" + onmousedown="DownloadsIndicatorView.onCommand(event);" + ondrop="DownloadsIndicatorView.onDrop(event);" + ondragover="DownloadsIndicatorView.onDragOver(event);" + ondragenter="DownloadsIndicatorView.onDragOver(event);" + label="&downloads.label;" + removable="true" + overflows="false" + cui-areatype="toolbar" + hidden="true" + tooltip="dynamic-shortcut-tooltip" + indicator="true"> + <!-- The panel's anchor area is smaller than the outer button, but must + always be visible and must not move or resize when the indicator + state changes, otherwise the panel could change its position or lose + its arrow unexpectedly. --> + <stack id="downloads-indicator-anchor" + consumeanchor="downloads-button"> + <box id="downloads-indicator-icon"/> + <stack id="downloads-indicator-progress-outer"> + <box id="downloads-indicator-progress-inner"/> + </stack> + </stack> + </toolbarbutton> + + <toolbarbutton id="library-button" class="toolbarbutton-1 chromeclass-toolbar-additional subviewbutton-nav" + removable="true" + onmousedown="PanelUI.showSubView('appMenu-libraryView', this, event);" + closemenu="none" + cui-areatype="toolbar" + tooltiptext="&libraryButton.tooltip;" + label="&places.library.title;"/> + + </hbox> + + <toolbarbutton id="nav-bar-overflow-button" + class="toolbarbutton-1 chromeclass-toolbar-additional overflow-button" + skipintoolbarset="true" + tooltiptext="&navbarOverflow.label;"> + <box class="toolbarbutton-animatable-box"> + <image class="toolbarbutton-animatable-image"/> + </box> + </toolbarbutton> + + <toolbaritem id="PanelUI-button" + removable="false"> + <toolbarbutton id="PanelUI-menu-button" + class="toolbarbutton-1 badged-button" + consumeanchor="PanelUI-button" + label="&brandShortName;" + tooltiptext="&appmenu.tooltip;"/> + </toolbaritem> + + <hbox id="window-controls" hidden="true" pack="end" skipintoolbarset="true" + ordinal="1000"> + <toolbarbutton id="minimize-button" + tooltiptext="&fullScreenMinimize.tooltip;" + oncommand="window.minimize();"/> + + <toolbarbutton id="restore-button" +#ifdef XP_MACOSX +# Prior to 10.7 there wasn't a native fullscreen button so we use #restore-button +# to exit fullscreen and want it to behave like other toolbar buttons. + class="toolbarbutton-1" +#endif + tooltiptext="&fullScreenRestore.tooltip;" + oncommand="BrowserFullScreen();"/> + + <toolbarbutton id="close-button" + tooltiptext="&fullScreenClose.tooltip;" + oncommand="BrowserTryToCloseWindow();"/> + </hbox> + </toolbar> + + <toolbar id="PersonalToolbar" + mode="icons" + class="chromeclass-directories" + context="toolbar-context-menu" + toolbarname="&personalbarCmd.label;" accesskey="&personalbarCmd.accesskey;" + collapsed="true" + customizable="true"> + <toolbaritem id="personal-bookmarks" + title="&bookmarksToolbarItem.label;" + cui-areatype="toolbar" + removable="true"> + <toolbarbutton id="bookmarks-toolbar-placeholder" + class="bookmark-item" + label="&bookmarksToolbarItem.label;"/> + <toolbarbutton id="bookmarks-toolbar-button" + class="toolbarbutton-1" + flex="1" + label="&bookmarksToolbarItem.label;" + oncommand="PlacesToolbarHelper.onPlaceholderCommand();"/> + <hbox flex="1" + id="PlacesToolbar" + context="placesContext" + onmouseup="BookmarksEventHandler.onMouseUp(event);" + onclick="BookmarksEventHandler.onClick(event, this._placesView);" + oncommand="BookmarksEventHandler.onCommand(event);" + tooltip="bhTooltip" + popupsinherittooltip="true"> + <hbox flex="1"> + <hbox id="PlacesToolbarDropIndicatorHolder" align="center" collapsed="true"> + <image id="PlacesToolbarDropIndicator" + mousethrough="always" + collapsed="true"/> + </hbox> + <scrollbox orient="horizontal" + id="PlacesToolbarItems" + flex="1"/> + <toolbarbutton type="menu" + id="PlacesChevron" + class="toolbarbutton-1" + mousethrough="never" + collapsed="true" + tooltiptext="&bookmarksToolbarChevron.tooltip;" + onpopupshowing="document.getElementById('PlacesToolbar') + ._placesView._onChevronPopupShowing(event);"> + <menupopup id="PlacesChevronPopup" + placespopup="true" + tooltip="bhTooltip" popupsinherittooltip="true" + context="placesContext"/> + </toolbarbutton> + </hbox> + </hbox> + </toolbaritem> + </toolbar> + + <toolbarpalette id="BrowserToolbarPalette"> + + <toolbarbutton id="print-button" class="toolbarbutton-1 chromeclass-toolbar-additional" +#ifdef XP_MACOSX + command="cmd_print" + tooltip="dynamic-shortcut-tooltip" +#else + command="cmd_printPreview" + tooltiptext="&printButton.tooltip;" +#endif + label="&printButton.label;"/> + + + <toolbarbutton id="new-window-button" class="toolbarbutton-1 chromeclass-toolbar-additional" + label="&newNavigatorCmd.label;" + command="cmd_newNavigator" + tooltip="dynamic-shortcut-tooltip" + ondrop="newWindowButtonObserver.onDrop(event)" + ondragover="newWindowButtonObserver.onDragOver(event)" + ondragenter="newWindowButtonObserver.onDragOver(event)" + ondragexit="newWindowButtonObserver.onDragExit(event)"/> + + <toolbarbutton id="fullscreen-button" class="toolbarbutton-1 chromeclass-toolbar-additional" + observes="View:FullScreen" + type="checkbox" + label="&fullScreenCmd.label;" + tooltip="dynamic-shortcut-tooltip"/> + + <toolbarbutton id="bookmarks-menu-button" + class="toolbarbutton-1 chromeclass-toolbar-additional subviewbutton-nav" + type="menu" + label="&bookmarksMenuButton2.label;" + tooltip="dynamic-shortcut-tooltip" + anchor="dropmarker" + ondragenter="PlacesMenuDNDHandler.onDragEnter(event);" + ondragover="PlacesMenuDNDHandler.onDragOver(event);" + ondragleave="PlacesMenuDNDHandler.onDragLeave(event);" + ondrop="PlacesMenuDNDHandler.onDrop(event);" + oncommand="BookmarkingUI.onCommand(event);"> + <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" + onmouseup="BookmarksEventHandler.onMouseUp(event);" + oncommand="BookmarksEventHandler.onCommand(event);" + onclick="BookmarksEventHandler.onClick(event, this.parentNode._placesView);" + onpopupshowing="BookmarkingUI.onPopupShowing(event); + BookmarkingUI.attachPlacesView(event, this);" + tooltip="bhTooltip" popupsinherittooltip="true"> + <menuitem id="BMB_viewBookmarksSidebar" + class="menuitem-iconic subviewbutton" + label-show="&viewBookmarksSidebar2.label;" + label-hide="&hideBookmarksSidebar.label;" + oncommand="SidebarUI.toggle('viewBookmarksSidebar');"/> + <!-- NB: temporary solution for bug 985024, this should go away soon. --> + <menuitem id="BMB_bookmarksShowAllTop" + class="menuitem-iconic subviewbutton" + label="&showAllBookmarks2.label;" + command="Browser:ShowAllBookmarks" + key="manBookmarkKb"/> + <menuseparator/> + <menu id="BMB_bookmarksToolbar" + class="menu-iconic bookmark-item subviewbutton" + label="&personalbarCmd.label;" + container="true"> + <menupopup id="BMB_bookmarksToolbarPopup" + placespopup="true" + context="placesContext" + onpopupshowing="if (!this.parentNode._placesView) + new PlacesMenu(event, 'place:folder=TOOLBAR', + PlacesUIUtils.getViewForNode(this.parentNode.parentNode).options);"> + <menuitem id="BMB_viewBookmarksToolbar" + class="menuitem-iconic subviewbutton" + label-show="&viewBookmarksToolbar.label;" + label-hide="&hideBookmarksToolbar.label;" + oncommand="BookmarkingUI.toggleBookmarksToolbar();"/> + <menuseparator/> + <!-- Bookmarks toolbar items --> + </menupopup> + </menu> + <menu id="BMB_unsortedBookmarks" + class="menu-iconic bookmark-item subviewbutton" + label="&bookmarksMenuButton.other.label;" + container="true"> + <menupopup id="BMB_unsortedBookmarksPopup" + placespopup="true" + context="placesContext" + onpopupshowing="if (!this.parentNode._placesView) + new PlacesMenu(event, 'place:folder=UNFILED_BOOKMARKS', + PlacesUIUtils.getViewForNode(this.parentNode.parentNode).options);"/> + </menu> + <menu id="BMB_mobileBookmarks" + class="menu-iconic bookmark-item subviewbutton" + label="&bookmarksMenuButton.mobile.label;" + hidden="true" + container="true"> + <menupopup id="BMB_mobileBookmarksPopup" + placespopup="true" + context="placesContext" + onpopupshowing="if (!this.parentNode._placesView) + new PlacesMenu(event, 'place:folder=MOBILE_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> + + <toolbaritem id="search-container" + class="chromeclass-toolbar-additional" + title="&searchItem.title;" + align="center" + flex="100" + persist="width"> + <searchbar id="searchbar" flex="1"/> + </toolbaritem> + </toolbarpalette> + <box id="library-animatable-box" class="toolbarbutton-animatable-box"> + <image class="toolbarbutton-animatable-image"/> + </box> + </toolbox> + + <hbox id="fullscr-toggler" hidden="true"/> + + <deck id="content-deck" flex="1"> + <hbox flex="1" id="browser"> + <vbox id="browser-border-start" hidden="true" layer="true"/> + <vbox id="sidebar-box" hidden="true" class="chromeclass-extrachrome"> + <sidebarheader id="sidebar-header" align="center"> + <toolbarbutton id="sidebar-switcher-target" flex="1" class="tabbable"> + <image id="sidebar-icon" consumeanchor="sidebar-switcher-target"/> + <label id="sidebar-title" persist="value" crop="end" flex="1" control="sidebar"/> + <image id="sidebar-switcher-arrow"/> + </toolbarbutton> + <image id="sidebar-throbber"/> +# To ensure the button label's intrinsic width doesn't expand the sidebar +# if the label is long, the button needs flex=1. +# To ensure the button doesn't expand unnecessarily for short labels, the +# spacer should significantly out-flex the button. + <spacer flex="1000"/> + <toolbarbutton id="sidebar-close" class="close-icon tabbable" tooltiptext="&sidebarCloseButton.tooltip;" oncommand="SidebarUI.hide();"/> + </sidebarheader> + <browser id="sidebar" flex="1" autoscroll="false" disablehistory="true" disablefullscreen="true" + style="min-width: 14em; width: 18em; max-width: 36em;" tooltip="aHTMLTooltip"/> + </vbox> + + <splitter id="sidebar-splitter" class="chromeclass-extrachrome sidebar-splitter" hidden="true"/> + <vbox id="appcontent" flex="1"> + <notificationbox id="high-priority-global-notificationbox" notificationside="top"/> + <tabbox id="tabbrowser-tabbox" + flex="1" eventnode="document" tabcontainer="tabbrowser-tabs" + onselect="if (event.target.localName == 'tabpanels') gBrowser.updateCurrentBrowser();"> + <tabpanels flex="1" class="plain" selectedIndex="0" id="tabbrowser-tabpanels"> + <notificationbox flex="1" notificationside="top"> + <hbox flex="1" class="browserSidebarContainer"> + <vbox flex="1" class="browserContainer"> + <stack flex="1" class="browserStack"> + <browser id="tabbrowser-initialBrowser" type="content" + message="true" messagemanagergroup="browsers" + primary="true" blank="true" + tooltip="aHTMLTooltip" + contextmenu="contentAreaContextMenu" + autocompletepopup="PopupAutoComplete" + selectmenulist="ContentSelectDropdown" + datetimepicker="DateTimePickerPanel"/> + </stack> + </vbox> + </hbox> + </notificationbox> + </tabpanels> + </tabbox> + </vbox> + <vbox id="browser-border-end" hidden="true" layer="true"/> + </hbox> +#include ../../components/customizableui/content/customizeMode.inc.xul + </deck> + + <html:div id="fullscreen-warning" class="pointerlockfswarning" hidden="true"> + <html:div class="pointerlockfswarning-domain-text"> + &fullscreenWarning.beforeDomain.label; + <html:span class="pointerlockfswarning-domain"/> + &fullscreenWarning.afterDomain.label; + </html:div> + <html:div class="pointerlockfswarning-generic-text"> + &fullscreenWarning.generic.label; + </html:div> + <html:button id="fullscreen-exit-button" + onclick="FullScreen.exitDomFullScreen();"> +#ifdef XP_MACOSX + &exitDOMFullscreenMac.button; +#else + &exitDOMFullscreen.button; +#endif + </html:button> + </html:div> + + <html:div id="pointerlock-warning" class="pointerlockfswarning" hidden="true"> + <html:div class="pointerlockfswarning-domain-text"> + &pointerlockWarning.beforeDomain.label; + <html:span class="pointerlockfswarning-domain"/> + &pointerlockWarning.afterDomain.label; + </html:div> + <html:div class="pointerlockfswarning-generic-text"> + &pointerlockWarning.generic.label; + </html:div> + </html:div> + + <vbox id="browser-bottombox" layer="true"> + <notificationbox id="global-notificationbox" notificationside="bottom"/> + </vbox> + +</window> diff -up firefox-60.5.0/browser/base/jar.mn.firefox-kde firefox-60.5.0/browser/base/jar.mn --- firefox-60.5.0/browser/base/jar.mn.firefox-kde 2019-01-24 18:30:39.000000000 +0100 +++ firefox-60.5.0/browser/base/jar.mn 2019-01-31 20:58:02.090288335 +0100 @@ -47,6 +47,8 @@ browser.jar: * 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-captivePortal.js (content/browser-captivePortal.js) content/browser/browser-ctrlTab.js (content/browser-ctrlTab.js) diff -up firefox-60.5.0/browser/components/build/nsModule.cpp.firefox-kde firefox-60.5.0/browser/components/build/nsModule.cpp --- firefox-60.5.0/browser/components/build/nsModule.cpp.firefox-kde 2019-01-24 18:30:40.000000000 +0100 +++ firefox-60.5.0/browser/components/build/nsModule.cpp 2019-01-31 20:59:16.120386103 +0100 @@ -13,7 +13,7 @@ #elif defined(XP_MACOSX) #include "nsMacShellService.h" #elif defined(MOZ_WIDGET_GTK) -#include "nsGNOMEShellService.h" +#include "nsUnixShellService.h" #endif #if defined(XP_WIN) @@ -37,8 +37,6 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(Directory 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) @@ -70,7 +68,7 @@ static const mozilla::Module::CIDEntry k #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 }, diff -up firefox-60.5.0/browser/components/preferences/in-content/main.js.firefox-kde firefox-60.5.0/browser/components/preferences/in-content/main.js --- firefox-60.5.0/browser/components/preferences/in-content/main.js.firefox-kde 2019-01-24 18:30:40.000000000 +0100 +++ firefox-60.5.0/browser/components/preferences/in-content/main.js 2019-01-31 20:58:02.090288335 +0100 @@ -338,6 +338,13 @@ var gMainPane = { }, backoffTimes[this._backoffIndex]); } + var env = Components.classes["@mozilla.org/process/environment;1"] + .getService(Components.interfaces.nsIEnvironment); + var kde_session = 0; + if (env.get('KDE_FULL_SESSION') == "true") { + kde_session = 1; + } + this.initBrowserContainers(); this.buildContentProcessCountMenuList(); @@ -1065,6 +1072,17 @@ var gMainPane = { 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; diff -up firefox-60.5.0/browser/components/shell/moz.build.firefox-kde firefox-60.5.0/browser/components/shell/moz.build --- firefox-60.5.0/browser/components/shell/moz.build.firefox-kde 2019-01-24 18:30:40.000000000 +0100 +++ firefox-60.5.0/browser/components/shell/moz.build 2019-01-31 20:58:02.100288346 +0100 @@ -44,6 +44,8 @@ elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'co elif 'gtk' in CONFIG['MOZ_WIDGET_TOOLKIT']: SOURCES += [ 'nsGNOMEShellService.cpp', + 'nsKDEShellService.cpp', + 'nsUnixShellService.cpp', ] if SOURCES: diff -up firefox-60.5.0/browser/components/shell/nsKDEShellService.cpp.firefox-kde firefox-60.5.0/browser/components/shell/nsKDEShellService.cpp --- firefox-60.5.0/browser/components/shell/nsKDEShellService.cpp.firefox-kde 2019-01-31 20:58:02.100288346 +0100 +++ firefox-60.5.0/browser/components/shell/nsKDEShellService.cpp 2019-01-31 20:58:02.100288346 +0100 @@ -0,0 +1,204 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "mozilla/ArrayUtils.h" + +#include "nsCOMPtr.h" +#include "nsKDEShellService.h" +#include "nsShellService.h" +#include "nsKDEUtils.h" +#include "nsIPrefService.h" +#include "nsIProcess.h" +#include "nsIFile.h" +#include "nsServiceManagerUtils.h" +#include "nsComponentManagerUtils.h" +#include "nsIMutableArray.h" +#include "nsISupportsPrimitives.h" +#include "nsArrayUtils.h" + +using namespace mozilla; + +nsresult +nsKDEShellService::Init() +{ + if( !nsKDEUtils::kdeSupport()) + return NS_ERROR_NOT_AVAILABLE; + return NS_OK; +} + +NS_IMPL_ISUPPORTS(nsKDEShellService, nsIGNOMEShellService, nsIShellService) + +NS_IMETHODIMP +nsKDEShellService::IsDefaultBrowser(bool 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 ); + + if( nsKDEUtils::command( command )) + *aIsDefaultBrowser = true; + return NS_OK; +} + +NS_IMETHODIMP +nsKDEShellService::SetDefaultBrowser(bool aClaimAllTypes, + bool aForAllUsers) +{ + nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID ); + if (!command) + return NS_ERROR_FAILURE; + + nsCOMPtr<nsISupportsCString> cmdstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); + nsCOMPtr<nsISupportsCString> paramstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); + if (!cmdstr || !paramstr) + return NS_ERROR_FAILURE; + + cmdstr->SetData( NS_LITERAL_CSTRING( "SETDEFAULTBROWSER" )); + command->AppendElement( cmdstr ); + + paramstr->SetData( aClaimAllTypes ? NS_LITERAL_CSTRING( "ALLTYPES" ) : NS_LITERAL_CSTRING( "NORMAL" )); + command->AppendElement( paramstr ); + + return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +nsKDEShellService::GetCanSetDesktopBackground(bool* aResult) +{ + *aResult = true; + return NS_OK; +} + +NS_IMETHODIMP +nsKDEShellService::SetDesktopBackground(nsIDOMElement* aElement, + int32_t aPosition, + const nsACString& aImageName) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +nsKDEShellService::GetDesktopBackgroundColor(PRUint32 *aColor) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +nsKDEShellService::SetDesktopBackgroundColor(PRUint32 aColor) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +nsKDEShellService::OpenApplication(PRInt32 aApplication) +{ + nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID ); + if (!command) + return NS_ERROR_FAILURE; + + nsCOMPtr<nsISupportsCString> str = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); + if (!str) + return NS_ERROR_FAILURE; + + if( aApplication == APPLICATION_MAIL ) + str->SetData( NS_LITERAL_CSTRING( "OPENMAIL" )); + else if( aApplication == APPLICATION_NEWS ) + str->SetData( NS_LITERAL_CSTRING( "OPENNEWS" )); + else + return NS_ERROR_NOT_IMPLEMENTED; + + command->AppendElement( str ); + return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +nsKDEShellService::OpenApplicationWithURI(nsIFile* aApplication, const nsACString& aURI) +{ + nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID ); + if (!command) + return NS_ERROR_FAILURE; + + nsCOMPtr<nsISupportsCString> cmdstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); + nsCOMPtr<nsISupportsCString> appstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); + nsCOMPtr<nsISupportsCString> uristr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); + if (!cmdstr || !appstr || !uristr) + return NS_ERROR_FAILURE; + + cmdstr->SetData( NS_LITERAL_CSTRING( "RUN" )); + command->AppendElement( cmdstr ); + nsAutoCString app; + nsresult rv = aApplication->GetNativePath( app ); + NS_ENSURE_SUCCESS( rv, rv ); + appstr->SetData( app ); + command->AppendElement( appstr ); + uristr->SetData( aURI ); + command->AppendElement( uristr ); + return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE; +} + +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 ); + + 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 -up firefox-60.5.0/browser/components/shell/nsKDEShellService.h.firefox-kde firefox-60.5.0/browser/components/shell/nsKDEShellService.h --- firefox-60.5.0/browser/components/shell/nsKDEShellService.h.firefox-kde 2019-01-31 20:58:02.100288346 +0100 +++ firefox-60.5.0/browser/components/shell/nsKDEShellService.h 2019-01-31 20:58:02.100288346 +0100 @@ -0,0 +1,30 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef nskdeshellservice_h____ +#define nskdeshellservice_h____ + +#include "nsIGNOMEShellService.h" +#include "nsString.h" +#include "mozilla/Attributes.h" + +class nsKDEShellService final : public nsIGNOMEShellService +{ +public: + nsKDEShellService() : mCheckedThisSession(false) { } + + NS_DECL_ISUPPORTS + NS_DECL_NSIGNOMESHELLSERVICE + NS_DECL_NSISHELLSERVICE + + nsresult Init(); + +private: + ~nsKDEShellService() {} + + bool mCheckedThisSession; +}; + +#endif // nskdeshellservice_h____ diff -up firefox-60.5.0/browser/components/shell/nsUnixShellService.cpp.firefox-kde firefox-60.5.0/browser/components/shell/nsUnixShellService.cpp --- firefox-60.5.0/browser/components/shell/nsUnixShellService.cpp.firefox-kde 2019-01-31 20:58:02.100288346 +0100 +++ firefox-60.5.0/browser/components/shell/nsUnixShellService.cpp 2019-01-31 20:58:02.100288346 +0100 @@ -0,0 +1,22 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +#include "nsUnixShellService.h" +#include "nsGNOMEShellService.h" +#include "nsKDEShellService.h" +#include "nsKDEUtils.h" +#include "mozilla/ModuleUtils.h" + +NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGNOMEShellService, Init) +NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsKDEShellService, Init) + +NS_IMETHODIMP +nsUnixShellServiceConstructor(nsISupports *aOuter, REFNSIID aIID, void **aResult) +{ + if( nsKDEUtils::kdeSupport()) + return nsKDEShellServiceConstructor( aOuter, aIID, aResult ); + return nsGNOMEShellServiceConstructor( aOuter, aIID, aResult ); +} diff -up firefox-60.5.0/browser/components/shell/nsUnixShellService.h.firefox-kde firefox-60.5.0/browser/components/shell/nsUnixShellService.h --- firefox-60.5.0/browser/components/shell/nsUnixShellService.h.firefox-kde 2019-01-31 20:58:02.100288346 +0100 +++ firefox-60.5.0/browser/components/shell/nsUnixShellService.h 2019-01-31 20:58:02.100288346 +0100 @@ -0,0 +1,15 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +#ifndef nsunixshellservice_h____ +#define nsunixshellservice_h____ + +#include "nsIGNOMEShellService.h" + +NS_IMETHODIMP +nsUnixShellServiceConstructor(nsISupports *aOuter, REFNSIID aIID, void **aResult); + +#endif // nsunixshellservice_h____ diff -up firefox-60.5.0/browser/installer/package-manifest.in.firefox-kde firefox-60.5.0/browser/installer/package-manifest.in --- firefox-60.5.0/browser/installer/package-manifest.in.firefox-kde 2019-01-24 18:30:40.000000000 +0100 +++ firefox-60.5.0/browser/installer/package-manifest.in 2019-01-31 20:58:02.100288346 +0100 @@ -651,6 +651,8 @@ ; gre location for now. @RESPATH@/defaults/pref/channel-prefs.js +@BINPATH@/defaults/pref/kde.js + ; Remote control protocol prefs ; defined in ../../testing/marionette/prefs/marionette.js @RESPATH@/defaults/pref/marionette.js
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 24258
:
10716
| 10717 |
10718