$ git diff --patch-with-stat --summary 99923666a1249dc376b3c5fc6f781ee4eed9c836..514693415da0bc839c5b273fa07d6d2bea495d39
.abf.yml | 142 +-
firefox-68.0-kde.patch | 1698 ----------------------
firefox-69.0-kde.patch | 351 +++++
firefox.spec | 12 +-
mozilla-68.0-kde.patch => mozilla-69.0-kde.patch | 611 +-------
5 files changed, 477 insertions(+), 2337 deletions(-)
delete mode 100644 firefox-68.0-kde.patch
create mode 100644 firefox-69.0-kde.patch
rename mozilla-68.0-kde.patch => mozilla-69.0-kde.patch (73%)
diff --git a/.abf.yml b/.abf.yml
index da0409e..3b548ae 100644
--- a/.abf.yml
+++ b/.abf.yml
@@ -1,74 +1,74 @@
sources:
- af.xpi: 7bc13768ebe3960f3316d6a4d9efa8ce1b76b2e7
- ar.xpi: 6209330063978867dfba583ea6c28619ba9c7404
- ast.xpi: 04c2c6c912eb23c77442b41de7ba1729ce6b8a4b
+ af.xpi: 2c1ba8d6a5ffe3ed1be32617cff332730c7b5c0b
+ ar.xpi: 56e8a4bd0621e56cc45dc1d93a6863587601a007
+ ast.xpi: 425e040124be807ffb1c124fe493f14254d4adfe
autoconf-2.13.tar.gz: e4826c8bd85325067818f19b2b2ad2b625da66fc
- bg.xpi: 7f26945eebf70571204bd52655c39de474896f7b
- bn.xpi: 38e46585ce60993576d5abb22b50508d0d48bdd7
- br.xpi: a9ddeeeea60e5979838e43e0fac0a6d2013b0fda
- bs.xpi: d163260c9988f5950582b97e758f0b589c8244ef
- ca.xpi: ac753c358d01fd7ffa8c44d6acbb5c52bf4d40e2
- cbindgen-vendor.tar.xz: 5ed5e4744f281d217e56035036af4cef24a29935
- cs.xpi: 86a160e3580172dd6cec65e927fa48b49b7646a0
- cy.xpi: 0040af442c7089a0565517ff9c185cf286bc2c34
- da.xpi: 3696c4617de4e86dc912b7bc174a2d23177fd83b
- de.xpi: ad0add629283af23ce005033ed089cfa745c950a
- el.xpi: f97f69dcd6a7653fb804d8702d61f5d1338fac8a
- en-GB.xpi: 99ce412f20fffdfa94d5dd4732a5341bff9c334d
- eo.xpi: 4416a0d72a5cdc33ec794cd9872509e7cb340cc5
- es-AR.xpi: b76c2691c2fb3534ac2b4440e865ef064a8c7a28
- es-CL.xpi: bb35a02851f022a15a420d34c36086b7bf58db01
- es-ES.xpi: 91f9b373ff819656e6b21266a72a134f1cc2d239
- es-MX.xpi: 25833c3720d27c0a06195eb98c9a4a101b4da984
- et.xpi: 804c35125baeb234a8b0cfa7e00657cdd1636622
- eu.xpi: 513925122e3b47950db9ced9941be15afe32f99a
- fa.xpi: f7cc6b74d5c80b88b5dba6d8e2cafe2dad37fcd7
- fi.xpi: 7f3f94f2218e3ae8541d9de0a4e520b95438c91f
- firefox-68.0.2.source.tar.xz: 1e532075b573148a88296aa56ab149ddbd786882
- fr.xpi: 1d8bfa069e21c4256abd4df7bb4d71b402493e85
- fy-NL.xpi: 54483f4ad8b550c20fd1b2b2c7ea16344278e7ca
- ga-IE.xpi: 3e640d580a0d6467ca31f896ceab85670a7a3e9e
- gd.xpi: 2817df75e3a691e6ec747d737954eac0ebb14c8f
- gl.xpi: 220fd9021c52e07e62f01fe654aff7f70255f236
- gu-IN.xpi: 9013767f032cb7d5842c977d56a5a4edafa808e0
- he.xpi: fd0316e0b11f00a509406aadd864fd9d27dec6fe
- hi-IN.xpi: f93b2c88ac62b2462b986ef8ce054d4b26167aa7
- hr.xpi: 140e0f00ae419f706e60198d46a89cbec93d0dfe
- hu.xpi: 7ca5fc0c0da160135be28e43bf776f93a7692286
- hy-AM.xpi: ed3cc3b6bdbf42f2e840793267cdcdeebda6a8d1
- id.xpi: 506a106e0f94d329e89d88817804a9709f9b3ca7
- is.xpi: 03d5e6686a96913d294d48f48c0a43d5b57c1810
- it.xpi: fd418ff2e297ad032ce6c5869451a0311877d9e2
- ja.xpi: 931afc42e14558d4fe73d5ed85e9a7b058163e06
- kk.xpi: 196a1a0c43a98f0dd5729b0a59cffc7e516c3667
- km.xpi: f91549b80dbd3b1976d60f5bed16f02d1ad763ff
- kn.xpi: 5d69cca84daad6ff98e261f9d5408984a9dc0dc4
- ko.xpi: 258bd4208e7a2ceec2553a6917d3d01bc2bf7c66
- lt.xpi: 1d0ed1995f0738de4dce0cbbd863161216b9b692
- lv.xpi: 057c05aeeeeb7e37cb7b8a3ed2b7f58ae348ccf5
- mk.xpi: c959d3de737dacc38d62a24e7b31945641ce2121
- mr.xpi: 138fe82b6b8cf298460e903118d9fcd08a747299
- nb-NO.xpi: 14da9b6e181fb81be54eab4ad79ca16e00514cd3
- nl.xpi: 5f5f27fc944862ea3d0d6b7f50afc70a3ea123b9
- nn-NO.xpi: bce3ad0a64d4675a780cffcee2cd55eac4447e4b
+ bg.xpi: 4515975d145a16df5fbc65f11cc4669a06942921
+ bn.xpi: 4388ed2d37757acdb441351f7a663e0c725345bf
+ br.xpi: c4bbf1545279643a306870bf65ed011543d57a8d
+ bs.xpi: 40432e4ce1aae1c5ee1bbf64cb6dffdc7ea372ad
+ ca.xpi: c6f1801a84467d7a6306e2614734a3231d2970d9
+ cbindgen-vendor.tar.xz: f661af3f8e6a52af8f0bc206987134e66b449fe0
+ cs.xpi: 1279ad0cf7ca1230460e808709dee2c44533ba14
+ cy.xpi: 927173c72f40ddeadb2c2faf211bcef4b18c6153
+ da.xpi: e8af171b6db84dd1f138ff5e43d759876dd1871e
+ de.xpi: a04735c40a2416260d923a89d91ae9ce095bcc47
+ el.xpi: 0bcc8133dc261285f3b4dba2056358ab61d59cd3
+ en-GB.xpi: f1d341fd9dfa7c1d057870e9d75c4e5b6915e5d9
+ eo.xpi: 668d7cad374ff88d6e555f26622200464de15982
+ es-AR.xpi: 894f3330941e5d39cedda9dd98cb67b55ecc6b15
+ es-CL.xpi: 9a4f6c319bb5b64141cff1b176edb7e492bbbc40
+ es-ES.xpi: 35ead562bf99e3c07de05624ddafdf27e455bd2b
+ es-MX.xpi: a10b54fde91e9ece04a32c990c286937709b6511
+ et.xpi: 45263cbc19c0edea66c2576934f1c64670d21eff
+ eu.xpi: 12201941707cfa71991d62a446ca545e8e9f84ab
+ fa.xpi: 2afe4eae282039194fde48506deb141f626a22a6
+ fi.xpi: 7c87ec6ae8cad29bff471b38c69adb58fac6948e
+ firefox-69.0.1.source.tar.xz: 3c693918d85e789944e6fe59fe76c34115cae906
+ fr.xpi: 3db09d68b12d29fa43fe655dc5320ba848b1646a
+ fy-NL.xpi: 46a044371ad3982f1b05b68b1fa8d920b1ac1ed9
+ ga-IE.xpi: 651c344a39185faf229a957f192ec492fe7cd8b6
+ gd.xpi: 9e41e37484e2490128895a5ceac356d8652c06e3
+ gl.xpi: 86efaf65fc0acf3fa839b08a748b112a67ba79cf
+ gu-IN.xpi: dd63026ebb52c5daaf40321abeac62a88a25aff1
+ he.xpi: 459edced013ab3654a3ff7a09277b99e3b9881c6
+ hi-IN.xpi: 8fbd14b5ec32f76788c7a002c0d9fdc06cf8e3fd
+ hr.xpi: 67d9c6c4b7bd3a52aea15e3b0d2432c259dff339
+ hu.xpi: af4354f03b239323eeffdc296d495738f8fc7005
+ hy-AM.xpi: 6376d7d8952385090fedbd2884f2e23df8e48c41
+ id.xpi: 8869c9035ba66e148f3bb0464ff37df165f75363
+ is.xpi: 4fb8061be51c134dbcf8d0a6eeda687628358b99
+ it.xpi: 005311b9b90fbe29b2831debedfc5f672e587d3e
+ ja.xpi: 5596945e0ef1e0b20a397c4cfeebc2aa186ae8ea
+ kk.xpi: ed6460210ab8aa645028945c6f1aafd28e18ae8a
+ km.xpi: 73de5e4fe797174a823148346bbc5a8f9f85eabf
+ kn.xpi: ba911b7810f772322652be374e46cb4e937d7188
+ ko.xpi: 9ccf07117ecf442faa01f455442b3cddc4c0ac22
+ lt.xpi: f0104a1d7c5915e4cad33bd64d131e3435ac32af
+ lv.xpi: 721a3f5f859244fdfa76bde92cbb9a7f52b87ede
+ mk.xpi: 2ea6368ee5c59be50411dc273176c8989a1f4b1d
+ mr.xpi: 42fd85a2b78bccaea0e538831775cacc095c1d32
+ nb-NO.xpi: c03ff672348c72849ac3cc1ce33a1fc5efcc943d
+ nl.xpi: adb72a42ec622b25943b4afa89cd6befd5461ab0
+ nn-NO.xpi: 95909f0c5c049ffb15bf7d1ff11c79a6be76ee64
or.xpi: 39e99b91bb2d0b10a7561ddcca86015d2ac7f624
- pa-IN.xpi: 88d40af6b1f59c98eeb48f8100a9900f251227bb
- pl.xpi: fe24c97954a81b59cd503e1262f6f9bab77a7856
- pt-BR.xpi: 6076380028e1f7d787dc8c9bbbee713691adde8d
- pt-PT.xpi: 6334f239fec7638e2f7b30d8d2a46a97f05c058d
- ro.xpi: f8157dc6bb66c65734aeb4ccd3ae74ce97fee9f8
- ru.xpi: d80077db3913ae6b6aa96d35bb686d00310ed22b
- si.xpi: b9649c1f7afe4722e50946f5801a76c23c7f7f5b
- sk.xpi: 94d63f6578e3db11b7b992dd37426c7897683597
- sl.xpi: 86bfcdb0973a635504f52a40ddad17443dbe3db9
- sq.xpi: cd645da2b57083dc815b53e1de08e1b3244e3b39
- sr.xpi: 50cea32818b7951bf88b328a4cdd550d845df461
- sv-SE.xpi: 0547ff8ffba0fe49cd0317e8ad1485353fc919e0
- ta.xpi: 4852562f68af4a5eec9cb6c1ea1931ec48a5d1cd
- te.xpi: d1f1977a9eae0251752b3d095c3d742eef47b8b0
- th.xpi: eb819c8bf272579f583aaf1ccd8dfc14f3483484
- tr.xpi: 632d06289fc9f6d84c56cc0fed122d73a6d9ec2f
- uk.xpi: 009779bebd96b616b0c7c5f0cf1ce020fa8487a0
- vi.xpi: 0458c8ca81ba0b62750754aad434ddf659df7304
- zh-CN.xpi: f75a6856b6cc705acf9ea14fac193eb2c7f581ef
- zh-TW.xpi: 09b05497b63e927cc77fc8c3152a1164dc9498ce
+ pa-IN.xpi: a19f652651266b0cffca820519520c10399c6708
+ pl.xpi: 6aefa2bc96563a42b8e3f50f734da40bbba6ed1a
+ pt-BR.xpi: 76ebde522546dc378f1e115731fb3a9544eefc3e
+ pt-PT.xpi: 424a7b824863084752b20e47f2aa6a5deacb8697
+ ro.xpi: 689283b5904e1b42e848f96c95110f290021a34d
+ ru.xpi: 9c6cba917e83ab143fce61ad9c82f99c36781ff9
+ si.xpi: daed18523ba8d70a5f682eb86410bc5f638eb29c
+ sk.xpi: b05de2cdad058271ce6063c5da860b2ccf0837fa
+ sl.xpi: ba76176ec1a97251590869f5a5d7ee2635003105
+ sq.xpi: 6e3f4bceda68befdedf1f99b55756004db1e63d8
+ sr.xpi: 2b09b1a87ee084ea243455815101d1c3eef3b533
+ sv-SE.xpi: 8d11ee93857b28d68d8523f8b345ee15e182dc8b
+ ta.xpi: 0d01096861f321078a31c4f5cc6b2508e9add371
+ te.xpi: 674a3e8dc4e55f2abd845cf1bbc0b49ab79f64f6
+ th.xpi: 55dcccfa74e6f4534196ed8e71ca3537f96de895
+ tr.xpi: e978a9e9e251d127dba4bf1185fe14ba73291982
+ uk.xpi: 326fbfb8ffd7b6bc9950b6ade1dfbaf6b5e75efd
+ vi.xpi: 5495e1bb520abb84d9b7b3086ad3f479f4f55fca
+ zh-CN.xpi: 78f5a321cbf5ba38e4b7a8ea8a6e1311eb5b5860
+ zh-TW.xpi: e5659cd8cfe3295b143ba79013b3f7b02c924fc4
diff --git a/firefox-68.0-kde.patch b/firefox-68.0-kde.patch
deleted file mode 100644
index c85652e..0000000
--- a/firefox-68.0-kde.patch
+++ /dev/null
@@ -1,1698 +0,0 @@
-# HG changeset patch
-# User msirringhaus@suse.de
-# Date 1559300151 -7200
-# Fri May 31 12:55:51 2019 +0200
-# Node ID 54d41b0033b8d649d842a1f862c6fed8b9874dec
-# Parent 428161c3b9599083e1b8710eda1760f1f707ab11
-How to apply this patch:
-1. Import and apply it
-2. cp browser/base/content/browser.xul browser/base/content/browser-kde.xul
-3. Find editBookmarkPanelDoneButton
-4. Replace #ifndef with #ifdef in the line above (this hanges the button order from Gnome-style to KDE-style)
-5. hg qrefresh
-
-diff -r 428161c3b959 -r 54d41b0033b8 browser/base/content/browser-kde.xul
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ b/browser/base/content/browser-kde.xul Fri May 31 12:55:51 2019 +0200
-@@ -0,0 +1,1375 @@
-+#filter substitution
-+<?xml version="1.0"?>
-+# -*- Mode: HTML -*-
-+#
-+# This Source Code Form is subject to the terms of the Mozilla Public
-+# License, v. 2.0. If a copy of the MPL was not distributed with this
-+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-+
-+<!-- The "global.css" stylesheet is imported first to allow other stylesheets to
-+ override rules using selectors with the same specificity. This applies to
-+ both "content" and "skin" packages, which bug 1385444 will unify later. -->
-+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-+
-+<!-- While these stylesheets are defined in Toolkit, they are only used in the
-+ main browser window, so we can load them here. Bug 1474241 is on file to
-+ consider moving these widgets to the "browser" folder. -->
-+<?xml-stylesheet href="chrome://global/content/tabprompts.css" type="text/css"?>
-+<?xml-stylesheet href="chrome://global/skin/tabprompts.css" type="text/css"?>
-+
-+<?xml-stylesheet href="chrome://browser/content/browser.css" type="text/css"?>
-+<?xml-stylesheet href="chrome://browser/content/tabbrowser.css" type="text/css"?>
-+<?xml-stylesheet href="chrome://browser/content/downloads/downloads.css" type="text/css"?>
-+<?xml-stylesheet href="chrome://browser/content/places/places.css" type="text/css"?>
-+<?xml-stylesheet href="chrome://browser/content/usercontext/usercontext.css" type="text/css"?>
-+<?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
-+<?xml-stylesheet href="chrome://browser/skin/controlcenter/panel.css" type="text/css"?>
-+<?xml-stylesheet href="chrome://browser/skin/customizableui/panelUI.css" type="text/css"?>
-+<?xml-stylesheet href="chrome://browser/skin/downloads/downloads.css" type="text/css"?>
-+<?xml-stylesheet href="chrome://browser/skin/searchbar.css" type="text/css"?>
-+<?xml-stylesheet href="chrome://browser/skin/places/tree-icons.css" type="text/css"?>
-+<?xml-stylesheet href="chrome://browser/skin/places/editBookmark.css" type="text/css"?>
-+
-+# All DTD information is stored in a separate file so that it can be shared by
-+# hiddenWindow.xul.
-+<!DOCTYPE window [
-+#include browser-doctype.inc
-+]>
-+
-+<window id="main-window"
-+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-+ xmlns:svg="http://www.w3.org/2000/svg"
-+ xmlns:html="http://www.w3.org/1999/xhtml"
-+ xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-+ title="&mainWindow.title;"
-+ title_normal="&mainWindow.title;"
-+#ifdef XP_MACOSX
-+ title_privatebrowsing="&mainWindow.title;&mainWindow.titlemodifiermenuseparator;&mainWindow.titlePrivateBrowsingSuffix;"
-+ titledefault="&mainWindow.title;"
-+ titlemodifier=""
-+ titlemodifier_normal=""
-+ titlemodifier_privatebrowsing="&mainWindow.titlePrivateBrowsingSuffix;"
-+#else
-+ title_privatebrowsing="&mainWindow.titlemodifier; &mainWindow.titlePrivateBrowsingSuffix;"
-+ titlemodifier="&mainWindow.titlemodifier;"
-+ titlemodifier_normal="&mainWindow.titlemodifier;"
-+ titlemodifier_privatebrowsing="&mainWindow.titlemodifier; &mainWindow.titlePrivateBrowsingSuffix;"
-+#endif
-+#ifdef XP_WIN
-+ chromemargin="0,2,2,2"
-+#else
-+ chromemargin="0,-1,-1,-1"
-+#endif
-+ tabsintitlebar="true"
-+ titlemenuseparator="&mainWindow.titlemodifiermenuseparator;"
-+ windowtype="navigator:browser"
-+ macanimationtype="document"
-+ screenX="4" screenY="4"
-+ fullscreenbutton="true"
-+ sizemode="normal"
-+ retargetdocumentfocus="urlbar"
-+ persist="screenX screenY width height sizemode"
-+#ifdef BROWSER_XHTML
-+ mozpersist=""
-+#endif
-+ >
-+
-+# All JS files which are needed by browser.xul and other top level windows to
-+# support MacOS specific features *must* go into the global-scripts.inc file so
-+# that they can be shared with macWindow.inc.xul.
-+#include global-scripts.inc
-+
-+<script>
-+ Services.scriptloader.loadSubScript("chrome://global/content/contentAreaUtils.js", this);
-+ Services.scriptloader.loadSubScript("chrome://browser/content/browser-captivePortal.js", this);
-+ Services.scriptloader.loadSubScript("chrome://browser/content/browser-contentblocking.js", this);
-+#ifdef MOZ_DATA_REPORTING
-+ Services.scriptloader.loadSubScript("chrome://browser/content/browser-data-submission-info-bar.js", this);
-+#endif
-+#ifndef MOZILLA_OFFICIAL
-+ Services.scriptloader.loadSubScript("chrome://browser/content/browser-development-helpers.js", this);
-+#endif
-+ Services.scriptloader.loadSubScript("chrome://browser/content/browser-media.js", this);
-+ Services.scriptloader.loadSubScript("chrome://browser/content/browser-pageActions.js", this);
-+ Services.scriptloader.loadSubScript("chrome://browser/content/browser-plugins.js", this);
-+ Services.scriptloader.loadSubScript("chrome://browser/content/browser-sidebar.js", this);
-+ Services.scriptloader.loadSubScript("chrome://browser/content/browser-tabsintitlebar.js", this);
-+ Services.scriptloader.loadSubScript("chrome://browser/content/tabbrowser.js", this);
-+ Services.scriptloader.loadSubScript("chrome://browser/content/search/autocomplete-popup.js", this);
-+ Services.scriptloader.loadSubScript("chrome://browser/content/search/searchbar.js", this);
-+
-+ window.onload = gBrowserInit.onLoad.bind(gBrowserInit);
-+ window.onunload = gBrowserInit.onUnload.bind(gBrowserInit);
-+ window.onclose = WindowIsClosing;
-+
-+ window.addEventListener("MozBeforeInitialXULLayout",
-+ gBrowserInit.onBeforeInitialXULLayout.bind(gBrowserInit), { once: true });
-+
-+ // The listener of DOMContentLoaded must be set on window, rather than
-+ // document, because the window can go away before the event is fired.
-+ // In that case, we don't want to initialize anything, otherwise we
-+ // may be leaking things because they will never be destroyed after.
-+ window.addEventListener("DOMContentLoaded",
-+ gBrowserInit.onDOMContentLoaded.bind(gBrowserInit), { once: true });
-+</script>
-+
-+# All sets except for popupsets (commands, keys, and stringbundles)
-+# *must* go into the browser-sets.inc file so that they can be shared with other
-+# top level windows in macWindow.inc.xul.
-+#include browser-sets.inc
-+
-+ <popupset id="mainPopupSet">
-+ <menupopup id="tabContextMenu"
-+ onpopupshowing="if (event.target == this) TabContextMenu.updateContextMenu(this);"
-+ onpopuphidden="if (event.target == this) TabContextMenu.contextTab = null;">
-+ <menuitem id="context_reloadTab" data-lazy-l10n-id="reload-tab"
-+ oncommand="gBrowser.reloadTab(TabContextMenu.contextTab);"/>
-+ <menuitem id="context_reloadSelectedTabs" data-lazy-l10n-id="reload-tabs" hidden="true"
-+ oncommand="gBrowser.reloadMultiSelectedTabs();"/>
-+ <menuitem id="context_toggleMuteTab" oncommand="TabContextMenu.contextTab.toggleMuteAudio();"/>
-+ <menuitem id="context_toggleMuteSelectedTabs" hidden="true"
-+ oncommand="gBrowser.toggleMuteAudioOnMultiSelectedTabs(TabContextMenu.contextTab);"/>
-+ <menuitem id="context_pinTab" data-lazy-l10n-id="pin-tab"
-+ oncommand="gBrowser.pinTab(TabContextMenu.contextTab);"/>
-+ <menuitem id="context_unpinTab" data-lazy-l10n-id="unpin-tab" hidden="true"
-+ oncommand="gBrowser.unpinTab(TabContextMenu.contextTab);"/>
-+ <menuitem id="context_pinSelectedTabs" data-lazy-l10n-id="pin-selected-tabs" hidden="true"
-+ oncommand="gBrowser.pinMultiSelectedTabs();"/>
-+ <menuitem id="context_unpinSelectedTabs" data-lazy-l10n-id="unpin-selected-tabs" hidden="true"
-+ oncommand="gBrowser.unpinMultiSelectedTabs();"/>
-+ <menuitem id="context_duplicateTab" data-lazy-l10n-id="duplicate-tab"
-+ oncommand="duplicateTabIn(TabContextMenu.contextTab, 'tab');"/>
-+ <menuitem id="context_duplicateTabs" data-lazy-l10n-id="duplicate-tabs"
-+ oncommand="TabContextMenu.duplicateSelectedTabs();"/>
-+ <menuseparator/>
-+ <menuitem id="context_selectAllTabs" data-lazy-l10n-id="select-all-tabs"
-+ oncommand="gBrowser.selectAllTabs();"/>
-+ <menuitem id="context_bookmarkSelectedTabs"
-+ hidden="true"
-+ data-lazy-l10n-id="bookmark-selected-tabs"
-+ oncommand="PlacesCommandHook.bookmarkPages(PlacesCommandHook.uniqueSelectedPages);"/>
-+ <menuitem id="context_bookmarkTab"
-+ data-lazy-l10n-id="bookmark-tab"
-+ oncommand="PlacesCommandHook.bookmarkPages(PlacesCommandHook.getUniquePages([TabContextMenu.contextTab]));"/>
-+ <menu id="context_reopenInContainer"
-+ data-lazy-l10n-id="reopen-in-container"
-+ hidden="true">
-+ <menupopup oncommand="TabContextMenu.reopenInContainer(event);"
-+ onpopupshowing="TabContextMenu.createReopenInContainerMenu(event);"/>
-+ </menu>
-+ <menu id="context_moveTabOptions">
-+ <menupopup id="moveTabOptionsMenu">
-+ <menuitem id="context_moveToStart"
-+ data-lazy-l10n-id="move-to-start"
-+ tbattr="tabbrowser-multiple"
-+ oncommand="gBrowser.moveTabsToStart(TabContextMenu.contextTab);"/>
-+ <menuitem id="context_moveToEnd"
-+ data-lazy-l10n-id="move-to-end"
-+ tbattr="tabbrowser-multiple"
-+ oncommand="gBrowser.moveTabsToEnd(TabContextMenu.contextTab);"/>
-+ <menuitem id="context_openTabInWindow" data-lazy-l10n-id="move-to-new-window"
-+ tbattr="tabbrowser-multiple"
-+ oncommand="gBrowser.replaceTabsWithWindow(TabContextMenu.contextTab);"/>
-+ </menupopup>
-+ </menu>
-+ <menu id="context_sendTabToDevice"
-+ class="sync-ui-item">
-+ <menupopup id="context_sendTabToDevicePopupMenu"
-+ onpopupshowing="gSync.populateSendTabToDevicesMenu(event.target, TabContextMenu.contextTab.linkedBrowser.currentURI.spec, TabContextMenu.contextTab.linkedBrowser.contentTitle, TabContextMenu.contextTab.multiselected);"/>
-+ </menu>
-+ <menuseparator/>
-+ <menuitem id="context_closeTabsToTheEnd" data-lazy-l10n-id="close-tabs-to-the-end"
-+ oncommand="gBrowser.removeTabsToTheEndFrom(TabContextMenu.contextTab, {animate: true});"/>
-+ <menuitem id="context_closeOtherTabs" data-lazy-l10n-id="close-other-tabs"
-+ oncommand="gBrowser.removeAllTabsBut(TabContextMenu.contextTab);"/>
-+ <menuitem id="context_undoCloseTab"
-+ data-lazy-l10n-id="undo-close-tab"
-+ observes="History:UndoCloseTab"/>
-+ <menuitem id="context_closeTab" data-lazy-l10n-id="close-tab"
-+ oncommand="gBrowser.removeTab(TabContextMenu.contextTab, { animate: true });"/>
-+ <menuitem id="context_closeSelectedTabs" data-lazy-l10n-id="close-tabs"
-+ hidden="true"
-+ oncommand="gBrowser.removeMultiSelectedTabs();"/>
-+ </menupopup>
-+
-+ <!-- bug 415444/582485: event.stopPropagation is here for the cloned version
-+ of this menupopup -->
-+ <menupopup id="backForwardMenu"
-+ onpopupshowing="return FillHistoryMenu(event.target);"
-+ oncommand="gotoHistoryIndex(event); event.stopPropagation();"
-+ onclick="checkForMiddleClick(this, event);"/>
-+ <tooltip id="aHTMLTooltip" page="true"/>
-+ <tooltip id="remoteBrowserTooltip"/>
-+
-+ <!-- for search and content formfill/pw manager -->
-+
-+ <panel is="autocomplete-richlistbox-popup"
-+ type="autocomplete-richlistbox"
-+ id="PopupAutoComplete"
-+ role="group"
-+ noautofocus="true"
-+ hidden="true"
-+ overflowpadding="4"
-+ norolluponanchor="true"
-+ nomaxresults="true" />
-+
-+ <!-- for search with one-off buttons -->
-+ <panel is="search-autocomplete-richlistbox-popup"
-+ 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"
-+ aria-labelledby="editBookmarkPanelTitle">
-+ <box class="panel-header">
-+ <label id="editBookmarkPanelTitle"/>
-+ <toolbarbutton id="editBookmarkPanelInfoButton" oncommand="StarUI.toggleRecommendation();" >
-+ <image/>
-+ </toolbarbutton>
-+ </box>
-+ <html:div id="editBookmarkPanelInfoArea">
-+ <html:div id="editBookmarkPanelRecommendation"></html:div>
-+ <html:div id="editBookmarkPanelFaviconContainer">
-+ <html:img id="editBookmarkPanelFavicon"/>
-+ </html:div>
-+ <html:div id="editBookmarkPanelImage"></html:div>
-+ </html:div>
-+#include ../../components/places/content/editBookmarkPanel.inc.xul
-+ <vbox id="editBookmarkPanelBottomContent"
-+ flex="1">
-+ <checkbox id="editBookmarkPanel_showForNewBookmarks"
-+ label="&editBookmark.showForNewBookmarks.label;"
-+ accesskey="&editBookmark.showForNewBookmarks.accesskey;"
-+ oncommand="StarUI.onShowForNewBookmarksCheckboxCommand();"/>
-+ </vbox>
-+ <hbox id="editBookmarkPanelBottomButtons"
-+ class="panel-footer"
-+ style="min-width: &editBookmark.panel.width;;">
-+#ifdef XP_UNIX
-+ <button id="editBookmarkPanelDoneButton"
-+ class="editBookmarkPanelBottomButton"
-+ label="&editBookmark.done.label;"
-+ default="true"
-+ oncommand="StarUI.panel.hidePopup();"/>
-+ <button id="editBookmarkPanelRemoveButton"
-+ class="editBookmarkPanelBottomButton"
-+ oncommand="StarUI.removeBookmarkButtonCommand();"/>
-+#else
-+ <button id="editBookmarkPanelRemoveButton"
-+ class="editBookmarkPanelBottomButton"
-+ oncommand="StarUI.removeBookmarkButtonCommand();"/>
-+ <button id="editBookmarkPanelDoneButton"
-+ class="editBookmarkPanelBottomButton"
-+ label="&editBookmark.done.label;"
-+ default="true"
-+ oncommand="StarUI.panel.hidePopup();"/>
-+#endif
-+ </hbox>
-+ </panel>
-+
-+ <!-- UI tour experience -->
-+ <panel id="UITourTooltip"
-+ type="arrow"
-+ hidden="true"
-+ noautofocus="true"
-+ noautohide="true"
-+ align="start"
-+ orient="vertical"
-+ role="alert">
-+ <vbox>
-+ <hbox id="UITourTooltipBody">
-+ <image id="UITourTooltipIcon"/>
-+ <vbox flex="1">
-+ <hbox id="UITourTooltipTitleContainer">
-+ <label id="UITourTooltipTitle" flex="1"/>
-+ <toolbarbutton id="UITourTooltipClose" class="close-icon"
-+ tooltiptext="&uiTour.infoPanel.close;"/>
-+ </hbox>
-+ <description id="UITourTooltipDescription" flex="1"/>
-+ </vbox>
-+ </hbox>
-+ <hbox id="UITourTooltipButtons" flex="1" align="center"/>
-+ </vbox>
-+ </panel>
-+ <!-- type="default" forces frames to be created so that the panel's size can be determined -->
-+ <panel id="UITourHighlightContainer"
-+ type="default"
-+ hidden="true"
-+ noautofocus="true"
-+ noautohide="true"
-+ flip="none"
-+ consumeoutsideclicks="false"
-+ mousethrough="always">
-+ <box id="UITourHighlight"></box>
-+ </panel>
-+
-+ <panel id="sidebarMenu-popup"
-+ class="cui-widget-panel"
-+ role="group"
-+ type="arrow"
-+ hidden="true"
-+ flip="slide"
-+ orient="vertical"
-+ position="bottomcenter topleft">
-+ <toolbarbutton id="sidebar-switcher-bookmarks"
-+ type="checkbox"
-+ label="&bookmarksButton.label;"
-+ class="subviewbutton subviewbutton-iconic"
-+ key="viewBookmarksSidebarKb"
-+ oncommand="SidebarUI.show('viewBookmarksSidebar');"/>
-+ <toolbarbutton id="sidebar-switcher-history"
-+ type="checkbox"
-+ label="&historyButton.label;"
-+ class="subviewbutton subviewbutton-iconic"
-+ key="key_gotoHistory"
-+ oncommand="SidebarUI.show('viewHistorySidebar');"/>
-+ <toolbarbutton id="sidebar-switcher-tabs"
-+ type="checkbox"
-+ label="&syncedTabs.sidebar.label;"
-+ class="subviewbutton subviewbutton-iconic sync-ui-item"
-+ oncommand="SidebarUI.show('viewTabsSidebar');"/>
-+ <toolbarseparator/>
-+ <!-- Extension toolbarbuttons go here. -->
-+ <toolbarseparator id="sidebar-extensions-separator"/>
-+ <toolbarbutton id="sidebar-reverse-position"
-+ class="subviewbutton"
-+ oncommand="SidebarUI.reversePosition()"/>
-+ <toolbarseparator/>
-+ <toolbarbutton label="&sidebarMenuClose.label;"
-+ class="subviewbutton"
-+ oncommand="SidebarUI.hide()"/>
-+ </panel>
-+
-+ <menupopup id="toolbar-context-menu"
-+ onpopupshowing="onViewToolbarsPopupShowing(event, document.getElementById('viewToolbarsMenuSeparator')); ToolbarContextMenu.updateDownloadsAutoHide(this); ToolbarContextMenu.updateExtension(this)">
-+ <menuitem oncommand="ToolbarContextMenu.openAboutAddonsForContextAction(this.parentElement)"
-+ accesskey="&customizeMenu.manageExtension.accesskey;"
-+ label="&customizeMenu.manageExtension.label;"
-+ contexttype="toolbaritem"
-+ class="customize-context-manageExtension"/>
-+ <menuitem oncommand="ToolbarContextMenu.removeExtensionForContextAction(this.parentElement)"
-+ accesskey="&customizeMenu.removeExtension.accesskey;"
-+ label="&customizeMenu.removeExtension.label;"
-+ contexttype="toolbaritem"
-+ class="customize-context-removeExtension"/>
-+ <menuitem oncommand="ToolbarContextMenu.reportExtensionForContextAction(this.parentElement, 'toolbar_context_menu')"
-+ accesskey="&customizeMenu.reportExtension.accesskey;"
-+ label="&customizeMenu.reportExtension.label;"
-+ contexttype="toolbaritem"
-+ class="customize-context-reportExtension"/>
-+ <menuseparator/>
-+ <menuitem oncommand="gCustomizeMode.addToPanel(document.popupNode)"
-+ accesskey="&customizeMenu.pinToOverflowMenu.accesskey;"
-+ label="&customizeMenu.pinToOverflowMenu.label;"
-+ contexttype="toolbaritem"
-+ class="customize-context-moveToPanel"/>
-+ <menuitem id="toolbar-context-autohide-downloads-button"
-+ oncommand="ToolbarContextMenu.onDownloadsAutoHideChange(event);"
-+ type="checkbox"
-+ accesskey="&customizeMenu.autoHideDownloadsButton.accesskey;"
-+ label="&customizeMenu.autoHideDownloadsButton.label;"
-+ contexttype="toolbaritem"/>
-+ <menuitem oncommand="gCustomizeMode.removeFromArea(document.popupNode)"
-+ accesskey="&customizeMenu.removeFromToolbar.accesskey;"
-+ label="&customizeMenu.removeFromToolbar.label;"
-+ contexttype="toolbaritem"
-+ class="customize-context-removeFromToolbar"/>
-+ <menuitem id="toolbar-context-reloadSelectedTab"
-+ contexttype="tabbar"
-+ oncommand="gBrowser.reloadMultiSelectedTabs();"
-+ data-lazy-l10n-id="toolbar-context-menu-reload-selected-tab"/>
-+ <menuitem id="toolbar-context-reloadSelectedTabs"
-+ contexttype="tabbar"
-+ oncommand="gBrowser.reloadMultiSelectedTabs();"
-+ data-lazy-l10n-id="toolbar-context-menu-reload-selected-tabs"/>
-+ <menuitem id="toolbar-context-bookmarkSelectedTab"
-+ contexttype="tabbar"
-+ oncommand="PlacesCommandHook.bookmarkPages(PlacesCommandHook.uniqueSelectedPages);"
-+ data-lazy-l10n-id="toolbar-context-menu-bookmark-selected-tab"/>
-+ <menuitem id="toolbar-context-bookmarkSelectedTabs"
-+ contexttype="tabbar"
-+ oncommand="PlacesCommandHook.bookmarkPages(PlacesCommandHook.uniqueSelectedPages);"
-+ data-lazy-l10n-id="toolbar-context-menu-bookmark-selected-tabs"/>
-+ <menuitem id="toolbar-context-selectAllTabs"
-+ contexttype="tabbar"
-+ oncommand="gBrowser.selectAllTabs();"
-+ data-lazy-l10n-id="toolbar-context-menu-select-all-tabs"/>
-+ <menuitem id="toolbar-context-undoCloseTab"
-+ contexttype="tabbar"
-+ data-lazy-l10n-id="toolbar-context-menu-undo-close-tab"
-+ observes="History:UndoCloseTab"/>
-+ <menuseparator/>
-+ <menuseparator id="viewToolbarsMenuSeparator"/>
-+ <!-- XXXgijs: we're using oncommand handler here to avoid the event being
-+ redirected to the command element, thus preventing
-+ listeners on the menupopup or further up the tree from
-+ seeing the command event pass by. The observes attribute is
-+ here so that the menuitem is still disabled and re-enabled
-+ correctly. -->
-+ <menuitem oncommand="gCustomizeMode.enter()"
-+ observes="cmd_CustomizeToolbars"
-+ class="viewCustomizeToolbar"
-+ label="&viewCustomizeToolbar.label;"
-+ accesskey="&viewCustomizeToolbar.accesskey;"/>
-+ </menupopup>
-+
-+ <menupopup id="blockedPopupOptions"
-+ onpopupshowing="gPopupBlockerObserver.fillPopupList(event);"
-+ onpopuphiding="gPopupBlockerObserver.onPopupHiding(event);">
-+ <menuitem id="blockedPopupAllowSite"
-+ accesskey="&allowPopups.accesskey;"
-+ oncommand="gPopupBlockerObserver.toggleAllowPopupsForSite(event);"/>
-+ <menuitem
-+#ifdef XP_WIN
-+ label="&editPopupSettings.label;"
-+#else
-+ label="&editPopupSettingsUnix.label;"
-+#endif
-+ accesskey="&editPopupSettings.accesskey;"
-+ oncommand="gPopupBlockerObserver.editPopupSettings();"/>
-+ <menuitem id="blockedPopupDontShowMessage"
-+ accesskey="&dontShowMessage.accesskey;"
-+ type="checkbox"
-+ oncommand="gPopupBlockerObserver.dontShowMessage();"/>
-+ <menuseparator id="blockedPopupsSeparator"/>
-+ </menupopup>
-+
-+ <menupopup id="autohide-context"
-+ onpopupshowing="FullScreen.getAutohide(this.firstChild);">
-+ <menuitem type="checkbox" label="&fullScreenAutohide.label;"
-+ accesskey="&fullScreenAutohide.accesskey;"
-+ oncommand="FullScreen.setAutohide();"/>
-+ <menuseparator/>
-+ <menuitem label="&fullScreenExit.label;"
-+ accesskey="&fullScreenExit.accesskey;"
-+ oncommand="BrowserFullScreen();"/>
-+ </menupopup>
-+
-+ <menupopup id="contentAreaContextMenu" pagemenu="#page-menu-separator"
-+ onpopupshowing="if (event.target != this)
-+ return true;
-+ gContextMenu = new nsContextMenu(this, event.shiftKey);
-+ if (gContextMenu.shouldDisplay)
-+ updateEditUIVisibility();
-+ return gContextMenu.shouldDisplay;"
-+ onpopuphiding="if (event.target != this)
-+ return;
-+ gContextMenu.hiding();
-+ gContextMenu = null;
-+ updateEditUIVisibility();">
-+#include browser-context.inc
-+ </menupopup>
-+
-+#include ../../components/places/content/placesContextMenu.inc.xul
-+
-+ <panel id="ctrlTab-panel" hidden="true" norestorefocus="true" level="top">
-+ <hbox id="ctrlTab-previews"/>
-+ <hbox id="ctrlTab-showAll-container" pack="center"/>
-+ </panel>
-+
-+ <panel id="pageActionPanel"
-+ class="cui-widget-panel"
-+ role="group"
-+ type="arrow"
-+ hidden="true"
-+ flip="slide"
-+ photon="true"
-+ position="bottomcenter topright"
-+ tabspecific="true"
-+ noautofocus="true"
-+ pinTab-title="&pinTab.label;"
-+ unpinTab-title="&unpinTab.label;"
-+ pocket-title="&saveToPocketCmd.label;"
-+ copyURL-title="&pageAction.copyLink.label;"
-+ emailLink-title="&emailPageCmd.label;"
-+ sendToDevice-notReadyTitle="&sendToDevice.syncNotReady.label;"
-+ shareURL-title="&pageAction.shareUrl.label;"
-+ shareMore-label="&pageAction.shareMore.label;">
-+ <panelmultiview id="pageActionPanelMultiView"
-+ mainViewId="pageActionPanelMainView"
-+ viewCacheId="appMenu-viewCache">
-+ <panelview id="pageActionPanelMainView"
-+ context="pageActionContextMenu"
-+ class="PanelUI-subView">
-+ <vbox class="panel-subview-body"/>
-+ </panelview>
-+ </panelmultiview>
-+ </panel>
-+
-+ <panel id="confirmation-hint"
-+ role="alert"
-+ type="arrow"
-+ hidden="true"
-+ flip="slide"
-+ position="bottomcenter topright"
-+ tabspecific="true"
-+ noautofocus="true">
-+ <hbox id="confirmation-hint-checkmark-animation-container">
-+ <image id="confirmation-hint-checkmark-image"/>
-+ </hbox>
-+ <vbox id="confirmation-hint-message-container">
-+ <label id="confirmation-hint-message"/>
-+ <label id="confirmation-hint-description"/>
-+ </vbox>
-+ </panel>
-+
-+ <menupopup id="pageActionContextMenu"
-+ onpopupshowing="BrowserPageActions.onContextMenuShowing(event, this);">
-+ <menuitem class="pageActionContextMenuItem builtInUnpinned"
-+ label="&pageAction.addToUrlbar.label;"
-+ oncommand="BrowserPageActions.togglePinningForContextAction();"/>
-+ <menuitem class="pageActionContextMenuItem builtInPinned"
-+ label="&pageAction.removeFromUrlbar.label;"
-+ oncommand="BrowserPageActions.togglePinningForContextAction();"/>
-+ <menuitem class="pageActionContextMenuItem extensionUnpinned"
-+ label="&pageAction.addToUrlbar.label;"
-+ oncommand="BrowserPageActions.togglePinningForContextAction();"/>
-+ <menuitem class="pageActionContextMenuItem extensionPinned"
-+ label="&pageAction.removeFromUrlbar.label;"
-+ oncommand="BrowserPageActions.togglePinningForContextAction();"/>
-+ <menuseparator class="pageActionContextMenuItem extensionPinned extensionUnpinned"/>
-+ <menuitem class="pageActionContextMenuItem extensionPinned extensionUnpinned"
-+ label="&pageAction.manageExtension.label;"
-+ oncommand="BrowserPageActions.openAboutAddonsForContextAction();"/>
-+ </menupopup>
-+
-+#include ../../components/places/content/bookmarksHistoryTooltip.inc.xul
-+
-+ <tooltip id="tabbrowser-tab-tooltip" onpopupshowing="gBrowser.createTooltip(event);"/>
-+
-+ <tooltip id="back-button-tooltip">
-+ <description class="tooltip-label" value="&backButton.tooltip;"/>
-+#ifdef XP_MACOSX
-+ <description class="tooltip-label" value="&backForwardButtonMenuMac.tooltip;"/>
-+#else
-+ <description class="tooltip-label" value="&backForwardButtonMenu.tooltip;"/>
-+#endif
-+ </tooltip>
-+
-+ <tooltip id="forward-button-tooltip">
-+ <description class="tooltip-label" value="&forwardButton.tooltip;"/>
-+#ifdef XP_MACOSX
-+ <description class="tooltip-label" value="&backForwardButtonMenuMac.tooltip;"/>
-+#else
-+ <description class="tooltip-label" value="&backForwardButtonMenu.tooltip;"/>
-+#endif
-+ </tooltip>
-+
-+#include popup-notifications.inc
-+
-+#include ../../components/customizableui/content/panelUI.inc.xul
-+#include ../../components/controlcenter/content/identityPanel.inc.xul
-+#include ../../components/controlcenter/content/protectionsPanel.inc.xul
-+#include ../../components/downloads/content/downloadsPanel.inc.xul
-+#include browser-allTabsMenu.inc.xul
-+
-+ <hbox id="downloads-animation-container" mousethrough="always">
-+ <vbox id="downloads-notification-anchor" hidden="true">
-+ <vbox id="downloads-indicator-notification"/>
-+ </vbox>
-+ </hbox>
-+
-+ <tooltip id="dynamic-shortcut-tooltip"
-+ onpopupshowing="UpdateDynamicShortcutTooltipText(this);"/>
-+
-+ <menupopup id="SyncedTabsSidebarContext">
-+ <menuitem data-lazy-l10n-id="synced-tabs-context-open"
-+ id="syncedTabsOpenSelected" where="current"/>
-+ <menuitem data-lazy-l10n-id="synced-tabs-context-open-in-new-tab"
-+ id="syncedTabsOpenSelectedInTab" where="tab"/>
-+ <menuitem data-lazy-l10n-id="synced-tabs-context-open-in-new-window"
-+ id="syncedTabsOpenSelectedInWindow" where="window"/>
-+ <menuitem data-lazy-l10n-id="synced-tabs-context-open-in-new-private-window"
-+ id="syncedTabsOpenSelectedInPrivateWindow" where="window" private="true"/>
-+ <menuseparator/>
-+ <menuitem data-lazy-l10n-id="synced-tabs-context-bookmark-single-tab"
-+ id="syncedTabsBookmarkSelected"/>
-+ <menuitem data-lazy-l10n-id="synced-tabs-context-copy"
-+ id="syncedTabsCopySelected"/>
-+ <menuseparator/>
-+ <menuitem data-lazy-l10n-id="synced-tabs-context-open-all-in-tabs"
-+ id="syncedTabsOpenAllInTabs"/>
-+ <menuitem data-lazy-l10n-id="synced-tabs-context-manage-devices"
-+ id="syncedTabsManageDevices"
-+ oncommand="gSync.openDevicesManagementPage('syncedtabs-sidebar');"/>
-+ <menuitem label="&syncSyncNowItem.label;"
-+ accesskey="&syncSyncNowItem.accesskey;"
-+ id="syncedTabsRefresh"/>
-+ </menupopup>
-+ <menupopup id="SyncedTabsSidebarTabsFilterContext"
-+ class="textbox-contextmenu">
-+ <menuitem label="&undoCmd.label;"
-+ accesskey="&undoCmd.accesskey;"
-+ cmd="cmd_undo"/>
-+ <menuseparator/>
-+ <menuitem label="&cutCmd.label;"
-+ accesskey="&cutCmd.accesskey;"
-+ cmd="cmd_cut"/>
-+ <menuitem label="©Cmd.label;"
-+ accesskey="©Cmd.accesskey;"
-+ cmd="cmd_copy"/>
-+ <menuitem label="&pasteCmd.label;"
-+ accesskey="&pasteCmd.accesskey;"
-+ cmd="cmd_paste"/>
-+ <menuitem label="&deleteCmd.label;"
-+ accesskey="&deleteCmd.accesskey;"
-+ cmd="cmd_delete"/>
-+ <menuseparator/>
-+ <menuitem label="&selectAllCmd.label;"
-+ accesskey="&selectAllCmd.accesskey;"
-+ cmd="cmd_selectAll"/>
-+ <menuseparator/>
-+ <menuitem label="&syncSyncNowItem.label;"
-+ accesskey="&syncSyncNowItem.accesskey;"
-+ id="syncedTabsRefreshFilter"/>
-+ </menupopup>
-+
-+ <hbox id="statuspanel" inactive="true" renderroot="content">
-+ <hbox id="statuspanel-inner">
-+ <label id="statuspanel-label"
-+ role="status"
-+ aria-live="off"
-+ flex="1"
-+ crop="end"/>
-+ </hbox>
-+ </hbox>
-+ </popupset>
-+ <box id="appMenu-viewCache" hidden="true"/>
-+
-+ <toolbox id="navigator-toolbox">
-+
-+ <vbox id="titlebar">
-+ <!-- Menu -->
-+ <toolbar type="menubar" id="toolbar-menubar"
-+ class="browser-toolbar chromeclass-menubar titlebar-color"
-+ customizable="true"
-+ mode="icons"
-+#ifdef MENUBAR_CAN_AUTOHIDE
-+ toolbarname="&menubarCmd.label;"
-+ accesskey="&menubarCmd.accesskey;"
-+ autohide="true"
-+#endif
-+ context="toolbar-context-menu">
-+ <toolbaritem id="menubar-items" align="center">
-+# The entire main menubar is placed into browser-menubar.inc, so that it can be
-+# shared with other top level windows in macWindow.inc.xul.
-+#include browser-menubar.inc
-+ </toolbaritem>
-+ <spacer flex="1" skipintoolbarset="true" ordinal="1000"/>
-+#include titlebar-items.inc.xul
-+ </toolbar>
-+
-+ <toolbar id="TabsToolbar"
-+ class="browser-toolbar titlebar-color"
-+ fullscreentoolbar="true"
-+ customizable="true"
-+ customizationtarget="TabsToolbar-customization-target"
-+ mode="icons"
-+ aria-label="&tabsToolbar.label;"
-+ context="toolbar-context-menu"
-+ flex="1">
-+
-+ <hbox class="titlebar-spacer" type="pre-tabs"/>
-+
-+ <hbox flex="1" align="end" class="toolbar-items">
-+ <hbox id="TabsToolbar-customization-target" flex="1">
-+ <tabs id="tabbrowser-tabs"
-+ flex="1"
-+ setfocus="false"
-+ tooltip="tabbrowser-tab-tooltip"
-+ stopwatchid="FX_TAB_CLICK_MS">
-+ <tab class="tabbrowser-tab" selected="true" visuallyselected="true" fadein="true"/>
-+ </tabs>
-+
-+ <toolbarbutton id="new-tab-button"
-+ class="toolbarbutton-1 chromeclass-toolbar-additional"
-+ label="&tabCmd.label;"
-+ command="cmd_newNavigatorTab"
-+ onclick="checkForMiddleClick(this, event);"
-+ tooltip="dynamic-shortcut-tooltip"
-+ ondrop="newTabButtonObserver.onDrop(event)"
-+ ondragover="newTabButtonObserver.onDragOver(event)"
-+ ondragenter="newTabButtonObserver.onDragOver(event)"
-+ ondragexit="newTabButtonObserver.onDragExit(event)"
-+ cui-areatype="toolbar"
-+ removable="true"/>
-+
-+ <toolbarbutton id="alltabs-button"
-+ class="toolbarbutton-1 chromeclass-toolbar-additional tabs-alltabs-button badged-button"
-+ oncommand="gTabsPanel.showAllTabsPanel();"
-+ label="&listAllTabs.label;"
-+ tooltiptext="&listAllTabs.label;"
-+ removable="false"/>
-+ </hbox>
-+ </hbox>
-+
-+ <hbox class="titlebar-spacer" type="post-tabs"/>
-+
-+#ifndef XP_MACOSX
-+ <button class="accessibility-indicator" tooltiptext="&accessibilityIndicator.tooltip;"
-+ aria-live="polite"/>
-+ <hbox class="private-browsing-indicator"/>
-+#endif
-+
-+#include titlebar-items.inc.xul
-+
-+#ifdef XP_MACOSX
-+ <!-- OS X does not natively support RTL for its titlebar items, so we prevent this secondary
-+ buttonbox from reversing order in RTL by forcing an LTR direction. -->
-+ <hbox id="titlebar-secondary-buttonbox" dir="ltr">
-+ <button class="accessibility-indicator" tooltiptext="&accessibilityIndicator.tooltip;" aria-live="polite"/>
-+ <hbox class="private-browsing-indicator"/>
-+ <hbox id="titlebar-fullscreen-button"/>
-+ </hbox>
-+#endif
-+ </toolbar>
-+
-+ </vbox>
-+
-+ <toolbar id="nav-bar"
-+ class="browser-toolbar"
-+ aria-label="&navbarCmd.label;"
-+ fullscreentoolbar="true" mode="icons" customizable="true"
-+ customizationtarget="nav-bar-customization-target"
-+ overflowable="true"
-+ overflowbutton="nav-bar-overflow-button"
-+ overflowtarget="widget-overflow-list"
-+ overflowpanel="widget-overflow"
-+ context="toolbar-context-menu">
-+
-+ <toolbartabstop/>
-+ <hbox id="nav-bar-customization-target" flex="1">
-+ <toolbarbutton id="back-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
-+ label="&backCmd.label;"
-+ removable="false" overflows="false"
-+ keepbroadcastattributeswhencustomizing="true"
-+ command="Browser:BackOrBackDuplicate"
-+ onclick="checkForMiddleClick(this, event);"
-+ tooltip="back-button-tooltip"
-+ context="backForwardMenu"/>
-+ <toolbarbutton id="forward-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
-+ label="&forwardCmd.label;"
-+ removable="false" overflows="false"
-+ keepbroadcastattributeswhencustomizing="true"
-+ command="Browser:ForwardOrForwardDuplicate"
-+ onclick="checkForMiddleClick(this, event);"
-+ tooltip="forward-button-tooltip"
-+ context="backForwardMenu"/>
-+ <toolbaritem id="stop-reload-button" class="chromeclass-toolbar-additional"
-+ title="&reloadCmd.label;"
-+ removable="true" overflows="false">
-+ <toolbarbutton id="reload-button" class="toolbarbutton-1"
-+ label="&reloadCmd.label;"
-+ command="Browser:ReloadOrDuplicate"
-+ onclick="checkForMiddleClick(this, event);"
-+ tooltip="dynamic-shortcut-tooltip">
-+ <box class="toolbarbutton-animatable-box">
-+ <image class="toolbarbutton-animatable-image"/>
-+ </box>
-+ </toolbarbutton>
-+ <toolbarbutton id="stop-button" class="toolbarbutton-1"
-+ label="&stopCmd.label;"
-+ command="Browser:Stop"
-+ tooltip="dynamic-shortcut-tooltip">
-+ <box class="toolbarbutton-animatable-box">
-+ <image class="toolbarbutton-animatable-image"/>
-+ </box>
-+ </toolbarbutton>
-+ </toolbaritem>
-+ <toolbarbutton id="home-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
-+ removable="true"
-+ label="&homeButton.label;"
-+ ondragover="homeButtonObserver.onDragOver(event)"
-+ ondragenter="homeButtonObserver.onDragOver(event)"
-+ ondrop="homeButtonObserver.onDrop(event)"
-+ ondragexit="homeButtonObserver.onDragExit(event)"
-+ key="goHome"
-+ onclick="BrowserHome(event);"
-+ cui-areatype="toolbar"
-+ tooltiptext="&homeButton.defaultPage.tooltip;"/>
-+ <toolbarspring cui-areatype="toolbar" class="chromeclass-toolbar-additional"/>
-+ <toolbaritem id="urlbar-container" flex="400" persist="width"
-+ removable="false"
-+ class="chromeclass-location" overflows="false">
-+ <toolbartabstop/>
-+ <textbox id="urlbar" flex="1"
-+ placeholder="&urlbar.placeholder2;"
-+ defaultPlaceholder="&urlbar.placeholder2;"
-+ focused="true"
-+ pageproxystate="invalid">
-+ <!-- Use onclick instead of normal popup= syntax since the popup
-+ code fires onmousedown, and hence eats our favicon drag events. -->
-+ <box id="identity-box" role="button"
-+ align="center"
-+ aria-label="&urlbar.viewSiteInfo.label;"
-+ onclick="gIdentityHandler.handleIdentityButtonEvent(event);"
-+ onkeypress="gIdentityHandler.handleIdentityButtonEvent(event);"
-+ ondragstart="gIdentityHandler.onDragStart(event);">
-+ <image id="identity-icon"
-+ consumeanchor="identity-box"
-+ onclick="PageProxyClickHandler(event);"/>
-+ <image id="sharing-icon" mousethrough="always"/>
-+ <box id="tracking-protection-icon-box" animationsenabled="true">
-+ <image id="tracking-protection-icon"/>
-+ <box id="tracking-protection-icon-animatable-box" flex="1">
-+ <image id="tracking-protection-icon-animatable-image" flex="1"/>
-+ </box>
-+ </box>
-+ <box id="blocked-permissions-container" align="center">
-+ <image data-permission-id="geo" class="blocked-permission-icon geo-icon" role="button"
-+ tooltiptext="&urlbar.geolocationBlocked.tooltip;"/>
-+ <image data-permission-id="desktop-notification" class="blocked-permission-icon desktop-notification-icon" role="button"
-+ tooltiptext="&urlbar.webNotificationsBlocked.tooltip;"/>
-+ <image data-permission-id="camera" class="blocked-permission-icon camera-icon" role="button"
-+ tooltiptext="&urlbar.cameraBlocked.tooltip;"/>
-+ <image data-permission-id="microphone" class="blocked-permission-icon microphone-icon" role="button"
-+ tooltiptext="&urlbar.microphoneBlocked.tooltip;"/>
-+ <image data-permission-id="screen" class="blocked-permission-icon screen-icon" role="button"
-+ tooltiptext="&urlbar.screenBlocked.tooltip;"/>
-+ <image data-permission-id="persistent-storage" class="blocked-permission-icon persistent-storage-icon" role="button"
-+ tooltiptext="&urlbar.persistentStorageBlocked.tooltip;"/>
-+ <image data-permission-id="popup" class="blocked-permission-icon popup-icon" role="button"
-+ tooltiptext="&urlbar.popupBlocked.tooltip;"/>
-+ <image data-permission-id="autoplay-media" class="blocked-permission-icon autoplay-media-icon" role="button"
-+ tooltiptext="&urlbar.autoplayMediaBlocked.tooltip;"/>
-+ <image data-permission-id="canvas" class="blocked-permission-icon canvas-icon" role="button"
-+ tooltiptext="&urlbar.canvasBlocked.tooltip;"/>
-+ <image data-permission-id="plugin:flash" class="blocked-permission-icon plugin-icon" role="button"
-+ tooltiptext="&urlbar.flashPluginBlocked.tooltip;"/>
-+ <image data-permission-id="midi" class="blocked-permission-icon midi-icon" role="button"
-+ tooltiptext="&urlbar.midiBlocked.tooltip;"/>
-+ <image data-permission-id="install" class="blocked-permission-icon install-icon" role="button"
-+ tooltiptext="&urlbar.installBlocked.tooltip;"/>
-+ </box>
-+ <box id="notification-popup-box"
-+ hidden="true"
-+ onmouseover="document.getElementById('identity-box').classList.add('no-hover');"
-+ onmouseout="document.getElementById('identity-box').classList.remove('no-hover');"
-+ align="center">
-+ <image id="default-notification-icon" class="notification-anchor-icon" role="button"
-+ tooltiptext="&urlbar.defaultNotificationAnchor.tooltip;"/>
-+ <image id="geo-notification-icon" class="notification-anchor-icon geo-icon" role="button"
-+ tooltiptext="&urlbar.geolocationNotificationAnchor.tooltip;"/>
-+ <image id="autoplay-media-notification-icon" class="notification-anchor-icon autoplay-media-icon" role="button"
-+ tooltiptext="&urlbar.autoplayNotificationAnchor.tooltip;"/>
-+ <image id="addons-notification-icon" class="notification-anchor-icon install-icon" role="button"
-+ tooltiptext="&urlbar.addonsNotificationAnchor.tooltip;"/>
-+ <image id="canvas-notification-icon" class="notification-anchor-icon" role="button"
-+ tooltiptext="&urlbar.canvasNotificationAnchor.tooltip;"/>
-+ <image id="indexedDB-notification-icon" class="notification-anchor-icon indexedDB-icon" role="button"
-+ tooltiptext="&urlbar.indexedDBNotificationAnchor.tooltip;"/>
-+ <image id="password-notification-icon" class="notification-anchor-icon login-icon" role="button"
-+ tooltiptext="&urlbar.passwordNotificationAnchor.tooltip;"/>
-+ <stack id="plugins-notification-icon" class="notification-anchor-icon" role="button" align="center"
-+ tooltiptext="&urlbar.pluginsNotificationAnchor.tooltip;">
-+ <image class="plugin-icon" />
-+ <image id="plugin-icon-badge" />
-+ </stack>
-+ <image id="web-notifications-notification-icon" class="notification-anchor-icon desktop-notification-icon" role="button"
-+ tooltiptext="&urlbar.webNotificationAnchor.tooltip;"/>
-+ <image id="webRTC-shareDevices-notification-icon" class="notification-anchor-icon camera-icon" role="button"
-+ tooltiptext="&urlbar.webRTCShareDevicesNotificationAnchor.tooltip;"/>
-+ <image id="webRTC-shareMicrophone-notification-icon" class="notification-anchor-icon microphone-icon" role="button"
-+ tooltiptext="&urlbar.webRTCShareMicrophoneNotificationAnchor.tooltip;"/>
-+ <image id="webRTC-shareScreen-notification-icon" class="notification-anchor-icon screen-icon" role="button"
-+ tooltiptext="&urlbar.webRTCShareScreenNotificationAnchor.tooltip;"/>
-+ <image id="servicesInstall-notification-icon" class="notification-anchor-icon service-icon" role="button"
-+ tooltiptext="&urlbar.servicesNotificationAnchor.tooltip;"/>
-+ <image id="translate-notification-icon" class="notification-anchor-icon translation-icon" role="button"
-+ tooltiptext="&urlbar.translateNotificationAnchor.tooltip;"/>
-+ <image id="translated-notification-icon" class="notification-anchor-icon translation-icon in-use" role="button"
-+ tooltiptext="&urlbar.translatedNotificationAnchor.tooltip;"/>
-+ <image id="eme-notification-icon" class="notification-anchor-icon drm-icon" role="button"
-+ tooltiptext="&urlbar.emeNotificationAnchor.tooltip;"/>
-+ <image id="persistent-storage-notification-icon" class="notification-anchor-icon persistent-storage-icon" role="button"
-+ tooltiptext="&urlbar.persistentStorageNotificationAnchor.tooltip;"/>
-+ <image id="midi-notification-icon" class="notification-anchor-icon midi-icon" role="button"
-+ tooltiptext="&urlbar.midiNotificationAnchor.tooltip;"/>
-+ <image id="webauthn-notification-icon" class="notification-anchor-icon" role="button"
-+ tooltiptext="&urlbar.webAuthnAnchor.tooltip;"/>
-+ <image id="storage-access-notification-icon" class="notification-anchor-icon storage-access-icon" role="button"
-+ tooltiptext="&urlbar.storageAccessAnchor.tooltip;"/>
-+ </box>
-+ <image id="connection-icon"/>
-+ <image id="extension-icon"/>
-+ <image id="remote-control-icon"
-+ tooltiptext="&urlbar.remoteControlNotificationAnchor.tooltip;"/>
-+ <hbox id="identity-icon-labels">
-+ <label id="identity-icon-label" class="plain" flex="1"/>
-+ <label id="identity-icon-country-label" class="plain"/>
-+ </hbox>
-+ </box>
-+ <box id="urlbar-display-box" align="center">
-+ <label id="switchtab" class="urlbar-display urlbar-display-switchtab" value="&urlbar.switchToTab.label;"/>
-+ <label id="extension" class="urlbar-display urlbar-display-extension" value="&urlbar.extension.label;"/>
-+ </box>
-+ <hbox id="page-action-buttons" context="pageActionContextMenu">
-+ <toolbartabstop/>
-+ <hbox id="contextual-feature-recommendation" role="button" hidden="true">
-+ <hbox id="cfr-label-container">
-+ <label id="cfr-label"/>
-+ </hbox>
-+ <image id="cfr-button"
-+ class="urlbar-icon urlbar-page-action"
-+ role="presentation"/>
-+ </hbox>
-+ <hbox id="userContext-icons" hidden="true">
-+ <label id="userContext-label"/>
-+ <image id="userContext-indicator"/>
-+ </hbox>
-+ <image id="reader-mode-button"
-+ class="urlbar-icon urlbar-page-action"
-+ tooltip="dynamic-shortcut-tooltip"
-+ role="button"
-+ hidden="true"
-+ onclick="ReaderParent.buttonClick(event);"/>
-+ <toolbarbutton id="urlbar-zoom-button"
-+ onclick="FullZoom.reset();"
-+ tooltip="dynamic-shortcut-tooltip"
-+ hidden="true"/>
-+ <box id="pageActionSeparator" class="urlbar-page-action"/>
-+ <image id="pageActionButton"
-+ class="urlbar-icon urlbar-page-action"
-+ role="button"
-+ tooltiptext="&pageActionButton.tooltip;"
-+ onmousedown="BrowserPageActions.mainButtonClicked(event);"
-+ onkeypress="BrowserPageActions.mainButtonClicked(event);"/>
-+ <hbox id="pocket-button-box"
-+ hidden="true"
-+ class="urlbar-icon-wrapper urlbar-page-action"
-+ onclick="BrowserPageActions.doCommandForAction(PageActions.actionForID('pocket'), event, this);">
-+ <image id="pocket-button"
-+ class="urlbar-icon"
-+ tooltiptext="&pocketButton.tooltiptext;"
-+ role="button"/>
-+ <hbox id="pocket-button-animatable-box">
-+ <image id="pocket-button-animatable-image"
-+ tooltiptext="&pocketButton.tooltiptext;"
-+ role="presentation"/>
-+ </hbox>
-+ </hbox>
-+ <hbox id="star-button-box"
-+ hidden="true"
-+ class="urlbar-icon-wrapper urlbar-page-action"
-+ onclick="BrowserPageActions.doCommandForAction(PageActions.actionForID('bookmark'), event, this);">
-+ <image id="star-button"
-+ class="urlbar-icon"
-+ role="button"/>
-+ <hbox id="star-button-animatable-box">
-+ <image id="star-button-animatable-image"
-+ role="presentation"/>
-+ </hbox>
-+ </hbox>
-+ </hbox>
-+ </textbox>
-+ <toolbartabstop/>
-+ </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);"
-+ onkeypress="DownloadsIndicatorView.onCommand(event);"
-+ ondrop="DownloadsIndicatorView.onDrop(event);"
-+ ondragover="DownloadsIndicatorView.onDragOver(event);"
-+ ondragenter="DownloadsIndicatorView.onDragOver(event);"
-+ label="&downloads.label;"
-+ removable="true"
-+ overflows="false"
-+ cui-areatype="toolbar"
-+ hidden="true"
-+ tooltip="dynamic-shortcut-tooltip"
-+ indicator="true">
-+ <!-- The panel's anchor area is smaller than the outer button, but must
-+ always be visible and must not move or resize when the indicator
-+ state changes, otherwise the panel could change its position or lose
-+ its arrow unexpectedly. -->
-+ <stack id="downloads-indicator-anchor"
-+ consumeanchor="downloads-button">
-+ <box id="downloads-indicator-icon"/>
-+ <stack id="downloads-indicator-progress-outer">
-+ <box id="downloads-indicator-progress-inner"/>
-+ </stack>
-+ </stack>
-+ </toolbarbutton>
-+
-+ <toolbarbutton id="library-button" class="toolbarbutton-1 chromeclass-toolbar-additional subviewbutton-nav"
-+ removable="true"
-+ onmousedown="PanelUI.showSubView('appMenu-libraryView', this, event);"
-+ onkeypress="PanelUI.showSubView('appMenu-libraryView', this, event);"
-+ closemenu="none"
-+ cui-areatype="toolbar"
-+ tooltiptext="&libraryButton.tooltip;"
-+ label="&places.library.title;"/>
-+
-+ <toolbarbutton id="fxa-toolbar-menu-button" class="toolbarbutton-1 badged-button chromeclass-toolbar-additional subviewbutton-nav"
-+ onmousedown="gSync.toggleAccountPanel('PanelUI-fxa', event)"
-+ onkeypress="gSync.toggleAccountPanel('PanelUI-fxa', event)"
-+ consumeanchor="fxa-toolbar-menu-button"
-+ closemenu="none"
-+ label="&fxa.menu.firefoxAccount;"
-+ tooltiptext="&fxa.menu.firefoxAccount;"
-+ cui-areatype="toolbar"
-+ removable="true">
-+ <vbox>
-+ <image id="fxa-avatar-image"/>
-+ </vbox>
-+ </toolbarbutton>
-+ </hbox>
-+
-+ <toolbarbutton id="nav-bar-overflow-button"
-+ class="toolbarbutton-1 chromeclass-toolbar-additional overflow-button"
-+ skipintoolbarset="true"
-+ tooltiptext="&navbarOverflow.label;">
-+ <box class="toolbarbutton-animatable-box">
-+ <image class="toolbarbutton-animatable-image"/>
-+ </box>
-+ </toolbarbutton>
-+
-+ <toolbaritem id="PanelUI-button"
-+ removable="false">
-+ <toolbarbutton id="PanelUI-menu-button"
-+ class="toolbarbutton-1 badged-button"
-+ consumeanchor="PanelUI-button"
-+ label="&brandShortName;"
-+ tooltiptext="&appmenu.tooltip;"/>
-+ </toolbaritem>
-+
-+ <hbox id="window-controls" hidden="true" pack="end" skipintoolbarset="true"
-+ ordinal="1000">
-+ <toolbarbutton id="minimize-button"
-+ tooltiptext="&fullScreenMinimize.tooltip;"
-+ oncommand="window.minimize();"/>
-+
-+ <toolbarbutton id="restore-button"
-+#ifdef XP_MACOSX
-+# Prior to 10.7 there wasn't a native fullscreen button so we use #restore-button
-+# to exit fullscreen and want it to behave like other toolbar buttons.
-+ class="toolbarbutton-1"
-+#endif
-+ tooltiptext="&fullScreenRestore.tooltip;"
-+ oncommand="BrowserFullScreen();"/>
-+
-+ <toolbarbutton id="close-button"
-+ tooltiptext="&fullScreenClose.tooltip;"
-+ oncommand="BrowserTryToCloseWindow();"/>
-+ </hbox>
-+
-+ <box id="library-animatable-box" class="toolbarbutton-animatable-box">
-+ <image class="toolbarbutton-animatable-image"/>
-+ </box>
-+ </toolbar>
-+
-+ <toolbar id="PersonalToolbar"
-+ mode="icons"
-+ class="browser-toolbar chromeclass-directories"
-+ context="toolbar-context-menu"
-+ toolbarname="&personalbarCmd.label;" accesskey="&personalbarCmd.accesskey;"
-+ collapsed="true"
-+ customizable="true">
-+ <toolbartabstop skipintoolbarset="true"/>
-+ <toolbaritem id="personal-bookmarks"
-+ title="&bookmarksToolbarItem.label;"
-+ cui-areatype="toolbar"
-+ removable="true">
-+ <toolbarbutton id="bookmarks-toolbar-placeholder"
-+ class="bookmark-item"
-+ label="&bookmarksToolbarItem.label;"/>
-+ <toolbarbutton id="bookmarks-toolbar-button"
-+ class="toolbarbutton-1"
-+ flex="1"
-+ label="&bookmarksToolbarItem.label;"
-+ oncommand="PlacesToolbarHelper.onPlaceholderCommand();"/>
-+ <hbox flex="1"
-+ id="PlacesToolbar"
-+ context="placesContext"
-+ onmouseup="BookmarksEventHandler.onMouseUp(event);"
-+ onclick="BookmarksEventHandler.onClick(event, this._placesView);"
-+ oncommand="BookmarksEventHandler.onCommand(event);"
-+ tooltip="bhTooltip"
-+ popupsinherittooltip="true">
-+ <hbox flex="1">
-+ <hbox id="PlacesToolbarDropIndicatorHolder" align="center" collapsed="true">
-+ <image id="PlacesToolbarDropIndicator"
-+ mousethrough="always"
-+ collapsed="true"/>
-+ </hbox>
-+ <scrollbox orient="horizontal"
-+ id="PlacesToolbarItems"
-+ flex="1"/>
-+ <toolbarbutton type="menu"
-+ id="PlacesChevron"
-+ class="toolbarbutton-1"
-+ mousethrough="never"
-+ collapsed="true"
-+ tooltiptext="&bookmarksToolbarChevron.tooltip;"
-+ onpopupshowing="document.getElementById('PlacesToolbar')
-+ ._placesView._onChevronPopupShowing(event);">
-+ <menupopup id="PlacesChevronPopup"
-+ placespopup="true"
-+ tooltip="bhTooltip" popupsinherittooltip="true"
-+ context="placesContext"/>
-+ </toolbarbutton>
-+ </hbox>
-+ </hbox>
-+ </toolbaritem>
-+ </toolbar>
-+
-+ <toolbarpalette id="BrowserToolbarPalette">
-+
-+ <toolbarbutton id="print-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
-+#ifdef XP_MACOSX
-+ command="cmd_print"
-+ tooltip="dynamic-shortcut-tooltip"
-+#else
-+ command="cmd_printPreview"
-+ tooltiptext="&printButton.tooltip;"
-+#endif
-+ label="&printButton.label;"/>
-+
-+
-+ <toolbarbutton id="new-window-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
-+ label="&newNavigatorCmd.label;"
-+ command="cmd_newNavigator"
-+ tooltip="dynamic-shortcut-tooltip"
-+ ondrop="newWindowButtonObserver.onDrop(event)"
-+ ondragover="newWindowButtonObserver.onDragOver(event)"
-+ ondragenter="newWindowButtonObserver.onDragOver(event)"
-+ ondragexit="newWindowButtonObserver.onDragExit(event)"/>
-+
-+ <toolbarbutton id="fullscreen-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
-+ observes="View:FullScreen"
-+ type="checkbox"
-+ label="&fullScreenCmd.label;"
-+ tooltip="dynamic-shortcut-tooltip"/>
-+
-+ <toolbarbutton id="bookmarks-menu-button"
-+ class="toolbarbutton-1 chromeclass-toolbar-additional subviewbutton-nav"
-+ type="menu"
-+ label="&bookmarksMenuButton2.label;"
-+ tooltip="dynamic-shortcut-tooltip"
-+ anchor="dropmarker"
-+ ondragenter="PlacesMenuDNDHandler.onDragEnter(event);"
-+ ondragover="PlacesMenuDNDHandler.onDragOver(event);"
-+ ondragleave="PlacesMenuDNDHandler.onDragLeave(event);"
-+ ondrop="PlacesMenuDNDHandler.onDrop(event);"
-+ oncommand="BookmarkingUI.onCommand(event);">
-+ <menupopup id="BMB_bookmarksPopup"
-+ class="cui-widget-panel cui-widget-panelview cui-widget-panelWithFooter PanelUI-subView"
-+ placespopup="true"
-+ context="placesContext"
-+ openInTabs="children"
-+ side="top"
-+ onmouseup="BookmarksEventHandler.onMouseUp(event);"
-+ oncommand="BookmarksEventHandler.onCommand(event);"
-+ onclick="BookmarksEventHandler.onClick(event, this.parentNode._placesView);"
-+ onpopupshowing="BookmarkingUI.onPopupShowing(event);
-+ BookmarkingUI.attachPlacesView(event, this);"
-+ tooltip="bhTooltip" popupsinherittooltip="true">
-+ <menuitem id="BMB_viewBookmarksSidebar"
-+ class="menuitem-iconic subviewbutton"
-+ label-show="&viewBookmarksSidebar2.label;"
-+ label-hide="&hideBookmarksSidebar.label;"
-+ oncommand="SidebarUI.toggle('viewBookmarksSidebar');"/>
-+ <!-- NB: temporary solution for bug 985024, this should go away soon. -->
-+ <menuitem id="BMB_bookmarksShowAllTop"
-+ class="menuitem-iconic subviewbutton"
-+ label="&showAllBookmarks2.label;"
-+ command="Browser:ShowAllBookmarks"
-+ key="manBookmarkKb"/>
-+ <menuseparator/>
-+ <menu id="BMB_bookmarksToolbar"
-+ class="menu-iconic bookmark-item subviewbutton"
-+ label="&personalbarCmd.label;"
-+ container="true">
-+ <menupopup id="BMB_bookmarksToolbarPopup"
-+ placespopup="true"
-+ context="placesContext"
-+ onpopupshowing="if (!this.parentNode._placesView)
-+ new PlacesMenu(event, `place:parent=${PlacesUtils.bookmarks.toolbarGuid}`,
-+ PlacesUIUtils.getViewForNode(this.parentNode.parentNode).options);">
-+ <menuitem id="BMB_viewBookmarksToolbar"
-+ class="menuitem-iconic subviewbutton"
-+ label-show="&viewBookmarksToolbar.label;"
-+ label-hide="&hideBookmarksToolbar.label;"
-+ oncommand="BookmarkingUI.toggleBookmarksToolbar();"/>
-+ <menuseparator/>
-+ <!-- Bookmarks toolbar items -->
-+ </menupopup>
-+ </menu>
-+ <menu id="BMB_unsortedBookmarks"
-+ class="menu-iconic bookmark-item subviewbutton"
-+ label="&bookmarksMenuButton.other.label;"
-+ container="true">
-+ <menupopup id="BMB_unsortedBookmarksPopup"
-+ placespopup="true"
-+ context="placesContext"
-+ onpopupshowing="if (!this.parentNode._placesView)
-+ new PlacesMenu(event, `place:parent=${PlacesUtils.bookmarks.unfiledGuid}`,
-+ PlacesUIUtils.getViewForNode(this.parentNode.parentNode).options);"/>
-+ </menu>
-+ <menu id="BMB_mobileBookmarks"
-+ class="menu-iconic bookmark-item subviewbutton"
-+ label="&bookmarksMenuButton.mobile.label;"
-+ hidden="true"
-+ container="true">
-+ <menupopup id="BMB_mobileBookmarksPopup"
-+ placespopup="true"
-+ context="placesContext"
-+ onpopupshowing="if (!this.parentNode._placesView)
-+ new PlacesMenu(event, `place:parent=${PlacesUtils.bookmarks.mobileGuid}`,
-+ PlacesUIUtils.getViewForNode(this.parentNode.parentNode).options);"/>
-+ </menu>
-+
-+ <menuseparator/>
-+ <!-- Bookmarks menu items will go here -->
-+ <menuitem id="BMB_bookmarksShowAll"
-+ class="subviewbutton panel-subview-footer"
-+ label="&showAllBookmarks2.label;"
-+ command="Browser:ShowAllBookmarks"
-+ key="manBookmarkKb"/>
-+ </menupopup>
-+ </toolbarbutton>
-+
-+ <toolbaritem id="search-container"
-+ class="chromeclass-toolbar-additional"
-+ title="&searchItem.title;"
-+ align="center"
-+ flex="100"
-+ persist="width">
-+ <toolbartabstop/>
-+ <searchbar id="searchbar" flex="1"/>
-+ <toolbartabstop/>
-+ </toolbaritem>
-+ </toolbarpalette>
-+ </toolbox>
-+
-+ <hbox id="fullscr-toggler" hidden="true"/>
-+
-+ <deck id="content-deck" flex="1" renderroot="content">
-+ <hbox flex="1" id="browser">
-+ <vbox id="browser-border-start" hidden="true" layer="true"/>
-+ <vbox id="sidebar-box" hidden="true" class="chromeclass-extrachrome">
-+ <sidebarheader id="sidebar-header" align="center">
-+ <toolbarbutton id="sidebar-switcher-target" flex="1" class="tabbable">
-+ <image id="sidebar-icon" consumeanchor="sidebar-switcher-target"/>
-+ <label id="sidebar-title" crop="end" flex="1" control="sidebar"/>
-+ <image id="sidebar-switcher-arrow"/>
-+ </toolbarbutton>
-+ <image id="sidebar-throbber"/>
-+# To ensure the button label's intrinsic width doesn't expand the sidebar
-+# if the label is long, the button needs flex=1.
-+# To ensure the button doesn't expand unnecessarily for short labels, the
-+# spacer should significantly out-flex the button.
-+ <spacer flex="1000"/>
-+ <toolbarbutton id="sidebar-close" class="close-icon tabbable" tooltiptext="&sidebarCloseButton.tooltip;" oncommand="SidebarUI.hide();"/>
-+ </sidebarheader>
-+ <browser id="sidebar" flex="1" autoscroll="false" disablehistory="true" disablefullscreen="true"
-+ style="min-width: 14em; width: 18em; max-width: 36em;" tooltip="aHTMLTooltip"/>
-+ </vbox>
-+
-+ <splitter id="sidebar-splitter" class="chromeclass-extrachrome sidebar-splitter" hidden="true"/>
-+ <vbox id="appcontent" flex="1">
-+ <!-- gHighPriorityNotificationBox will be added here lazily. -->
-+ <tabbox id="tabbrowser-tabbox"
-+ flex="1" tabcontainer="tabbrowser-tabs">
-+ <tabpanels id="tabbrowser-tabpanels"
-+ flex="1" class="plain" selectedIndex="0"/>
-+ </tabbox>
-+ </vbox>
-+ <vbox id="browser-border-end" hidden="true" layer="true"/>
-+ </hbox>
-+ <box id="customization-container" flex="1" hidden="true"><![CDATA[
-+#include ../../components/customizableui/content/customizeMode.inc.xul
-+ ]]></box>
-+ </deck>
-+
-+ <html:div id="fullscreen-warning" class="pointerlockfswarning" hidden="true" renderroot="content">
-+ <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" renderroot="content">
-+ <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" renderroot="content">
-+ <!-- gNotificationBox will be added here lazily. -->
-+ </vbox>
-+</window>
-diff -r 428161c3b959 -r 54d41b0033b8 browser/base/jar.mn
---- a/browser/base/jar.mn Mon Jun 17 09:02:06 2019 +0200
-+++ b/browser/base/jar.mn Fri May 31 12:55:51 2019 +0200
-@@ -33,6 +33,8 @@
- #else
- * content/browser/browser.xul (content/browser.xul)
- #endif
-+* content/browser/browser-kde.xul (content/browser-kde.xul)
-+% override chrome://browser/content/browser.xul chrome://browser/content/browser-kde.xul desktop=kde
- content/browser/browser-addons.js (content/browser-addons.js)
- content/browser/browser-allTabsMenu.js (content/browser-allTabsMenu.js)
- content/browser/browser-captivePortal.js (content/browser-captivePortal.js)
-diff -r 428161c3b959 -r 54d41b0033b8 browser/components/preferences/in-content/main.js
---- a/browser/components/preferences/in-content/main.js Mon Jun 17 09:02:06 2019 +0200
-+++ b/browser/components/preferences/in-content/main.js Fri May 31 12:55:51 2019 +0200
-@@ -294,6 +294,13 @@
- }, 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();
-
-@@ -983,6 +990,17 @@
- 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 -r 428161c3b959 -r 54d41b0033b8 browser/components/shell/moz.build
---- a/browser/components/shell/moz.build Mon Jun 17 09:02:06 2019 +0200
-+++ b/browser/components/shell/moz.build Fri May 31 12:55:51 2019 +0200
-@@ -33,6 +33,8 @@
-
- SOURCES += [
- 'nsGNOMEShellService.cpp',
-+ 'nsKDEShellService.cpp',
-+ 'nsUnixShellService.cpp',
- ]
- elif CONFIG['OS_ARCH'] == 'WINNT':
- SOURCES += [
-diff -r 428161c3b959 -r 54d41b0033b8 browser/components/shell/nsKDEShellService.cpp
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ b/browser/components/shell/nsKDEShellService.cpp Fri May 31 12:55:51 2019 +0200
-@@ -0,0 +1,150 @@
-+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#include "mozilla/ArrayUtils.h"
-+
-+#include "nsCOMPtr.h"
-+#include "nsKDEShellService.h"
-+#include "nsShellService.h"
-+#include "nsKDEUtils.h"
-+#include "nsIPrefService.h"
-+#include "nsIProcess.h"
-+#include "nsIFile.h"
-+#include "nsServiceManagerUtils.h"
-+#include "nsComponentManagerUtils.h"
-+#include "nsIMutableArray.h"
-+#include "nsISupportsPrimitives.h"
-+#include "nsArrayUtils.h"
-+
-+using namespace mozilla;
-+
-+nsresult
-+nsKDEShellService::Init()
-+{
-+ if( !nsKDEUtils::kdeSupport())
-+ return NS_ERROR_NOT_AVAILABLE;
-+ return NS_OK;
-+}
-+
-+NS_IMPL_ISUPPORTS(nsKDEShellService, nsIGNOMEShellService, nsIShellService)
-+
-+NS_IMETHODIMP
-+nsKDEShellService::IsDefaultBrowser(bool aForAllTypes,
-+ bool* aIsDefaultBrowser)
-+{
-+ *aIsDefaultBrowser = false;
-+
-+ nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
-+ if (!command)
-+ return NS_ERROR_FAILURE;
-+
-+ nsCOMPtr<nsISupportsCString> str = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
-+ if (!str)
-+ return NS_ERROR_FAILURE;
-+
-+ str->SetData( NS_LITERAL_CSTRING( "ISDEFAULTBROWSER" ));
-+ command->AppendElement( str );
-+
-+ if( nsKDEUtils::command( command ))
-+ *aIsDefaultBrowser = true;
-+ return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+nsKDEShellService::SetDefaultBrowser(bool aClaimAllTypes,
-+ bool aForAllUsers)
-+{
-+ nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
-+ if (!command)
-+ return NS_ERROR_FAILURE;
-+
-+ nsCOMPtr<nsISupportsCString> cmdstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
-+ nsCOMPtr<nsISupportsCString> paramstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
-+ if (!cmdstr || !paramstr)
-+ return NS_ERROR_FAILURE;
-+
-+ cmdstr->SetData( NS_LITERAL_CSTRING( "SETDEFAULTBROWSER" ));
-+ command->AppendElement( cmdstr );
-+
-+ paramstr->SetData( aClaimAllTypes ? NS_LITERAL_CSTRING( "ALLTYPES" ) : NS_LITERAL_CSTRING( "NORMAL" ));
-+ command->AppendElement( paramstr );
-+
-+ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
-+}
-+
-+NS_IMETHODIMP
-+nsKDEShellService::GetCanSetDesktopBackground(bool* aResult)
-+{
-+ *aResult = true;
-+ return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+nsKDEShellService::SetDesktopBackground(dom::Element* aElement,
-+ int32_t aPosition,
-+ const nsACString& aImageName)
-+{
-+ return NS_ERROR_NOT_IMPLEMENTED;
-+}
-+
-+NS_IMETHODIMP
-+nsKDEShellService::GetDesktopBackgroundColor(PRUint32 *aColor)
-+{
-+ return NS_ERROR_NOT_IMPLEMENTED;
-+}
-+
-+NS_IMETHODIMP
-+nsKDEShellService::SetDesktopBackgroundColor(PRUint32 aColor)
-+{
-+ return NS_ERROR_NOT_IMPLEMENTED;
-+}
-+
-+NS_IMETHODIMP
-+nsKDEShellService::OpenApplication(PRInt32 aApplication)
-+{
-+ nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
-+ if (!command)
-+ return NS_ERROR_FAILURE;
-+
-+ nsCOMPtr<nsISupportsCString> str = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
-+ if (!str)
-+ return NS_ERROR_FAILURE;
-+
-+ if( aApplication == APPLICATION_MAIL )
-+ str->SetData( NS_LITERAL_CSTRING( "OPENMAIL" ));
-+ else if( aApplication == APPLICATION_NEWS )
-+ str->SetData( NS_LITERAL_CSTRING( "OPENNEWS" ));
-+ else
-+ return NS_ERROR_NOT_IMPLEMENTED;
-+
-+ command->AppendElement( str );
-+ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
-+}
-+
-+NS_IMETHODIMP
-+nsKDEShellService::OpenApplicationWithURI(nsIFile* aApplication, const nsACString& aURI)
-+{
-+ nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
-+ if (!command)
-+ return NS_ERROR_FAILURE;
-+
-+ nsCOMPtr<nsISupportsCString> cmdstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
-+ nsCOMPtr<nsISupportsCString> appstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
-+ nsCOMPtr<nsISupportsCString> uristr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
-+ if (!cmdstr || !appstr || !uristr)
-+ return NS_ERROR_FAILURE;
-+
-+ cmdstr->SetData( NS_LITERAL_CSTRING( "RUN" ));
-+ command->AppendElement( cmdstr );
-+ nsAutoCString app;
-+ nsresult rv = aApplication->GetNativePath( app );
-+ NS_ENSURE_SUCCESS( rv, rv );
-+ appstr->SetData( app );
-+ command->AppendElement( appstr );
-+ uristr->SetData( aURI );
-+ command->AppendElement( uristr );
-+ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
-+}
-+
-diff -r 428161c3b959 -r 54d41b0033b8 browser/components/shell/nsKDEShellService.h
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ b/browser/components/shell/nsKDEShellService.h Fri May 31 12:55:51 2019 +0200
-@@ -0,0 +1,32 @@
-+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#ifndef nskdeshellservice_h____
-+#define nskdeshellservice_h____
-+
-+#include "nsIGNOMEShellService.h"
-+#include "nsToolkitShellService.h"
-+#include "nsString.h"
-+#include "mozilla/Attributes.h"
-+
-+class nsKDEShellService final : public nsIGNOMEShellService,
-+ public nsToolkitShellService
-+{
-+public:
-+ nsKDEShellService() : mCheckedThisSession(false) { }
-+
-+ NS_DECL_ISUPPORTS
-+ NS_DECL_NSISHELLSERVICE
-+ NS_DECL_NSIGNOMESHELLSERVICE
-+
-+ nsresult Init();
-+
-+private:
-+ ~nsKDEShellService() {}
-+
-+ bool mCheckedThisSession;
-+};
-+
-+#endif // nskdeshellservice_h____
-diff -r 428161c3b959 -r 54d41b0033b8 browser/components/shell/nsUnixShellService.cpp
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ b/browser/components/shell/nsUnixShellService.cpp Fri May 31 12:55:51 2019 +0200
-@@ -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 -r 428161c3b959 -r 54d41b0033b8 browser/components/shell/nsUnixShellService.h
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ b/browser/components/shell/nsUnixShellService.h Fri May 31 12:55:51 2019 +0200
-@@ -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 -r 428161c3b959 -r 54d41b0033b8 browser/installer/package-manifest.in
---- a/browser/installer/package-manifest.in Mon Jun 17 09:02:06 2019 +0200
-+++ b/browser/installer/package-manifest.in Fri May 31 12:55:51 2019 +0200
-@@ -299,6 +299,8 @@
- ; gre location for now.
- @RESPATH@/defaults/pref/channel-prefs.js
-
-+@RESPATH@/defaults/pref/kde.js
-+
- ; Services (gre) prefs
- @RESPATH@/defaults/pref/services-sync.js
-
diff --git a/firefox-69.0-kde.patch b/firefox-69.0-kde.patch
new file mode 100644
index 0000000..5a19dd6
--- /dev/null
+++ b/firefox-69.0-kde.patch
@@ -0,0 +1,351 @@
+# HG changeset patch
+# User msirringhaus@suse.de
+# Date 1559300151 -7200
+# Fri May 31 12:55:51 2019 +0200
+# Node ID 54d41b0033b8d649d842a1f862c6fed8b9874dec
+# Parent 28bde69150771a1530f784903bf68214dd5790ea
+How to apply this patch:
+1. Import and apply it
+2. cp browser/base/content/browser.xul browser/base/content/browser-kde.xul
+3. Find editBookmarkPanelDoneButton
+4. Replace #ifndef with #ifdef in the line above (this hanges the button order from Gnome-style to KDE-style)
+5. hg qrefresh
+
+diff --git a/browser/components/preferences/in-content/main.js b/browser/components/preferences/in-content/main.js
+--- a/browser/components/preferences/in-content/main.js
++++ b/browser/components/preferences/in-content/main.js
+@@ -339,16 +339,23 @@ var gMainPane = {
+ }, backoffTimes[this._backoffIndex + 1 < backoffTimes.length ? this._backoffIndex++ : backoffTimes.length - 1]);
+ };
+
+ window.setTimeout(() => {
+ window.requestIdleCallback(pollForDefaultBrowser);
+ }, backoffTimes[this._backoffIndex]);
+ }
+
++ var env = Components.classes["@mozilla.org/process/environment;1"]
++ .getService(Components.interfaces.nsIEnvironment);
++ var kde_session = 0;
++ if (env.get('KDE_FULL_SESSION') == "true") {
++ kde_session = 1;
++ }
++
+ this.initBrowserContainers();
+ this.buildContentProcessCountMenuList();
+
+ let performanceSettingsLink = document.getElementById(
+ "performanceSettingsLearnMore"
+ );
+ let performanceSettingsUrl =
+ Services.urlFormatter.formatURLPref("app.support.baseURL") +
+@@ -1146,16 +1153,27 @@ var gMainPane = {
+ this._backoffIndex = 0;
+
+ let shellSvc = getShellService();
+ if (!shellSvc) {
+ return;
+ }
+ try {
+ shellSvc.setDefaultBrowser(true, false);
++ if (kde_session == 1) {
++ var shellObj = Components.classes["@mozilla.org/file/local;1"]
++ .createInstance(Components.interfaces.nsILocalFile);
++ shellObj.initWithPath("/usr/bin/kwriteconfig");
++ var process = Components.classes["@mozilla.org/process/util;1"]
++ .createInstance(Components.interfaces.nsIProcess);
++ process.init(shellObj);
++ var args = ["--file", "kdeglobals", "--group", "General", "--key",
++ "BrowserApplication", "firefox"];
++ process.run(false, args, args.length);
++ }
+ } catch (ex) {
+ Cu.reportError(ex);
+ return;
+ }
+
+ let selectedIndex = shellSvc.isDefaultBrowser(false, true) ? 1 : 0;
+ document.getElementById("setDefaultPane").selectedIndex = selectedIndex;
+ }
+diff --git a/browser/components/shell/moz.build b/browser/components/shell/moz.build
+--- a/browser/components/shell/moz.build
++++ b/browser/components/shell/moz.build
+@@ -28,16 +28,18 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'coco
+ ]
+ elif 'gtk' in CONFIG['MOZ_WIDGET_TOOLKIT']:
+ XPIDL_SOURCES += [
+ 'nsIGNOMEShellService.idl',
+ ]
+
+ SOURCES += [
+ 'nsGNOMEShellService.cpp',
++ 'nsKDEShellService.cpp',
++ 'nsUnixShellService.cpp',
+ ]
+ elif CONFIG['OS_ARCH'] == 'WINNT':
+ SOURCES += [
+ 'nsWindowsShellService.cpp',
+ ]
+ LOCAL_INCLUDES += [
+ '../../../other-licenses/nsis/Contrib/CityHash/cityhash',
+ ]
+diff --git a/browser/components/shell/nsKDEShellService.cpp b/browser/components/shell/nsKDEShellService.cpp
+new file mode 100644
+--- /dev/null
++++ b/browser/components/shell/nsKDEShellService.cpp
+@@ -0,0 +1,150 @@
++/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
++/* This Source Code Form is subject to the terms of the Mozilla Public
++ * License, v. 2.0. If a copy of the MPL was not distributed with this
++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
++
++#include "mozilla/ArrayUtils.h"
++
++#include "nsCOMPtr.h"
++#include "nsKDEShellService.h"
++#include "nsShellService.h"
++#include "nsKDEUtils.h"
++#include "nsIPrefService.h"
++#include "nsIProcess.h"
++#include "nsIFile.h"
++#include "nsServiceManagerUtils.h"
++#include "nsComponentManagerUtils.h"
++#include "nsIMutableArray.h"
++#include "nsISupportsPrimitives.h"
++#include "nsArrayUtils.h"
++
++using namespace mozilla;
++
++nsresult
++nsKDEShellService::Init()
++{
++ if( !nsKDEUtils::kdeSupport())
++ return NS_ERROR_NOT_AVAILABLE;
++ return NS_OK;
++}
++
++NS_IMPL_ISUPPORTS(nsKDEShellService, nsIGNOMEShellService, nsIShellService)
++
++NS_IMETHODIMP
++nsKDEShellService::IsDefaultBrowser(bool aForAllTypes,
++ bool* aIsDefaultBrowser)
++{
++ *aIsDefaultBrowser = false;
++
++ nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
++ if (!command)
++ return NS_ERROR_FAILURE;
++
++ nsCOMPtr<nsISupportsCString> str = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
++ if (!str)
++ return NS_ERROR_FAILURE;
++
++ str->SetData( NS_LITERAL_CSTRING( "ISDEFAULTBROWSER" ));
++ command->AppendElement( str );
++
++ if( nsKDEUtils::command( command ))
++ *aIsDefaultBrowser = true;
++ return NS_OK;
++}
++
++NS_IMETHODIMP
++nsKDEShellService::SetDefaultBrowser(bool aClaimAllTypes,
++ bool aForAllUsers)
++{
++ nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
++ if (!command)
++ return NS_ERROR_FAILURE;
++
++ nsCOMPtr<nsISupportsCString> cmdstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
++ nsCOMPtr<nsISupportsCString> paramstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
++ if (!cmdstr || !paramstr)
++ return NS_ERROR_FAILURE;
++
++ cmdstr->SetData( NS_LITERAL_CSTRING( "SETDEFAULTBROWSER" ));
++ command->AppendElement( cmdstr );
++
++ paramstr->SetData( aClaimAllTypes ? NS_LITERAL_CSTRING( "ALLTYPES" ) : NS_LITERAL_CSTRING( "NORMAL" ));
++ command->AppendElement( paramstr );
++
++ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
++}
++
++NS_IMETHODIMP
++nsKDEShellService::GetCanSetDesktopBackground(bool* aResult)
++{
++ *aResult = true;
++ return NS_OK;
++}
++
++NS_IMETHODIMP
++nsKDEShellService::SetDesktopBackground(dom::Element* aElement,
++ int32_t aPosition,
++ const nsACString& aImageName)
++{
++ return NS_ERROR_NOT_IMPLEMENTED;
++}
++
++NS_IMETHODIMP
++nsKDEShellService::GetDesktopBackgroundColor(PRUint32 *aColor)
++{
++ return NS_ERROR_NOT_IMPLEMENTED;
++}
++
++NS_IMETHODIMP
++nsKDEShellService::SetDesktopBackgroundColor(PRUint32 aColor)
++{
++ return NS_ERROR_NOT_IMPLEMENTED;
++}
++
++NS_IMETHODIMP
++nsKDEShellService::OpenApplication(PRInt32 aApplication)
++{
++ nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
++ if (!command)
++ return NS_ERROR_FAILURE;
++
++ nsCOMPtr<nsISupportsCString> str = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
++ if (!str)
++ return NS_ERROR_FAILURE;
++
++ if( aApplication == APPLICATION_MAIL )
++ str->SetData( NS_LITERAL_CSTRING( "OPENMAIL" ));
++ else if( aApplication == APPLICATION_NEWS )
++ str->SetData( NS_LITERAL_CSTRING( "OPENNEWS" ));
++ else
++ return NS_ERROR_NOT_IMPLEMENTED;
++
++ command->AppendElement( str );
++ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
++}
++
++NS_IMETHODIMP
++nsKDEShellService::OpenApplicationWithURI(nsIFile* aApplication, const nsACString& aURI)
++{
++ nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
++ if (!command)
++ return NS_ERROR_FAILURE;
++
++ nsCOMPtr<nsISupportsCString> cmdstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
++ nsCOMPtr<nsISupportsCString> appstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
++ nsCOMPtr<nsISupportsCString> uristr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
++ if (!cmdstr || !appstr || !uristr)
++ return NS_ERROR_FAILURE;
++
++ cmdstr->SetData( NS_LITERAL_CSTRING( "RUN" ));
++ command->AppendElement( cmdstr );
++ nsAutoCString app;
++ nsresult rv = aApplication->GetNativePath( app );
++ NS_ENSURE_SUCCESS( rv, rv );
++ appstr->SetData( app );
++ command->AppendElement( appstr );
++ uristr->SetData( aURI );
++ command->AppendElement( uristr );
++ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
++}
++
+diff --git a/browser/components/shell/nsKDEShellService.h b/browser/components/shell/nsKDEShellService.h
+new file mode 100644
+--- /dev/null
++++ b/browser/components/shell/nsKDEShellService.h
+@@ -0,0 +1,32 @@
++/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
++/* This Source Code Form is subject to the terms of the Mozilla Public
++ * License, v. 2.0. If a copy of the MPL was not distributed with this
++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
++
++#ifndef nskdeshellservice_h____
++#define nskdeshellservice_h____
++
++#include "nsIGNOMEShellService.h"
++#include "nsToolkitShellService.h"
++#include "nsString.h"
++#include "mozilla/Attributes.h"
++
++class nsKDEShellService final : public nsIGNOMEShellService,
++ public nsToolkitShellService
++{
++public:
++ nsKDEShellService() : mCheckedThisSession(false) { }
++
++ NS_DECL_ISUPPORTS
++ NS_DECL_NSISHELLSERVICE
++ NS_DECL_NSIGNOMESHELLSERVICE
++
++ nsresult Init();
++
++private:
++ ~nsKDEShellService() {}
++
++ bool mCheckedThisSession;
++};
++
++#endif // nskdeshellservice_h____
+diff --git a/browser/components/shell/nsUnixShellService.cpp b/browser/components/shell/nsUnixShellService.cpp
+new file mode 100644
+--- /dev/null
++++ b/browser/components/shell/nsUnixShellService.cpp
+@@ -0,0 +1,22 @@
++/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
++/* This Source Code Form is subject to the terms of the Mozilla Public
++ * License, v. 2.0. If a copy of the MPL was not distributed with this
++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
++
++
++#include "nsUnixShellService.h"
++#include "nsGNOMEShellService.h"
++#include "nsKDEShellService.h"
++#include "nsKDEUtils.h"
++#include "mozilla/ModuleUtils.h"
++
++NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGNOMEShellService, Init)
++NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsKDEShellService, Init)
++
++NS_IMETHODIMP
++nsUnixShellServiceConstructor(nsISupports *aOuter, REFNSIID aIID, void **aResult)
++{
++ if( nsKDEUtils::kdeSupport())
++ return nsKDEShellServiceConstructor( aOuter, aIID, aResult );
++ return nsGNOMEShellServiceConstructor( aOuter, aIID, aResult );
++}
+diff --git a/browser/components/shell/nsUnixShellService.h b/browser/components/shell/nsUnixShellService.h
+new file mode 100644
+--- /dev/null
++++ b/browser/components/shell/nsUnixShellService.h
+@@ -0,0 +1,15 @@
++/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
++/* This Source Code Form is subject to the terms of the Mozilla Public
++ * License, v. 2.0. If a copy of the MPL was not distributed with this
++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
++
++
++#ifndef nsunixshellservice_h____
++#define nsunixshellservice_h____
++
++#include "nsIGNOMEShellService.h"
++
++NS_IMETHODIMP
++nsUnixShellServiceConstructor(nsISupports *aOuter, REFNSIID aIID, void **aResult);
++
++#endif // nsunixshellservice_h____
+diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in
+--- a/browser/installer/package-manifest.in
++++ b/browser/installer/package-manifest.in
+@@ -295,16 +295,18 @@
+ @RESPATH@/browser/defaults/settings/main
+ @RESPATH@/browser/defaults/settings/security-state
+
+ ; Warning: changing the path to channel-prefs.js can cause bugs (Bug 756325)
+ ; Technically this is an app pref file, but we are keeping it in the original
+ ; gre location for now.
+ @RESPATH@/defaults/pref/channel-prefs.js
+
++@RESPATH@/defaults/pref/kde.js
++
+ ; Services (gre) prefs
+ @RESPATH@/defaults/pref/services-sync.js
+
+ ; [Layout Engine Resources]
+ ; Style Sheets, Graphics and other Resources used by the layout engine.
+ @RESPATH@/res/EditorOverride.css
+ @RESPATH@/res/contenteditable.css
+ @RESPATH@/res/designmode.css
diff --git a/firefox.spec b/firefox.spec
index 6ec9afa..22212db 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -224,7 +224,7 @@ Name: firefox
Epoch: 0
# IMPORTANT: When updating, you MUST also update the l10n files by running
# download.sh after editing the version number
-Version: 68.0.2
+Version: 69.0.1
Release: 1
License: MPLv1+
Group: Networking/WWW
@@ -259,8 +259,8 @@ Source100: firefox.rpmlintrc
Patch0: firefox-67.0-webrtc-compile.patch
# Patches for kde integration of FF from http://www.rosenauer.org/hg/mozilla/
-Patch11: firefox-68.0-kde.patch
-Patch12: mozilla-68.0-kde.patch
+Patch11: firefox-69.0-kde.patch
+Patch12: mozilla-69.0-kde.patch
# from fedora - fix for app chooser
#Patch43: rhbz-1291190-appchooser-crash.patch
@@ -319,7 +319,7 @@ BuildRequires: pkgconfig(libproxy-1.0)
BuildRequires: pkgconfig(libpulse)
BuildRequires: pkgconfig(libstartup-notification-1.0)
BuildRequires: pkgconfig(nspr) >= 4.21.0
-BuildRequires: pkgconfig(nss) >= 3.44.1
+BuildRequires: pkgconfig(nss) >= 3.45.0
BuildRequires: pkgconfig(ogg)
BuildRequires: pkgconfig(opus)
BuildRequires: pkgconfig(libpulse)
@@ -342,8 +342,8 @@ BuildRequires: pkgconfig(valgrind)
BuildRequires: yasm >= 1.0.1
BuildRequires: nasm
%endif
-BuildRequires: rust >= 1.34.0
-BuildRequires: cargo >= 0.35.0
+BuildRequires: rust >= 1.35.0
+BuildRequires: cargo >= 0.36.0
BuildRequires: nodejs >= 8.12
BuildRequires: pkgconfig(jemalloc)
Requires: indexhtml
diff --git a/mozilla-68.0-kde.patch b/mozilla-69.0-kde.patch
similarity index 73%
rename from mozilla-68.0-kde.patch
rename to mozilla-69.0-kde.patch
index 85dd1c3..4d87053 100644
--- a/mozilla-68.0-kde.patch
+++ b/mozilla-69.0-kde.patch
@@ -3,7 +3,7 @@
# Date 1559294891 -7200
# Fri May 31 11:28:11 2019 +0200
# Node ID c2aa7198fb925e7fde96abf65b6f68b9b755f112
-# Parent f11c2d7239c0caa4dc74272716d9e30ced1a1ca3
+# Parent 85e4798b74da9c377f84cf8f5dd59a7f952d92eb
Description: Add KDE integration to Firefox (toolkit parts)
Author: Wolfgang Rosenauer <wolfgang@rosenauer.org>
Author: Lubos Lunak <lunak@suse.com>
@@ -13,8 +13,7 @@ Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=140751
diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp
--- a/modules/libpref/Preferences.cpp
+++ b/modules/libpref/Preferences.cpp
-@@ -81,16 +81,17 @@
- #include "nsXPCOMCID.h"
+@@ -83,16 +83,17 @@
#include "nsXPCOM.h"
#include "nsXULAppAPI.h"
#include "nsZipArchive.h"
@@ -22,16 +21,17 @@ diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp
#include "PLDHashTable.h"
#include "plstr.h"
#include "prlink.h"
+ #include "xpcpublic.h"
+#include "nsKDEUtils.h"
- #ifdef MOZ_MEMORY
- # include "mozmemory.h"
+ #ifdef DEBUG
+ # include <map>
#endif
- #ifdef XP_WIN
- # include "windows.h"
+ #ifdef MOZ_MEMORY
+ # include "mozmemory.h"
#endif
-@@ -4507,25 +4508,37 @@ static nsresult pref_ReadDefaultPrefs(co
+@@ -4623,25 +4624,37 @@ Result<Ok, const char*> Preferences::Ini
// application pref files for backwards compatibility.
static const char* specialFiles[] = {
#if defined(XP_MACOSX)
@@ -69,7 +69,7 @@ diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp
// Load jar:$app/omni.jar!/defaults/preferences/*.js
// or jar:$gre/omni.jar!/defaults/preferences/*.js.
-@@ -4573,17 +4586,17 @@ static nsresult pref_ReadDefaultPrefs(co
+@@ -4688,17 +4701,17 @@ Result<Ok, const char*> Preferences::Ini
}
nsCOMPtr<nsIFile> path = do_QueryInterface(elem);
@@ -115,7 +115,7 @@ diff --git a/modules/libpref/moz.build b/modules/libpref/moz.build
diff --git a/python/mozbuild/mozpack/chrome/flags.py b/python/mozbuild/mozpack/chrome/flags.py
--- a/python/mozbuild/mozpack/chrome/flags.py
+++ b/python/mozbuild/mozpack/chrome/flags.py
-@@ -223,16 +223,17 @@ class Flags(OrderedDict):
+@@ -227,16 +227,17 @@ class Flags(OrderedDict):
'contentaccessible': Flag,
'os': StringFlag,
'osversion': VersionFlag,
@@ -136,7 +136,7 @@ diff --git a/python/mozbuild/mozpack/chrome/flags.py b/python/mozbuild/mozpack/c
diff --git a/python/mozbuild/mozpack/chrome/manifest.py b/python/mozbuild/mozpack/chrome/manifest.py
--- a/python/mozbuild/mozpack/chrome/manifest.py
+++ b/python/mozbuild/mozpack/chrome/manifest.py
-@@ -39,16 +39,17 @@ class ManifestEntry(object):
+@@ -36,16 +36,17 @@ class ManifestEntry(object):
'platformversion',
'os',
'osversion',
@@ -172,552 +172,32 @@ diff --git a/toolkit/components/downloads/moz.build b/toolkit/components/downloa
+
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'Downloads API')
-diff --git a/toolkit/content/jar.mn b/toolkit/content/jar.mn
---- a/toolkit/content/jar.mn
-+++ b/toolkit/content/jar.mn
-@@ -63,16 +63,18 @@ toolkit.jar:
- content/global/widgets.css
- content/global/bindings/autocomplete.xml (widgets/autocomplete.xml)
- content/global/bindings/button.xml (widgets/button.xml)
- content/global/bindings/calendar.js (widgets/calendar.js)
- content/global/bindings/datekeeper.js (widgets/datekeeper.js)
- content/global/bindings/datepicker.js (widgets/datepicker.js)
- content/global/bindings/datetimebox.css (widgets/datetimebox.css)
- * content/global/bindings/dialog.xml (widgets/dialog.xml)
-+* content/global/bindings/dialog-kde.xml (widgets/dialog-kde.xml)
-+% override chrome://global/content/bindings/dialog.xml chrome://global/content/bindings/dialog-kde.xml desktop=kde
- content/global/bindings/general.xml (widgets/general.xml)
- content/global/bindings/popup.xml (widgets/popup.xml)
- content/global/bindings/richlistbox.xml (widgets/richlistbox.xml)
- content/global/bindings/scrollbox.xml (widgets/scrollbox.xml)
- content/global/bindings/spinner.js (widgets/spinner.js)
- content/global/bindings/tabbox.xml (widgets/tabbox.xml)
- * content/global/bindings/textbox.xml (widgets/textbox.xml)
- content/global/bindings/timekeeper.js (widgets/timekeeper.js)
-diff --git a/toolkit/content/widgets/dialog-kde.xml b/toolkit/content/widgets/dialog-kde.xml
-new file mode 100644
---- /dev/null
-+++ b/toolkit/content/widgets/dialog-kde.xml
-@@ -0,0 +1,499 @@
-+<?xml version="1.0"?>
-+<!-- 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/. -->
-+
-+<!DOCTYPE bindings [
-+ <!ENTITY % globalKeysDTD SYSTEM "chrome://global/locale/globalKeys.dtd">
-+ %globalKeysDTD;
-+]>
-+
-+<bindings id="dialogBindings"
-+ xmlns="http://www.mozilla.org/xbl"
-+ xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-+ xmlns:xbl="http://www.mozilla.org/xbl">
-+
-+ <binding id="dialog">
-+ <content>
-+ <xul:vbox class="box-inherit dialog-content-box" flex="1">
-+ <children/>
-+ </xul:vbox>
-+
-+ <xul:hbox class="dialog-button-box" anonid="buttons"
-+ xbl:inherits="pack=buttonpack,align=buttonalign,dir=buttondir,orient=buttonorient"
-+#ifdef XP_UNIX_GNOME
-+ >
-+ <xul:button dlgtype="disclosure" class="dialog-button" hidden="true"/>
-+ <xul:button dlgtype="help" class="dialog-button" hidden="true"/>
-+ <xul:button dlgtype="extra2" class="dialog-button" hidden="true"/>
-+ <xul:button dlgtype="extra1" class="dialog-button" hidden="true"/>
-+ <xul:spacer anonid="spacer" flex="1"/>
-+ <xul:button dlgtype="cancel" class="dialog-button"/>
-+ <xul:button dlgtype="accept" class="dialog-button" xbl:inherits="disabled=buttondisabledaccept"/>
-+#elif XP_UNIX
-+ >
-+ <xul:button dlgtype="help" class="dialog-button" hidden="true"/>
-+ <xul:button dlgtype="extra2" class="dialog-button" hidden="true"/>
-+ <xul:spacer anonid="spacer" flex="1"/>
-+ <xul:button dlgtype="accept" class="dialog-button" xbl:inherits="disabled=buttondisabledaccept"/>
-+ <xul:button dlgtype="extra1" class="dialog-button" hidden="true"/>
-+ <xul:button dlgtype="cancel" class="dialog-button"/>
-+ <xul:button dlgtype="disclosure" class="dialog-button" hidden="true"/>
-+#else
-+ pack="end">
-+ <xul:button dlgtype="extra2" class="dialog-button" hidden="true"/>
-+ <xul:spacer anonid="spacer" flex="1" hidden="true"/>
-+ <xul:button dlgtype="accept" class="dialog-button" xbl:inherits="disabled=buttondisabledaccept"/>
-+ <xul:button dlgtype="extra1" class="dialog-button" hidden="true"/>
-+ <xul:button dlgtype="cancel" class="dialog-button"/>
-+ <xul:button dlgtype="help" class="dialog-button" hidden="true"/>
-+ <xul:button dlgtype="disclosure" class="dialog-button" hidden="true"/>
-+#endif
-+ </xul:hbox>
-+
-+ <xul:keyset>
-+ <xul:key phase="capturing" oncommand="document.documentElement.openHelp(event)"
-+#ifdef XP_MACOSX
-+ key="&openHelpMac.commandkey;" modifiers="accel"/>
-+#else
-+ keycode="&openHelp.commandkey;"/>
-+#endif
-+ </xul:keyset>
-+
-+ </content>
-+
-+ <implementation>
-+ <field name="_mStrBundle">null</field>
-+ <field name="_closeHandler">(function(event) {
-+ if (!document.documentElement.cancelDialog())
-+ event.preventDefault();
-+ })</field>
-+
-+ <!-- Gets populated by elements that are passed to document.l10n.setAttributes
-+ to localize the dialog buttons. Needed to properly size the dialog after
-+ the asynchronous translation. -->
-+ <field name="_l10nButtons">[]</field>
-+
-+ <property name="buttons"
-+ onget="return this.getAttribute('buttons');"
-+ onset="this._configureButtons(val); return val;"/>
-+
-+ <property name="defaultButton">
-+ <getter>
-+ <![CDATA[
-+ if (this.hasAttribute("defaultButton"))
-+ return this.getAttribute("defaultButton");
-+ return "accept"; // default to the accept button
-+ ]]>
-+ </getter>
-+ <setter>
-+ <![CDATA[
-+ this._setDefaultButton(val);
-+ return val;
-+ ]]>
-+ </setter>
-+ </property>
-+
-+ <method name="acceptDialog">
-+ <body>
-+ <![CDATA[
-+ return this._doButtonCommand("accept");
-+ ]]>
-+ </body>
-+ </method>
-+
-+ <method name="cancelDialog">
-+ <body>
-+ <![CDATA[
-+ return this._doButtonCommand("cancel");
-+ ]]>
-+ </body>
-+ </method>
-+
-+ <method name="getButton">
-+ <parameter name="aDlgType"/>
-+ <body>
-+ <![CDATA[
-+ return this._buttons[aDlgType];
-+ ]]>
-+ </body>
-+ </method>
-+
-+ <method name="moveToAlertPosition">
-+ <body>
-+ <![CDATA[
-+ // hack. we need this so the window has something like its final size
-+ if (window.outerWidth == 1) {
-+ dump("Trying to position a sizeless window; caller should have called sizeToContent() or sizeTo(). See bug 75649.\n");
-+ sizeToContent();
-+ }
-+
-+ if (opener) {
-+ var xOffset = (opener.outerWidth - window.outerWidth) / 2;
-+ var yOffset = opener.outerHeight / 5;
-+
-+ var newX = opener.screenX + xOffset;
-+ var newY = opener.screenY + yOffset;
-+ } else {
-+ newX = (screen.availWidth - window.outerWidth) / 2;
-+ newY = (screen.availHeight - window.outerHeight) / 2;
-+ }
-+
-+ // ensure the window is fully onscreen (if smaller than the screen)
-+ if (newX < screen.availLeft)
-+ newX = screen.availLeft + 20;
-+ if ((newX + window.outerWidth) > (screen.availLeft + screen.availWidth))
-+ newX = (screen.availLeft + screen.availWidth) - window.outerWidth - 20;
-+
-+ if (newY < screen.availTop)
-+ newY = screen.availTop + 20;
-+ if ((newY + window.outerHeight) > (screen.availTop + screen.availHeight))
-+ newY = (screen.availTop + screen.availHeight) - window.outerHeight - 60;
-+
-+ window.moveTo( newX, newY );
-+ ]]>
-+ </body>
-+ </method>
-+
-+ <method name="centerWindowOnScreen">
-+ <body>
-+ <![CDATA[
-+ var xOffset = screen.availWidth / 2 - window.outerWidth / 2;
-+ var yOffset = screen.availHeight / 2 - window.outerHeight / 2;
-+
-+ xOffset = xOffset > 0 ? xOffset : 0;
-+ yOffset = yOffset > 0 ? yOffset : 0;
-+ window.moveTo(xOffset, yOffset);
-+ ]]>
-+ </body>
-+ </method>
-+
-+ <constructor>
-+ <![CDATA[
-+ this._configureButtons(this.buttons);
-+
-+ // listen for when window is closed via native close buttons
-+ window.addEventListener("close", this);
-+
-+ // for things that we need to initialize after onload fires
-+ window.addEventListener("load", this);
-+
-+ window.moveToAlertPosition = this.moveToAlertPosition;
-+ window.centerWindowOnScreen = this.centerWindowOnScreen;
-+ ]]>
-+ </constructor>
-+
-+ <method name="handleEvent">
-+ <parameter name="aEvent"/>
-+ <body><![CDATA[
-+ switch (aEvent.type) {
-+ case "close": {
-+ this._closeHandler(aEvent);
-+ break;
-+ }
-+ case "load": {
-+ this.postLoadInit(aEvent);
-+ break;
-+ }
-+ }
-+ ]]></body>
-+ </method>
-+
-+ <method name="postLoadInit">
-+ <parameter name="aEvent"/>
-+ <body>
-+ <![CDATA[
-+ function focusInit() {
-+ const dialog = document.documentElement;
-+ const defaultButton = dialog.getButton(dialog.defaultButton);
-+ // give focus to the first focusable element in the dialog
-+ if (!document.commandDispatcher.focusedElement) {
-+ document.commandDispatcher.advanceFocusIntoSubtree(dialog);
-+
-+ var focusedElt = document.commandDispatcher.focusedElement;
-+ if (focusedElt) {
-+ var initialFocusedElt = focusedElt;
-+ while (focusedElt.localName == "tab" ||
-+ focusedElt.getAttribute("noinitialfocus") == "true") {
-+ document.commandDispatcher.advanceFocusIntoSubtree(focusedElt);
-+ focusedElt = document.commandDispatcher.focusedElement;
-+ if (focusedElt == initialFocusedElt) {
-+ if (focusedElt.getAttribute("noinitialfocus") == "true") {
-+ focusedElt.blur();
-+ }
-+ break;
-+ }
-+ }
-+
-+ if (initialFocusedElt.localName == "tab") {
-+ if (focusedElt.hasAttribute("dlgtype")) {
-+ // We don't want to focus on anonymous OK, Cancel, etc. buttons,
-+ // so return focus to the tab itself
-+ initialFocusedElt.focus();
-+ }
-+ } else if (!/Mac/.test(navigator.platform) &&
-+ focusedElt.hasAttribute("dlgtype") && focusedElt != defaultButton) {
-+ defaultButton.focus();
-+ }
-+ }
-+ }
-+
-+ try {
-+ if (defaultButton)
-+ window.notifyDefaultButtonLoaded(defaultButton);
-+ } catch (e) { }
-+ }
-+
-+ // Give focus after onload completes, see bug 103197.
-+ setTimeout(focusInit, 0);
-+
-+ if (this._l10nButtons.length) {
-+ document.l10n.translateElements(this._l10nButtons).then(() => {
-+ window.sizeToContent();
-+ });
-+ }
-+ ]]>
-+ </body>
-+ </method>
-+
-+ <method name="openHelp">
-+ <parameter name="event"/>
-+ <body>
-+ <![CDATA[
-+ var helpButton = document.documentElement.getButton("help");
-+ if (helpButton.disabled || helpButton.hidden)
-+ return;
-+ this._fireButtonEvent("help");
-+ event.stopPropagation();
-+ event.preventDefault();
-+ ]]>
-+ </body>
-+ </method>
-+
-+ <property name="mStrBundle">
-+ <getter>
-+ <![CDATA[
-+ if (!this._mStrBundle) {
-+ // need to create string bundle manually instead of using <xul:stringbundle/>
-+ // see bug 63370 for details
-+ this._mStrBundle = Cc["@mozilla.org/intl/stringbundle;1"]
-+ .getService(Ci.nsIStringBundleService)
-+ .createBundle("chrome://global/locale/dialog.properties");
-+ }
-+ return this._mStrBundle;
-+ ]]></getter>
-+ </property>
-+
-+ <method name="_configureButtons">
-+ <parameter name="aButtons"/>
-+ <body>
-+ <![CDATA[
-+ // by default, get all the anonymous button elements
-+ var buttons = {};
-+ this._buttons = buttons;
-+ buttons.accept = document.getAnonymousElementByAttribute(this, "dlgtype", "accept");
-+ buttons.cancel = document.getAnonymousElementByAttribute(this, "dlgtype", "cancel");
-+ buttons.extra1 = document.getAnonymousElementByAttribute(this, "dlgtype", "extra1");
-+ buttons.extra2 = document.getAnonymousElementByAttribute(this, "dlgtype", "extra2");
-+ buttons.help = document.getAnonymousElementByAttribute(this, "dlgtype", "help");
-+ buttons.disclosure = document.getAnonymousElementByAttribute(this, "dlgtype", "disclosure");
-+
-+ for (let button in buttons) {
-+ customElements.upgrade(buttons[button]);
-+ }
-+
-+ // look for any overriding explicit button elements
-+ var exBtns = this.getElementsByAttribute("dlgtype", "*");
-+ var dlgtype;
-+ var i;
-+ for (i = 0; i < exBtns.length; ++i) {
-+ dlgtype = exBtns[i].getAttribute("dlgtype");
-+ buttons[dlgtype].hidden = true; // hide the anonymous button
-+ buttons[dlgtype] = exBtns[i];
-+ }
-+
-+ // add the label and oncommand handler to each button
-+ for (dlgtype in buttons) {
-+ var button = buttons[dlgtype];
-+ button.addEventListener("command", this._handleButtonCommand, true);
-+
-+ // don't override custom labels with pre-defined labels on explicit buttons
-+ if (!button.hasAttribute("label")) {
-+ // dialog attributes override the default labels in dialog.properties
-+ if (this.hasAttribute("buttonlabel" + dlgtype)) {
-+ button.setAttribute("label", this.getAttribute("buttonlabel" + dlgtype));
-+ if (this.hasAttribute("buttonaccesskey" + dlgtype))
-+ button.setAttribute("accesskey", this.getAttribute("buttonaccesskey" + dlgtype));
-+ } else if (this.hasAttribute("buttonid" + dlgtype)) {
-+ document.l10n.setAttributes(button, this.getAttribute("buttonid" + dlgtype));
-+ this._l10nButtons.push(button);
-+ } else if (dlgtype != "extra1" && dlgtype != "extra2") {
-+ button.setAttribute("label", this.mStrBundle.GetStringFromName("button-" + dlgtype));
-+ var accessKey = this.mStrBundle.GetStringFromName("accesskey-" + dlgtype);
-+ if (accessKey)
-+ button.setAttribute("accesskey", accessKey);
-+ }
-+ }
-+ // allow specifying alternate icons in the dialog header
-+ if (!button.hasAttribute("icon")) {
-+ // if there's an icon specified, use that
-+ if (this.hasAttribute("buttonicon" + dlgtype))
-+ button.setAttribute("icon", this.getAttribute("buttonicon" + dlgtype));
-+ // otherwise set defaults
-+ else
-+ switch (dlgtype) {
-+ case "accept":
-+ button.setAttribute("icon", "accept");
-+ break;
-+ case "cancel":
-+ button.setAttribute("icon", "cancel");
-+ break;
-+ case "disclosure":
-+ button.setAttribute("icon", "properties");
-+ break;
-+ case "help":
-+ button.setAttribute("icon", "help");
-+ break;
-+ default:
-+ break;
-+ }
-+ }
-+ }
-+
-+ // ensure that hitting enter triggers the default button command
-+ this.defaultButton = this.defaultButton;
-+
-+ // if there is a special button configuration, use it
-+ if (aButtons) {
-+ // expect a comma delimited list of dlgtype values
-+ var list = aButtons.split(",");
-+
-+ // mark shown dlgtypes as true
-+ var shown = { accept: false, cancel: false, help: false,
-+ disclosure: false, extra1: false, extra2: false };
-+ for (i = 0; i < list.length; ++i)
-+ shown[list[i].replace(/ /g, "")] = true;
-+
-+ // hide/show the buttons we want
-+ for (dlgtype in buttons)
-+ buttons[dlgtype].hidden = !shown[dlgtype];
-+
-+ // show the spacer on Windows only when the extra2 button is present
-+ if (/Win/.test(navigator.platform)) {
-+ var spacer = document.getAnonymousElementByAttribute(this, "anonid", "spacer");
-+ spacer.removeAttribute("hidden");
-+ spacer.setAttribute("flex", shown.extra2 ? "1" : "0");
-+ }
-+ }
-+ ]]>
-+ </body>
-+ </method>
-+
-+ <method name="_setDefaultButton">
-+ <parameter name="aNewDefault"/>
-+ <body>
-+ <![CDATA[
-+ // remove the default attribute from the previous default button, if any
-+ var oldDefaultButton = this.getButton(this.defaultButton);
-+ if (oldDefaultButton)
-+ oldDefaultButton.removeAttribute("default");
-+
-+ var newDefaultButton = this.getButton(aNewDefault);
-+ if (newDefaultButton) {
-+ this.setAttribute("defaultButton", aNewDefault);
-+ newDefaultButton.setAttribute("default", "true");
-+ } else {
-+ this.setAttribute("defaultButton", "none");
-+ if (aNewDefault != "none")
-+ dump("invalid new default button: " + aNewDefault + ", assuming: none\n");
-+ }
-+ ]]>
-+ </body>
-+ </method>
-+
-+ <method name="_handleButtonCommand">
-+ <parameter name="aEvent"/>
-+ <body>
-+ <![CDATA[
-+ return document.documentElement._doButtonCommand(
-+ aEvent.target.getAttribute("dlgtype"));
-+ ]]>
-+ </body>
-+ </method>
-+
-+ <method name="_doButtonCommand">
-+ <parameter name="aDlgType"/>
-+ <body>
-+ <![CDATA[
-+ var button = this.getButton(aDlgType);
-+ if (!button.disabled) {
-+ var noCancel = this._fireButtonEvent(aDlgType);
-+ if (noCancel) {
-+ if (aDlgType == "accept" || aDlgType == "cancel") {
-+ var closingEvent = new CustomEvent("dialogclosing", {
-+ bubbles: true,
-+ detail: { button: aDlgType },
-+ });
-+ this.dispatchEvent(closingEvent);
-+ window.close();
-+ }
-+ }
-+ return noCancel;
-+ }
-+ return true;
-+ ]]>
-+ </body>
-+ </method>
-+
-+ <method name="_fireButtonEvent">
-+ <parameter name="aDlgType"/>
-+ <body>
-+ <![CDATA[
-+ var event = document.createEvent("Events");
-+ event.initEvent("dialog" + aDlgType, true, true);
-+
-+ // handle dom event handlers
-+ return this.dispatchEvent(event);
-+ ]]>
-+ </body>
-+ </method>
-+
-+ <method name="_hitEnter">
-+ <parameter name="evt"/>
-+ <body>
-+ <![CDATA[
-+ if (evt.defaultPrevented)
-+ return;
-+
-+ var btn = this.getButton(this.defaultButton);
-+ if (btn)
-+ this._doButtonCommand(this.defaultButton);
-+ ]]>
-+ </body>
-+ </method>
-+
-+ </implementation>
-+
-+ <handlers>
-+ <handler event="keypress" keycode="VK_RETURN"
-+ group="system" action="this._hitEnter(event);"/>
-+ <handler event="keypress" keycode="VK_ESCAPE" group="system">
-+ if (!event.defaultPrevented)
-+ this.cancelDialog();
-+ </handler>
-+#ifdef XP_MACOSX
-+ <handler event="keypress" key="." modifiers="meta" phase="capturing" action="this.cancelDialog();"/>
-+#else
-+ <handler event="focus" phase="capturing">
-+ var btn = this.getButton(this.defaultButton);
-+ if (btn)
-+ btn.setAttribute("default", event.originalTarget == btn ||
-+ !(event.originalTarget.localName == "button" ||
-+ event.originalTarget.localName == "toolbarbutton"));
-+ </handler>
-+#endif
-+ </handlers>
-+
-+ </binding>
-+
-+</bindings>
diff --git a/toolkit/mozapps/downloads/HelperAppDlg.jsm b/toolkit/mozapps/downloads/HelperAppDlg.jsm
--- a/toolkit/mozapps/downloads/HelperAppDlg.jsm
+++ b/toolkit/mozapps/downloads/HelperAppDlg.jsm
-@@ -1042,30 +1042,60 @@ nsUnknownContentTypeDialog.prototype = {
-
- if (params.handlerApp &&
- params.handlerApp.executable &&
- params.handlerApp.executable.isFile()) {
+@@ -1204,36 +1204,66 @@ nsUnknownContentTypeDialog.prototype = {
+ params.handlerApp &&
+ params.handlerApp.executable &&
+ params.handlerApp.executable.isFile()
+ ) {
// Remember the file they chose to run.
this.chosenApp = params.handlerApp;
}
} else if ("@mozilla.org/applicationchooser;1" in Cc) {
- var nsIApplicationChooser = Ci.nsIApplicationChooser;
-- var appChooser = Cc["@mozilla.org/applicationchooser;1"]
-- .createInstance(nsIApplicationChooser);
-- appChooser.init(this.mDialog, this.dialogElement("strings").getString("chooseAppFilePickerTitle"));
+- var appChooser = Cc["@mozilla.org/applicationchooser;1"].createInstance(
+- nsIApplicationChooser
+- );
+- appChooser.init(
+- this.mDialog,
+- this.dialogElement("strings").getString("chooseAppFilePickerTitle")
+- );
- var contentTypeDialogObj = this;
- let appChooserCallback = function appChooserCallback_done(aResult) {
- if (aResult) {
-- contentTypeDialogObj.chosenApp = aResult.QueryInterface(Ci.nsILocalHandlerApp);
+- contentTypeDialogObj.chosenApp = aResult.QueryInterface(
+- Ci.nsILocalHandlerApp
+- );
- }
- contentTypeDialogObj.finishChooseApp();
- };
@@ -754,13 +234,19 @@ diff --git a/toolkit/mozapps/downloads/HelperAppDlg.jsm b/toolkit/mozapps/downlo
+ });
+ } else {
+ var nsIApplicationChooser = Ci.nsIApplicationChooser;
-+ var appChooser = Cc["@mozilla.org/applicationchooser;1"]
-+ .createInstance(nsIApplicationChooser);
-+ appChooser.init(this.mDialog, this.dialogElement("strings").getString("chooseAppFilePickerTitle"));
++ var appChooser = Cc["@mozilla.org/applicationchooser;1"].createInstance(
++ nsIApplicationChooser
++ );
++ appChooser.init(
++ this.mDialog,
++ this.dialogElement("strings").getString("chooseAppFilePickerTitle")
++ );
+ var contentTypeDialogObj = this;
+ let appChooserCallback = function appChooserCallback_done(aResult) {
+ if (aResult) {
-+ contentTypeDialogObj.chosenApp = aResult.QueryInterface(Ci.nsILocalHandlerApp);
++ contentTypeDialogObj.chosenApp = aResult.QueryInterface(
++ Ci.nsILocalHandlerApp
++ );
+ }
+ contentTypeDialogObj.finishChooseApp();
+ };
@@ -770,12 +256,12 @@ diff --git a/toolkit/mozapps/downloads/HelperAppDlg.jsm b/toolkit/mozapps/downlo
+ }
} else {
var nsIFilePicker = Ci.nsIFilePicker;
- var fp = Cc["@mozilla.org/filepicker;1"]
- .createInstance(nsIFilePicker);
- fp.init(this.mDialog,
- this.dialogElement("strings").getString("chooseAppFilePickerTitle"),
- nsIFilePicker.modeOpen);
-
+ var fp = Cc["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
+ fp.init(
+ this.mDialog,
+ this.dialogElement("strings").getString("chooseAppFilePickerTitle"),
+ nsIFilePicker.modeOpen
+ );
diff --git a/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp b/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp
--- a/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp
+++ b/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp
@@ -1809,7 +1295,7 @@ diff --git a/uriloader/exthandler/unix/nsOSHelperAppService.cpp b/uriloader/exth
diff --git a/widget/gtk/moz.build b/widget/gtk/moz.build
--- a/widget/gtk/moz.build
+++ b/widget/gtk/moz.build
-@@ -124,16 +124,17 @@ include('/ipc/chromium/chromium-config.m
+@@ -126,16 +126,17 @@ include('/ipc/chromium/chromium-config.m
FINAL_LIBRARY = 'xul'
@@ -1830,7 +1316,7 @@ diff --git a/widget/gtk/moz.build b/widget/gtk/moz.build
diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp
--- a/widget/gtk/nsFilePicker.cpp
+++ b/widget/gtk/nsFilePicker.cpp
-@@ -4,32 +4,34 @@
+@@ -4,16 +4,17 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "mozilla/Types.h"
@@ -1843,11 +1329,12 @@ diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp
#include "nsGtkUtils.h"
#include "nsIFileURL.h"
+ #include "nsIGIOService.h"
#include "nsIURI.h"
#include "nsIWidget.h"
#include "nsIFile.h"
#include "nsIStringBundle.h"
-
+@@ -21,16 +22,17 @@
#include "nsArrayEnumerator.h"
#include "nsMemory.h"
#include "nsEnumeratorUtils.h"
@@ -1865,7 +1352,7 @@ diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp
#define MAX_PREVIEW_SOURCE_SIZE 4096
nsIFile* nsFilePicker::mPrevDisplayDirectory = nullptr;
-@@ -227,17 +229,19 @@ nsFilePicker::AppendFilters(int32_t aFil
+@@ -228,17 +230,19 @@ nsFilePicker::AppendFilters(int32_t aFil
mAllowURLs = !!(aFilterMask & filterAllowURLs);
return nsBaseFilePicker::AppendFilters(aFilterMask);
}
@@ -1886,7 +1373,7 @@ diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp
mFilters.AppendElement(filter);
mFilterNames.AppendElement(name);
-@@ -337,16 +341,39 @@ nsresult nsFilePicker::Show(int16_t* aRe
+@@ -338,16 +342,39 @@ nsresult nsFilePicker::Show(int16_t* aRe
return NS_OK;
}
@@ -1926,7 +1413,7 @@ diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp
GtkFileChooserAction action = GetGtkFileChooserAction(mMode);
-@@ -572,16 +599,240 @@ void nsFilePicker::Done(void* file_choos
+@@ -573,16 +600,240 @@ void nsFilePicker::Done(void* file_choos
mCallback->Done(result);
mCallback = nullptr;
} else {