--- a/firefox-kde.patch Mon Aug 01 14:45:11 2016 +0200
+++ b/firefox-kde.patch Wed Jan 18 22:06:23 2017 +0100
@@ -1,11 +1,11 @@
# HG changeset patch
-# Parent 07e419c2bbc63c486d25fd8ce117abd10e9ebdba
+# Parent 2cb2f829aabd7e3efaa973a0a8cf99aca9605bdc
diff --git a/browser/base/content/browser-kde.xul b/browser/base/content/browser-kde.xul
new file mode 100644
--- /dev/null
+++ b/browser/base/content/browser-kde.xul
-@@ -0,0 +1,1174 @@
+@@ -0,0 +1,1200 @@
+#filter substitution
+<?xml version="1.0"?>
+# -*- Mode: HTML -*-
@@ -16,9 +16,10 @@
+
+<?xml-stylesheet href="chrome://browser/content/browser.css" type="text/css"?>
+<?xml-stylesheet href="chrome://browser/content/places/places.css" type="text/css"?>
++<?xml-stylesheet href="chrome://browser/content/usercontext/usercontext.css" type="text/css"?>
+<?xml-stylesheet href="chrome://devtools/skin/devtools-browser.css" type="text/css"?>
+<?xml-stylesheet href="chrome://browser/skin/controlcenter/panel.css" type="text/css"?>
-+<?xml-stylesheet href="chrome://browser/skin/customizableui/panelUIOverlay.css" type="text/css"?>
++<?xml-stylesheet href="chrome://browser/skin/customizableui/panelUI.css" type="text/css"?>
+<?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
+<?xml-stylesheet href="chrome://browser/skin/browser-lightweightTheme.css" type="text/css"?>
+
@@ -111,6 +112,12 @@
+ hidden="true"
+ oncommand="gBrowser.openNonRemoteWindow(TabContextMenu.contextTab);"/>
+#endif
++ <menuseparator id="context_sendTabToDevice_separator" hidden="true"/>
++ <menu id="context_sendTabToDevice" label="&sendTabToDevice.label;"
++ accesskey="&sendTabToDevice.accesskey;" hidden="true">
++ <menupopup id="context_sendTabToDevicePopupMenu"
++ onpopupshowing="gFxAccounts.populateSendTabToDevicesMenu(event.target, TabContextMenu.contextTab.linkedBrowser.currentURI.spec, TabContextMenu.contextTab.linkedBrowser.contentTitle);"/>
++ </menu>
+ <menuseparator/>
+ <menuitem id="context_reloadAllTabs" label="&reloadAllTabs.label;" accesskey="&reloadAllTabs.accesskey;"
+ tbattr="tabbrowser-multiple-visible"
@@ -296,18 +303,6 @@
+ noautofocus="true"
+ position="topcenter topright"/>
+
-+ <panel id="loop-notification-panel"
-+ class="loop-panel social-panel"
-+ type="arrow"
-+ hidden="true"
-+ noautofocus="true"/>
-+
-+ <panel id="loop-panel"
-+ class="loop-panel social-panel"
-+ type="arrow"
-+ orient="horizontal"
-+ hidden="true"/>
-+
+ <menupopup id="toolbar-context-menu"
+ onpopupshowing="onViewToolbarsPopupShowing(event, document.getElementById('viewToolbarsMenuSeparator'));">
+ <menuitem oncommand="gCustomizeMode.addToPanel(document.popupNode)"
@@ -388,9 +383,27 @@
+#include browser-context.inc
+ </menupopup>
+
-+ <menupopup id="placesContext"/>
++ <menupopup id="placesContext">
++ <menuseparator id="placesContext_recentlyBookmarkedSeparator"
++ ignoreitem="true"
++ hidden="true"/>
++ <menuitem id="placesContext_hideRecentlyBookmarked"
++ label="&hideRecentlyBookmarked.label;"
++ accesskey="&hideRecentlyBookmarked.accesskey;"
++ oncommand="BookmarkingUI.hideRecentlyBookmarked();"
++ closemenu="single"
++ ignoreitem="true"
++ hidden="true"/>
++ <menuitem id="placesContext_showRecentlyBookmarked"
++ label="&showRecentlyBookmarked.label;"
++ accesskey="&showRecentlyBookmarked.accesskey;"
++ oncommand="BookmarkingUI.showRecentlyBookmarked();"
++ closemenu="single"
++ ignoreitem="true"
++ hidden="true"/>
++ </menupopup>
+
-+ <panel id="ctrlTab-panel" class="KUI-panel" hidden="true" norestorefocus="true" level="top">
++ <panel id="ctrlTab-panel" hidden="true" norestorefocus="true" level="top">
+ <hbox>
+ <button class="ctrlTab-preview" flex="1"/>
+ <button class="ctrlTab-preview" flex="1"/>
@@ -404,21 +417,6 @@
+ </hbox>
+ </panel>
+
-+ <!-- Sync Panel -->
-+ <panel id="sync-start-panel" class="sync-panel" type="arrow" hidden="true"
-+ noautofocus="true" onclick="this.hidePopup();"
-+ flip="slide">
-+ <hbox class="sync-panel-outer">
-+ <image class="sync-panel-icon"/>
-+ <vbox class="sync-panel-inner">
-+ <description id="sync-start-panel-title"
-+ value="&syncStartPanel2.heading;"/>
-+ <description id="sync-start-panel-subtitle"
-+ value="&syncStartPanel2.subTitle;"/>
-+ </vbox>
-+ </hbox>
-+ </panel>
-+
+ <!-- Bookmarks and history tooltip -->
+ <tooltip id="bhTooltip"/>
+
@@ -558,12 +556,11 @@
+ <toolbox id="navigator-toolbox" mode="icons">
+ <!-- Menu -->
+ <toolbar type="menubar" id="toolbar-menubar" class="chromeclass-menubar" customizable="true"
-+ defaultset="menubar-items"
+ mode="icons" iconsize="small"
+#ifdef MENUBAR_CAN_AUTOHIDE
+ toolbarname="&menubarCmd.label;"
+ accesskey="&menubarCmd.accesskey;"
-+#if defined(MOZ_WIDGET_GTK) || defined(MOZ_WIDGET_QT)
++#if defined(MOZ_WIDGET_GTK)
+ autohide="true"
+#endif
+#endif
@@ -590,10 +587,9 @@
+ iconsize="small"
+ aria-label="&tabsToolbar.label;"
+ context="toolbar-context-menu"
-+ defaultset="tabbrowser-tabs,new-tab-button,alltabs-button"
+ collapsed="true">
+
-+#if defined(MOZ_WIDGET_GTK) || defined(MOZ_WIDGET_QT)
++#if defined(MOZ_WIDGET_GTK)
+ <hbox id="private-browsing-indicator"
+ skipintoolbarset="true"/>
+#endif
@@ -634,11 +630,16 @@
+ key="key_undoCloseTab"
+ label="&undoCloseTab.label;"
+ observes="History:UndoCloseTab"/>
-+ <menuseparator id="alltabs-popup-separator"/>
++ <menuseparator id="alltabs-popup-separator-1"/>
++ <menu id="alltabs_containersTab"
++ label="&newUserContext.label;">
++ <menupopup id="alltabs_containersMenuTab" />
++ </menu>
++ <menuseparator id="alltabs-popup-separator-2"/>
+ </menupopup>
+ </toolbarbutton>
+
-+#if !defined(MOZ_WIDGET_GTK) && !defined(MOZ_WIDGET_QT)
++#if !defined(MOZ_WIDGET_GTK)
+ <hbox class="private-browsing-indicator" skipintoolbarset="true"/>
+#endif
+#ifdef CAN_DRAW_IN_TITLEBAR
@@ -657,21 +658,10 @@
+#endif
+ </toolbar>
+
-+ <!--
-+ CAVEAT EMPTOR
-+ Should you need to add items to the toolbar here, make sure to also add them
-+ to the default placements of buttons in CustomizableUI.jsm, so the
-+ customization code doesn't get confused.
-+ -->
+ <toolbar id="nav-bar"
+ aria-label="&navbarCmd.label;"
+ fullscreentoolbar="true" mode="icons" customizable="true"
+ iconsize="small"
-+#ifdef MOZ_DEV_EDITION
-+ defaultset="urlbar-container,search-container,developer-button,bookmarks-menu-button,downloads-button,home-button,loop-button"
-+#else
-+ defaultset="urlbar-container,search-container,bookmarks-menu-button,downloads-button,home-button,loop-button"
-+#endif
+ customizationtarget="nav-bar-customization-target"
+ overflowable="true"
+ overflowbutton="nav-bar-overflow-button"
@@ -715,46 +705,6 @@
+ pageproxystate="invalid"
+ onfocus="document.getElementById('identity-box').style.MozUserFocus= 'normal'"
+ onblur="setTimeout(() => { document.getElementById('identity-box').style.MozUserFocus = ''; }, 0);">
-+ <box id="notification-popup-box" hidden="true" align="center">
-+ <image id="default-notification-icon" class="notification-anchor-icon" role="button"
-+ aria-label="&urlbar.defaultNotificationAnchor.label;"/>
-+ <image id="geo-notification-icon" class="notification-anchor-icon" role="button"
-+ aria-label="&urlbar.geolocationNotificationAnchor.label;"/>
-+ <image id="addons-notification-icon" class="notification-anchor-icon" role="button"
-+ aria-label="&urlbar.addonsNotificationAnchor.label;"/>
-+ <image id="indexedDB-notification-icon" class="notification-anchor-icon" role="button"
-+ aria-label="&urlbar.indexedDBNotificationAnchor.label;"/>
-+ <image id="login-fill-notification-icon" class="notification-anchor-icon" role="button"
-+ aria-label="&urlbar.loginFillNotificationAnchor.label;"/>
-+ <image id="password-notification-icon" class="notification-anchor-icon" role="button"
-+ aria-label="&urlbar.passwordNotificationAnchor.label;"/>
-+ <image id="plugins-notification-icon" class="notification-anchor-icon" role="button"
-+ aria-label="&urlbar.pluginsNotificationAnchor.label;"/>
-+ <image id="web-notifications-notification-icon" class="notification-anchor-icon" role="button"
-+ aria-label="&urlbar.webNotsNotificationAnchor3.label;"/>
-+ <image id="webRTC-shareDevices-notification-icon" class="notification-anchor-icon" role="button"
-+ aria-label="&urlbar.webRTCShareDevicesNotificationAnchor.label;"/>
-+ <image id="webRTC-sharingDevices-notification-icon" class="notification-anchor-icon" role="button"
-+ aria-label="&urlbar.webRTCSharingDevicesNotificationAnchor.label;"/>
-+ <image id="webRTC-shareMicrophone-notification-icon" class="notification-anchor-icon" role="button"
-+ aria-label="&urlbar.webRTCShareMicrophoneNotificationAnchor.label;"/>
-+ <image id="webRTC-sharingMicrophone-notification-icon" class="notification-anchor-icon" role="button"
-+ aria-label="&urlbar.webRTCSharingMicrophoneNotificationAnchor.label;"/>
-+ <image id="webRTC-shareScreen-notification-icon" class="notification-anchor-icon" role="button"
-+ aria-label="&urlbar.webRTCShareScreenNotificationAnchor.label;"/>
-+ <image id="webRTC-sharingScreen-notification-icon" class="notification-anchor-icon" role="button"
-+ aria-label="&urlbar.webRTCSharingScreenNotificationAnchor.label;"/>
-+ <image id="pointerLock-notification-icon" class="notification-anchor-icon" role="button"
-+ aria-label="&urlbar.pointerLockNotificationAnchor.label;"/>
-+ <image id="servicesInstall-notification-icon" class="notification-anchor-icon" role="button"
-+ aria-label="&urlbar.servicesNotificationAnchor.label;"/>
-+ <image id="translate-notification-icon" class="notification-anchor-icon" role="button"
-+ aria-label="&urlbar.translateNotificationAnchor.label;"/>
-+ <image id="translated-notification-icon" class="notification-anchor-icon" role="button"
-+ aria-label="&urlbar.translatedNotificationAnchor.label;"/>
-+ <image id="eme-notification-icon" class="notification-anchor-icon" role="button"
-+ aria-label="&urlbar.emeNotificationAnchor.label;"/>
-+ </box>
+ <!-- Use onclick instead of normal popup= syntax since the popup
+ code fires onmousedown, and hence eats our favicon drag events.
+ We only add the identity-box button to the tab order when the location bar
@@ -768,6 +718,67 @@
+ <image id="identity-icon"
+ consumeanchor="identity-box"
+ onclick="PageProxyClickHandler(event);"/>
++ <box id="blocked-permissions-container" align="center" tooltiptext="">
++ <image data-permission-id="geo" class="notification-anchor-icon geo-icon blocked" role="button"
++ aria-label="&urlbar.geolocationNotificationAnchor.label;"/>
++ <image data-permission-id="desktop-notification" class="notification-anchor-icon desktop-notification-icon blocked" role="button"
++ aria-label="&urlbar.webNotsNotificationAnchor3.label;"/>
++ <image data-permission-id="camera" class="notification-anchor-icon camera-icon blocked" role="button"
++ aria-label="&urlbar.webRTCShareDevicesNotificationAnchor.label;"/>
++ <image data-permission-id="indexedDB" class="notification-anchor-icon indexedDB-icon blocked" role="button"
++ aria-label="&urlbar.indexedDBNotificationAnchor.label;"/>
++ <image data-permission-id="microphone" class="notification-anchor-icon microphone-icon blocked" role="button"
++ aria-label="&urlbar.webRTCShareMicrophoneNotificationAnchor.label;"/>
++ <image data-permission-id="screen" class="notification-anchor-icon screen-icon blocked" role="button"
++ aria-label="&urlbar.webRTCShareScreenNotificationAnchor.label;"/>
++ <image data-permission-id="pointerLock" class="notification-anchor-icon pointerLock-icon blocked" role="button"
++ aria-label="&urlbar.pointerLockNotificationAnchor.label;"/>
++ </box>
++ <box id="notification-popup-box"
++ hidden="true"
++ tooltiptext=""
++ onmouseover="document.getElementById('identity-icon').classList.add('no-hover');"
++ onmouseout="document.getElementById('identity-icon').classList.remove('no-hover');"
++ align="center">
++ <image id="default-notification-icon" class="notification-anchor-icon" role="button"
++ aria-label="&urlbar.defaultNotificationAnchor.label;"/>
++ <image id="geo-notification-icon" class="notification-anchor-icon geo-icon" role="button"
++ aria-label="&urlbar.geolocationNotificationAnchor.label;"/>
++ <image id="addons-notification-icon" class="notification-anchor-icon install-icon" role="button"
++ aria-label="&urlbar.addonsNotificationAnchor.label;"/>
++ <image id="indexedDB-notification-icon" class="notification-anchor-icon indexedDB-icon" role="button"
++ aria-label="&urlbar.indexedDBNotificationAnchor.label;"/>
++ <image id="login-fill-notification-icon" class="notification-anchor-icon login-icon" role="button"
++ aria-label="&urlbar.loginFillNotificationAnchor.label;"/>
++ <image id="password-notification-icon" class="notification-anchor-icon login-icon" role="button"
++ aria-label="&urlbar.passwordNotificationAnchor.label;"/>
++ <image id="plugins-notification-icon" class="notification-anchor-icon plugin-icon" role="button"
++ aria-label="&urlbar.pluginsNotificationAnchor.label;"/>
++ <image id="web-notifications-notification-icon" class="notification-anchor-icon desktop-notification-icon" role="button"
++ aria-label="&urlbar.webNotsNotificationAnchor3.label;"/>
++ <image id="webRTC-shareDevices-notification-icon" class="notification-anchor-icon camera-icon" role="button"
++ aria-label="&urlbar.webRTCShareDevicesNotificationAnchor.label;"/>
++ <image id="webRTC-sharingDevices-notification-icon" class="notification-anchor-icon camera-icon in-use" role="button"
++ aria-label="&urlbar.webRTCSharingDevicesNotificationAnchor.label;"/>
++ <image id="webRTC-shareMicrophone-notification-icon" class="notification-anchor-icon microphone-icon" role="button"
++ aria-label="&urlbar.webRTCShareMicrophoneNotificationAnchor.label;"/>
++ <image id="webRTC-sharingMicrophone-notification-icon" class="notification-anchor-icon microphone-icon in-use" role="button"
++ aria-label="&urlbar.webRTCSharingMicrophoneNotificationAnchor.label;"/>
++ <image id="webRTC-shareScreen-notification-icon" class="notification-anchor-icon screen-icon" role="button"
++ aria-label="&urlbar.webRTCShareScreenNotificationAnchor.label;"/>
++ <image id="webRTC-sharingScreen-notification-icon" class="notification-anchor-icon screen-icon in-use" role="button"
++ aria-label="&urlbar.webRTCSharingScreenNotificationAnchor.label;"/>
++ <image id="pointerLock-notification-icon" class="notification-anchor-icon pointerLock-icon" role="button"
++ aria-label="&urlbar.pointerLockNotificationAnchor.label;"/>
++ <image id="servicesInstall-notification-icon" class="notification-anchor-icon service-icon" role="button"
++ aria-label="&urlbar.servicesNotificationAnchor.label;"/>
++ <image id="translate-notification-icon" class="notification-anchor-icon translation-icon" role="button"
++ aria-label="&urlbar.translateNotificationAnchor.label;"/>
++ <image id="translated-notification-icon" class="notification-anchor-icon translation-icon in-use" role="button"
++ aria-label="&urlbar.translatedNotificationAnchor.label;"/>
++ <image id="eme-notification-icon" class="notification-anchor-icon drm-icon" role="button"
++ aria-label="&urlbar.emeNotificationAnchor.label;"/>
++ </box>
+ <image id="tracking-protection-icon"/>
+ <image id="connection-icon"/>
+ <hbox id="identity-icon-labels">
@@ -789,7 +800,7 @@
+ hidden="true"
+ onclick="ReaderParent.buttonClick(event);"/>
+ </hbox>
-+ <hbox id="userContext-icons">
++ <hbox id="userContext-icons" hidden="true">
+ <label id="userContext-label"/>
+ <image id="userContext-indicator"/>
+ </hbox>
@@ -856,6 +867,11 @@
+ command="Browser:ShowAllBookmarks"
+ key="manBookmarkKb"/>
+ <menuseparator/>
++ <menuitem label="&recentBookmarks.label;"
++ id="BMB_recentBookmarks"
++ disabled="true"
++ class="menuitem-iconic subviewbutton"/>
++ <menuseparator/>
+ <menu id="BMB_bookmarksToolbar"
+ class="menu-iconic bookmark-item subviewbutton"
+ label="&personalbarCmd.label;"
@@ -967,7 +983,6 @@
+ mode="icons" iconsize="small"
+ class="chromeclass-directories"
+ context="toolbar-context-menu"
-+ defaultset="personal-bookmarks"
+ toolbarname="&personalbarCmd.label;" accesskey="&personalbarCmd.accesskey;"
+ collapsed="true"
+ customizable="true">
@@ -1134,13 +1149,13 @@
+#include ../../components/customizableui/content/customizeMode.inc.xul
+ </deck>
+
-+ <html:div id="fullscreen-warning" hidden="true">
-+ <html:div id="fullscreen-domain-text">
++ <html:div id="fullscreen-warning" class="pointerlockfswarning" hidden="true">
++ <html:div class="pointerlockfswarning-domain-text">
+ &fullscreenWarning.beforeDomain.label;
-+ <html:span id="fullscreen-domain"/>
++ <html:span class="pointerlockfswarning-domain"/>
+ &fullscreenWarning.afterDomain.label;
+ </html:div>
-+ <html:div id="fullscreen-generic-text">
++ <html:div class="pointerlockfswarning-generic-text">
+ &fullscreenWarning.generic.label;
+ </html:div>
+ <html:button id="fullscreen-exit-button"
@@ -1153,6 +1168,17 @@
+ </html:button>
+ </html:div>
+
++ <html:div id="pointerlock-warning" class="pointerlockfswarning" hidden="true">
++ <html:div class="pointerlockfswarning-domain-text">
++ &pointerlockWarning.beforeDomain.label;
++ <html:span class="pointerlockfswarning-domain"/>
++ &pointerlockWarning.afterDomain.label;
++ </html:div>
++ <html:div class="pointerlockfswarning-generic-text">
++ &pointerlockWarning.generic.label;
++ </html:div>
++ </html:div>
++
+ <vbox id="browser-bottombox" layer="true">
+ <notificationbox id="global-notificationbox" notificationside="bottom"/>
+ </vbox>
@@ -1183,7 +1209,7 @@
diff --git a/browser/base/jar.mn b/browser/base/jar.mn
--- a/browser/base/jar.mn
+++ b/browser/base/jar.mn
-@@ -69,16 +69,18 @@ browser.jar:
+@@ -68,16 +68,18 @@ browser.jar:
content/browser/aboutTabCrashed.css (content/aboutTabCrashed.css)
content/browser/aboutTabCrashed.js (content/aboutTabCrashed.js)
content/browser/aboutTabCrashed.xhtml (content/aboutTabCrashed.xhtml)
@@ -1200,7 +1226,7 @@
content/browser/browser-data-submission-info-bar.js (content/browser-data-submission-info-bar.js)
content/browser/browser-devedition.js (content/browser-devedition.js)
content/browser/browser-feeds.js (content/browser-feeds.js)
- content/browser/browser-fullScreen.js (content/browser-fullScreen.js)
+ content/browser/browser-fullScreenAndPointerLock.js (content/browser-fullScreenAndPointerLock.js)
content/browser/browser-fullZoom.js (content/browser-fullZoom.js)
diff --git a/browser/components/build/nsModule.cpp b/browser/components/build/nsModule.cpp
--- a/browser/components/build/nsModule.cpp
@@ -1288,7 +1314,7 @@
// when the user will select the default. We refresh here periodically
// in case the default changes. On other Windows OS's defaults can also
// be set while the prefs are open.
-@@ -736,16 +742,27 @@ var gMainPane = {
+@@ -703,16 +709,27 @@ var gMainPane = {
let alwaysCheckPref = document.getElementById("browser.shell.checkDefaultBrowser");
alwaysCheckPref.value = true;
@@ -1631,7 +1657,7 @@
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
-@@ -689,16 +689,17 @@
+@@ -674,16 +674,17 @@
@RESPATH@/greprefs.js
@RESPATH@/defaults/autoconfig/prefcalls.js
@RESPATH@/browser/defaults/permissions
@@ -1643,9 +1669,9 @@
+@BINPATH@/defaults/pref/kde.js
; Services (gre) prefs
- #ifdef MOZ_SERVICES_NOTIFICATIONS
- @RESPATH@/defaults/pref/services-notifications.js
- #endif
@RESPATH@/defaults/pref/services-sync.js
; [Layout Engine Resources]
+ ; Style Sheets, Graphics and other Resources used by the layout engine.
+ @RESPATH@/res/EditorOverride.css
+ @RESPATH@/res/contenteditable.css