diff --git a/MozillaFirefox.changes b/MozillaFirefox.changes
index db6c29c..73f98f3 100644
--- a/MozillaFirefox.changes
+++ b/MozillaFirefox.changes
@@ -1,3 +1,77 @@
+-------------------------------------------------------------------
+Fri Mar 16 06:40:11 UTC 2018 - wr@rosenauer.org
+
+- update to Firefox 59.0.1 (bsc#1085671)
+ MFSA 2018-08
+ * CVE-2018-5146 (bmo#1446062)
+ Vorbis audio processing out of bounds write
+ * CVE-2018-5147 (bmo#1446365)
+ Out of bounds memory write in libtremor
+ (mozilla-bmo1446062.patch)
+
+-------------------------------------------------------------------
+Wed Mar 14 19:27:07 UTC 2018 - cgrobertson@suse.com
+
+- Added patch:
+ * mozilla-bmo1005535.patch:
+ Enable skia_gpu on big endian platforms.
+
+-------------------------------------------------------------------
+Sun Mar 11 22:12:12 UTC 2018 - wr@rosenauer.org
+
+- update to Firefox 59.0
+ * Performance enhancements
+ * Drag-and-drop to rearrange Top Sites on the Firefox Home page
+ * added features for Firefox Screenshots
+ * Enhanced WebExtensions API
+ * Improved RTC capabilities
+ MFSA 2018-06 (bsc#1085130)
+ * CVE-2018-5127 (bmo#1430557)
+ Buffer overflow manipulating SVG animatedPathSegList
+ * CVE-2018-5128 (bmo#1431336)
+ Use-after-free manipulating editor selection ranges
+ * CVE-2018-5129 (bmo#1428947)
+ Out-of-bounds write with malformed IPC messages
+ * CVE-2018-5130 (bmo#1433005)
+ Mismatched RTP payload type can trigger memory corruption
+ * CVE-2018-5131 (bmo#1440775)
+ Fetch API improperly returns cached copies of no-store/no-cache resources
+ * CVE-2018-5132 (bmo#1408194)
+ WebExtension Find API can search privileged pages
+ * CVE-2018-5133 (bmo#1430511, bmo#1430974)
+ Value of the app.support.baseURL preference is not properly sanitized
+ * CVE-2018-5134 (bmo#1429379)
+ WebExtensions may use view-source: URLs to bypass content restrictions
+ * CVE-2018-5135 (bmo#1431371)
+ WebExtension browserAction can inject scripts into unintended contexts
+ * CVE-2018-5136 (bmo#1419166)
+ Same-origin policy violation with data: URL shared workers
+ * CVE-2018-5137 (bmo#1432870)
+ Script content can access legacy extension non-contentaccessible resources
+ * CVE-2018-5138 (bmo#1432624) (Android only)
+ Android Custom Tab address spoofing through long domain names
+ * CVE-2018-5140 (bmo#1424261)
+ Moz-icon images accessible to web content through moz-icon: protocol
+ * CVE-2018-5141 (bmo#1429093)
+ DOS attack through notifications Push API
+ * CVE-2018-5142 (bmo#1366357)
+ Media Capture and Streams API permissions display incorrect origin
+ with data: and blob: URLs
+ * CVE-2018-5143 (bmo#1422643)
+ Self-XSS pasting javascript: URL with embedded tab into addressbar
+ * CVE-2018-5126
+ Memory safety bugs fixed in Firefox 59
+ * CVE-2018-5125
+ Memory safety bugs fixed in Firefox 59 and Firefox ESR 52.7
+- requires NSPR 4.18 and NSS 3.35
+- requires rust >= 1.22.1
+- removed obsolete patches:
+ mozilla-alsa-sandbox.patch
+ mozilla-enable-csd.patch
+ firefox-no-default-ualocale.patch
+- removed l10n_changesets.txt since same information is now in
+ Firefox source tree (updated create-tar.sh now requires jq)
+
-------------------------------------------------------------------
Fri Feb 9 13:37:46 UTC 2018 - astieger@suse.com
@@ -25,7 +99,7 @@ Mon Jan 29 22:32:21 UTC 2018 - wr@rosenauer.org
- update to Firefox 58.0.1
MFSA 2018-05
- * Arbitrary code execution through unsanitized browser UI (bmo#1432966)
+ * Arbitrary code execution through unsanitized browser UI (bmo#1432966)
- use correct language packs
- readd mozilla-enable-csd.patch as it only lands for FF59 upstream
- allow larger number of nested elements (mozilla-bmo256180.patch)
diff --git a/MozillaFirefox.spec b/MozillaFirefox.spec
index 3e9e213..f2bbd8c 100644
--- a/MozillaFirefox.spec
+++ b/MozillaFirefox.spec
@@ -18,11 +18,11 @@
# changed with every update
-%define major 58
-%define mainver %major.0.2
+%define major 59
+%define mainver %major.0.1
%define update_channel release
%define branding 1
-%define releasedate 20180207000000
+%define releasedate 20180315233128
# PIE, full relro (x86_64 for now)
%define build_hardened 1
@@ -70,11 +70,11 @@ BuildRequires: libiw-devel
BuildRequires: libnotify-devel
BuildRequires: libproxy-devel
BuildRequires: makeinfo
-BuildRequires: mozilla-nspr-devel >= 4.17
-BuildRequires: mozilla-nss-devel >= 3.34.1
+BuildRequires: mozilla-nspr-devel >= 4.18
+BuildRequires: mozilla-nss-devel >= 3.35
BuildRequires: python-devel
BuildRequires: python2-xml
-BuildRequires: rust >= 1.21
+BuildRequires: rust >= 1.22.1
BuildRequires: rust-std
BuildRequires: startup-notification-devel
BuildRequires: unzip
@@ -136,7 +136,6 @@ Source13: spellcheck.js
Source14: create-tar.sh
Source15: firefox-appdata.xml
Source16: MozillaFirefox.changes
-Source17: l10n_changesets.txt
# Set up API keys, see http://www.chromium.org/developers/how-tos/api-keys
# Note: these are for the openSUSE Firefox builds ONLY. For your own distribution,
# please get your own set of keys.
@@ -150,13 +149,12 @@ Patch4: mozilla-openaes-decl.patch
Patch5: mozilla-no-stdcxx-check.patch
Patch6: mozilla-reduce-files-per-UnifiedBindings.patch
Patch7: mozilla-aarch64-startup-crash.patch
-Patch8: mozilla-enable-csd.patch
-Patch9: mozilla-bmo256180.patch
-Patch10: mozilla-alsa-sandbox.patch
+Patch8: mozilla-bmo256180.patch
+Patch9: mozilla-bmo1005535.patch
+Patch10: mozilla-bmo1446062.patch
# Firefox/browser
Patch101: firefox-kde.patch
-Patch102: firefox-no-default-ualocale.patch
-Patch103: firefox-branded-icons.patch
+Patch102: firefox-branded-icons.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Requires(post): coreutils shared-mime-info desktop-file-utils
@@ -269,7 +267,6 @@ cd $RPM_BUILD_DIR/mozilla
# Firefox
%patch101 -p1
%patch102 -p1
-%patch103 -p1
%build
# no need to add build time to binaries
@@ -340,7 +337,7 @@ ac_add_options --enable-optimize="-g -O2"
ac_add_options --disable-optimize
%endif
%endif
-%ifarch ppc ppc64 ppc64le %arm
+%ifarch %arm
ac_add_options --disable-elf-hack
%endif
ac_add_options --with-system-nspr
@@ -404,7 +401,7 @@ install -m 644 %{SOURCE9} %{buildroot}%{progdir}/browser/defaults/preferences/fi
%if %localize
rm -f %{_tmppath}/translations.*
touch %{_tmppath}/translations.{common,other}
-for locale in $(awk '{ print $1; }' %{SOURCE17}); do
+for locale in $(cat $RPM_BUILD_DIR/mozilla/browser/locales/shipped-locales) ; do
case $locale in
ja-JP-mac|en-US|'')
;;
@@ -475,10 +472,10 @@ cp %{SOURCE11} %{buildroot}%{_mandir}/man1/%{progname}.1
mkdir -p %{buildroot}%{_datadir}/mozilla/extensions/%{firefox_appid}
mkdir -p %{buildroot}%{_libdir}/mozilla/extensions/%{firefox_appid}
mkdir -p %{buildroot}/usr/share/pixmaps/
-ln -sf %{progdir}/browser/icons/mozicon128.png %{buildroot}/usr/share/pixmaps/%{progname}.png
-ln -sf %{progdir}/browser/icons/mozicon128.png %{buildroot}/usr/share/pixmaps/%{progname}-gnome.png
+ln -sf %{progdir}/browser/chrome/icons/default/default128.png %{buildroot}/usr/share/pixmaps/%{progname}.png
+ln -sf %{progdir}/browser/chrome/icons/default/default128.png %{buildroot}/usr/share/pixmaps/%{progname}-gnome.png
%if %branding
-for size in 16 22 24 32 48 256; do
+for size in 16 22 24 32 48 64 128 256; do
%else
for size in 16 32 48; do
%endif
@@ -566,7 +563,6 @@ exit 0
%dir %{progdir}/browser/extensions/
%{progdir}/browser/defaults
%{progdir}/browser/features/
-%{progdir}/browser/icons/
%{progdir}/browser/chrome/icons
%{progdir}/browser/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}.xpi
%{progdir}/browser/blocklist.xml
@@ -585,7 +581,7 @@ exit 0
%{progdir}/application.ini
%{progdir}/chrome.manifest
%{progdir}/dependentlibs.list
-%{progdir}/icudt59l.dat
+%{progdir}/icudt*.dat
%{progdir}/*.so
%{progdir}/omni.ja
%{progdir}/fonts/
diff --git a/_constraints b/_constraints
index 61bd64a..2ec300e 100644
--- a/_constraints
+++ b/_constraints
@@ -5,7 +5,7 @@
16
- 9000
+ 12
diff --git a/compare-locales.tar.xz b/compare-locales.tar.xz
index 981431e..bfe8c84 100644
--- a/compare-locales.tar.xz
+++ b/compare-locales.tar.xz
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b2528402c5a3381c83db0116efe05064251b57a7597ef936d3d831b57b2870b3
-size 28816
+oid sha256:cdd97af0fb4589f385a87d15d405b8416aed9fb644b8688ffb1e87b87a207d1c
+size 28360
diff --git a/create-tar.sh b/create-tar.sh
index e43286b..411a053 100644
--- a/create-tar.sh
+++ b/create-tar.sh
@@ -7,8 +7,13 @@
CHANNEL="release"
BRANCH="releases/mozilla-$CHANNEL"
-RELEASE_TAG="FIREFOX_58_0_2_RELEASE"
-VERSION="58.0.2"
+RELEASE_TAG="FIREFOX_59_0_1_RELEASE"
+VERSION="59.0.1"
+
+# check required tools
+test -x /usr/bin/hg || ( echo "hg missing: execute zypper in mercurial"; exit 5 )
+test -x /usr/bin/jq || ( echo "jq missing: execute zypper in jq"; exit 5 )
+
# mozilla
if [ -d mozilla ]; then
@@ -54,19 +59,19 @@ tar $compression -cf firefox-$VERSION-source.tar.xz --exclude=.hgtags --exclude=
# l10n
echo "fetching locales..."
test ! -d l10n && mkdir l10n
-for locale in $(awk '{ print $1; }' l10n_changesets.txt); do
- case $locale in
- ja-JP-mac|en-US)
- ;;
- *)
- echo "reading changeset information for $locale"
- _changeset=$(grep ^$locale l10n_changesets.txt | awk '{ print $2; }')
- echo "fetching $locale changeset $_changeset ..."
- hg clone http://hg.mozilla.org/l10n-central/$locale l10n/$locale
- [ "$RELEASE_TAG" == "default" ] || hg -R l10n/$locale up -C -r $_changeset
- ;;
- esac
-done
+jq -r 'to_entries[]| "\(.key) \(.value|.revision)"' mozilla/browser/locales/l10n-changesets.json | \
+ while read locale changeset ; do
+ case $locale in
+ ja-JP-mac|en-US)
+ ;;
+ *)
+ echo "reading changeset information for $locale"
+ echo "fetching $locale changeset $changeset ..."
+ hg clone http://hg.mozilla.org/l10n-central/$locale l10n/$locale
+ [ "$RELEASE_TAG" == "default" ] || hg -R l10n/$locale up -C -r $changeset
+ ;;
+ esac
+ done
echo "creating l10n archive..."
tar $compression -cf l10n-$VERSION.tar.xz --exclude=.hgtags --exclude=.hgignore --exclude=.hg l10n
diff --git a/firefox-58.0.2-source.tar.xz b/firefox-58.0.2-source.tar.xz
deleted file mode 100644
index 761d56b..0000000
--- a/firefox-58.0.2-source.tar.xz
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:4dda38d4eea0b9be6ee116cb304e43d1fdfcf74a32dfcad56068c50255665eb2
-size 274076776
diff --git a/firefox-59.0.1-source.tar.xz b/firefox-59.0.1-source.tar.xz
new file mode 100644
index 0000000..c41e704
--- /dev/null
+++ b/firefox-59.0.1-source.tar.xz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:880faed22ce6e5c305117e0771ad476995884a7f2599ca72b0587cb96eb57523
+size 262899092
diff --git a/firefox-branded-icons.patch b/firefox-branded-icons.patch
index 8a47c13..8c1ffa1 100644
--- a/firefox-branded-icons.patch
+++ b/firefox-branded-icons.patch
@@ -1,39 +1,30 @@
# HG changeset patch
# Parent e0751ad74e835e80041a61ea00c2a63bf6fbe2de
-# Parent 75308bbaaf73d672c88cb283591d4aefc7db9804
+# Parent 38e46d7f98d3e392de95d83660ecd147b30dc9aa
diff --git a/browser/branding/branding-common.mozbuild b/browser/branding/branding-common.mozbuild
--- a/browser/branding/branding-common.mozbuild
+++ b/browser/branding/branding-common.mozbuild
-@@ -38,18 +38,24 @@ def FirefoxBranding():
- 'disk.icns',
- 'document.icns',
- 'dsstore',
- 'firefox.icns',
+@@ -17,12 +17,15 @@ def FirefoxBranding():
+ FINAL_TARGET_FILES.VisualElements += [
+ 'VisualElements_150.png',
+ 'VisualElements_70.png',
]
elif 'gtk' in CONFIG['MOZ_WIDGET_TOOLKIT']:
- BRANDING_FILES += [
- 'default16.png',
-+ 'default22.png',
-+ 'default24.png',
-+ 'default256.png',
- 'default32.png',
- 'default48.png',
- 'mozicon128.png',
- ]
- FINAL_TARGET_FILES.icons += ['mozicon128.png']
FINAL_TARGET_FILES.chrome.icons.default += [
+ 'default128.png',
'default16.png',
-+ 'default22.png',
-+ 'default24.png',
-+ 'default256.png',
++ 'default22.png',
++ 'default24.png',
++ 'default256.png',
'default32.png',
'default48.png',
+ 'default64.png',
]
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
-@@ -618,18 +618,21 @@
+@@ -601,20 +601,23 @@
@RESPATH@/browser/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/chrome.manifest
@RESPATH@/browser/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf
@RESPATH@/chrome/toolkit@JAREXT@
@@ -46,6 +37,8 @@ diff --git a/browser/installer/package-manifest.in b/browser/installer/package-m
+@RESPATH@/browser/chrome/icons/default/default24.png
@RESPATH@/browser/chrome/icons/default/default32.png
@RESPATH@/browser/chrome/icons/default/default48.png
+ @RESPATH@/browser/chrome/icons/default/default64.png
+ @RESPATH@/browser/chrome/icons/default/default128.png
+@RESPATH@/browser/chrome/icons/default/default256.png
#endif
@RESPATH@/browser/features/*
diff --git a/firefox-kde.patch b/firefox-kde.patch
index ff51f53..f81ad40 100644
--- a/firefox-kde.patch
+++ b/firefox-kde.patch
@@ -1,11 +1,11 @@
# HG changeset patch
-# Parent 89cbe8c49d05965b87815143d1944ab6964f12c7
+# Parent ffcd96e120857e207bd357b2005f0b5bc776e375
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,1248 @@
+@@ -0,0 +1,1238 @@
+#filter substitution
+
+# -*- Mode: HTML -*-
@@ -286,26 +286,26 @@ new file mode 100644
+ key="viewBookmarksSidebarKb"
+ observes="viewBookmarksSidebar"
+ oncommand="SidebarUI.show('viewBookmarksSidebar');">
-+
-+
++
++
+
++
++
+
-+
-+
++
++
+
++
++
+
@@ -425,15 +425,15 @@ new file mode 100644
+ emailLink-title="&emailPageCmd.label;"
+ sendToDevice-title="&pageAction.sendTabToDevice.label;"
+ sendToDevice-notReadyTitle="&sendToDevice.syncNotReady.label;">
-+
++
+
+
+
-+
++
+
+
++ sendToDeviceFeedback="&sendToDeviceFeedback.label;"
++ sendToDeviceOfflineFeedback="&sendToDeviceOfflineFeedback.label;">
+
+
+
@@ -603,13 +604,10 @@ new file mode 100644
+
+#endif
+
-+
-+
-+
-+
++
+
+
+
-+
-+
+
+
+
+
+
-+
-+#
-+
+
diff --git a/browser/base/jar.mn b/browser/base/jar.mn
--- a/browser/base/jar.mn
+++ b/browser/base/jar.mn
-@@ -52,16 +52,18 @@ browser.jar:
+@@ -45,16 +45,18 @@ browser.jar:
content/browser/aboutRobots-icon.png (content/aboutRobots-icon.png)
content/browser/aboutRobots-widget-left.png (content/aboutRobots-widget-left.png)
content/browser/aboutTabCrashed.css (content/aboutTabCrashed.css)
@@ -1339,7 +1329,7 @@ diff --git a/browser/components/build/nsModule.cpp b/browser/components/build/ns
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
-@@ -193,16 +193,23 @@ var gMainPane = {
+@@ -330,16 +330,23 @@ var gMainPane = {
this._backoffIndex++ : backoffTimes.length - 1]);
};
@@ -1363,7 +1353,7 @@ diff --git a/browser/components/preferences/in-content/main.js b/browser/compone
performanceSettingsLink.setAttribute("href", performanceSettingsUrl);
this.updateDefaultPerformanceSettingsPref();
-@@ -898,16 +905,27 @@ var gMainPane = {
+@@ -1035,16 +1042,27 @@ var gMainPane = {
// Reset exponential backoff delay time in order to do visual update in pollForDefaultBrowser.
this._backoffIndex = 0;
@@ -1707,7 +1697,7 @@ new file mode 100644
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
-@@ -657,16 +657,18 @@
+@@ -649,16 +649,18 @@
@RESPATH@/browser/defaults/blocklists
@RESPATH@/browser/defaults/pinning
diff --git a/firefox-no-default-ualocale.patch b/firefox-no-default-ualocale.patch
deleted file mode 100644
index 907c653..0000000
--- a/firefox-no-default-ualocale.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-# HG changeset patch
-# User Wolfgang Rosenauer
-# Parent 099312626f5f7c9cb5573a61d0230574ee12a660
-# Parent 3d1dbfbdfa41b433352fadf3efe4a21cb45a468f
-Do not overwrite the locale dynamic pref from xulrunner's all.js with a wrong default value
-
-diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
---- a/browser/app/profile/firefox.js
-+++ b/browser/app/profile/firefox.js
-@@ -219,17 +219,17 @@ pref("browser.uitour.requireSecure", tru
- pref("browser.uitour.themeOrigin", "https://addons.mozilla.org/%LOCALE%/firefox/themes/");
- pref("browser.uitour.url", "https://www.mozilla.org/%LOCALE%/firefox/%VERSION%/tour/");
- // How long to show a Hearbeat survey (two hours, in seconds)
- pref("browser.uitour.surveyDuration", 7200);
-
- pref("keyword.enabled", true);
- pref("browser.fixup.domainwhitelist.localhost", true);
-
--pref("general.useragent.locale", "@AB_CD@");
-+pref("general.useragent.locale", "chrome://global/locale/intl.properties");
- pref("general.skins.selectedSkin", "classic/1.0");
-
- pref("general.smoothScroll", true);
- #ifdef UNIX_BUT_NOT_MAC
- pref("general.autoScroll", false);
- #else
- pref("general.autoScroll", true);
- #endif
diff --git a/firefox.js b/firefox.js
index 857b153..6b0a958 100644
--- a/firefox.js
+++ b/firefox.js
@@ -1,3 +1,3 @@
-pref("intl.locale.matchOS", true);
+pref("intl.locale.requested", "");
pref("browser.preferences.instantApply", true);
pref("geo.wifi.uri", "https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%");
diff --git a/l10n-58.0.2.tar.xz b/l10n-58.0.2.tar.xz
deleted file mode 100644
index 9927343..0000000
--- a/l10n-58.0.2.tar.xz
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:c98a457396f881f7b9c32de341b7ed3025d64dc44352d8a977459217596b9981
-size 53030504
diff --git a/l10n-59.0.1.tar.xz b/l10n-59.0.1.tar.xz
new file mode 100644
index 0000000..1496a41
--- /dev/null
+++ b/l10n-59.0.1.tar.xz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:de5f9a8916fe43c9e79d1cdc7b5a85892600c0b11b5ed57618e009680b154e23
+size 49070588
diff --git a/l10n_changesets.txt b/l10n_changesets.txt
deleted file mode 100644
index 55c7b5b..0000000
--- a/l10n_changesets.txt
+++ /dev/null
@@ -1,97 +0,0 @@
-ach 51053376f3b4
-af 9699e648d04f
-an 35bf2af54c6e
-ar 11e28461eedd
-as f48681f3cb1c
-ast a0365b2d2204
-az c9f8178b760e
-be 6a81fe13730e
-bg f5f7827ddaf6
-bn-BD 40173c2773dc
-bn-IN 8a4d7efa4656
-br 87dd84f3fb15
-bs f9194e1b9d1f
-ca 2393377daf04
-cak 358337cd8e62
-cs b2f2d66e474f
-cy cd528119b1f0
-da 3d4f38f6c602
-de c4580757245b
-dsb 6cae073a841f
-el 7c198d3d5d8c
-en-GB 108b5a928fb5
-en-ZA 5b50bebf4e4f
-eo eb148ada0d56
-es-AR 08d927e7ad92
-es-CL 02584a2d25b7
-es-ES 1c9d3c3c689d
-es-MX 6435282dbc75
-et e29f6a05d5a8
-eu 756e60b234ec
-fa 8aee74bd73fe
-ff b529c4fc084b
-fi 124ad6d2caeb
-fr 87ec33d89386
-fy-NL 3705ebdd28f5
-ga-IE 2453123d83ab
-gd da7de9b6e635
-gl 99003c9cd063
-gn 54547111d875
-gu-IN 88180147b7f5
-he 9837e2cc4a95
-hi-IN e1dddb32c7d0
-hr 1699e5d11dfc
-hsb b779311b0bd0
-hu 5f446a971f03
-hy-AM 024da8b34b46
-id 0f0141ed9bb6
-is 4b3c58c9d645
-it 6e2c7978b0e7
-ja f30c0c2f2bc4
-ja-JP-mac 4230da7b0695
-ka 6650158784f6
-kab 6b3c6e707013
-kk 1e85339bcb5c
-km d934d1e2fbba
-kn 9d356f38d208
-ko 6370c2a0f030
-lij 0ab26fda46bc
-lt 450e1219d46f
-lv 78a846f93b16
-mai 53cf7cd14176
-mk 3d22bc5b8e99
-ml 128c7b806403
-mr 074d705e44b7
-ms 7fa602755a3b
-my eee9ab816d7c
-nb-NO 963968719128
-ne-NP c318f683bdb7
-nl fca30e75c8a2
-nn-NO 484b14dee153
-or 9420e75f84ba
-pa-IN 5634ac6e7d9b
-pl 45fa8ed87819
-pt-BR 38d2f920e7b1
-pt-PT 60446c901737
-rm cf0859e63177
-ro 7fea5671214f
-ru 67b070efcbd9
-si 5b5533ef2e97
-sk 4c17a502b748
-sl 8c446da2c7c5
-son 914d74ec145e
-sq 704b52416e5e
-sr cbf4a5eafb4d
-sv-SE 2e8d40795c69
-ta 26d7cbe37e4a
-te 9338813fedc1
-th aa91b43781fe
-tr a392fcf83ab9
-uk 214311bf7877
-ur 60247a51a921
-uz 51175e255277
-vi 2731355cccc7
-xh a756d272d1fe
-zh-CN 9ab59b4c446a
-zh-TW a56ff00fa7b0
-
diff --git a/mozilla-aarch64-startup-crash.patch b/mozilla-aarch64-startup-crash.patch
index 272b531..0d0ea61 100644
--- a/mozilla-aarch64-startup-crash.patch
+++ b/mozilla-aarch64-startup-crash.patch
@@ -1,12 +1,12 @@
# HG changeset patch
# Parent a5cfa3aa11a9d3391df49de6fc5a0e5232c12c10
-# Parent 6906d2adcc834114de3118365cb75b113df8564e
+# Parent 3005da37da3f1e2c568b1675307d10860182d214
Bug 991344 - Rpi3: Firefox crashes after a few seconds of usage
diff --git a/netwerk/base/nsIOService.cpp b/netwerk/base/nsIOService.cpp
--- a/netwerk/base/nsIOService.cpp
+++ b/netwerk/base/nsIOService.cpp
-@@ -892,17 +892,23 @@ nsIOService::NewChannelFromURIWithProxyF
+@@ -887,17 +887,23 @@ nsIOService::NewChannelFromURIWithProxyF
"doesn't support nsIUploadChannel2. An extension has "
"supplied a non-functional http protocol handler. This will "
"break behavior and in future releases not work at all.");
diff --git a/mozilla-alsa-sandbox.patch b/mozilla-alsa-sandbox.patch
deleted file mode 100644
index 70b6a3a..0000000
--- a/mozilla-alsa-sandbox.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- mozilla/security/sandbox/linux/moz.build 2018-02-06 07:58:27.127145777 +0100
-+++ mozilla/security/sandbox/linux/moz.build 2018-02-06 08:01:22.213706297 +0100
-@@ -77,6 +77,9 @@
- 'SandboxOpenedFiles.cpp',
- ]
-
-+if CONFIG['MOZ_ALSA']:
-+ DEFINES['MOZ_ALSA'] = True
-+
- # This copy of SafeSPrintf doesn't need to avoid the Chromium logging
- # dependency like the one in libxul does, but this way the behavior is
- # consistent. See also the comment in SandboxLogging.h.
diff --git a/mozilla-bmo1005535.patch b/mozilla-bmo1005535.patch
new file mode 100644
index 0000000..e11bcd8
--- /dev/null
+++ b/mozilla-bmo1005535.patch
@@ -0,0 +1,123 @@
+# HG changeset patch
+# Parent 376f185a0a757fe128be665adbb705f4a56461bc
+# User Steve Singer
+# Parent 23e95bbe4d5553a2ba9dda2a4a96a2029253597c
+Bug 1005535 - Get skia GPU building on big endian.
+
+diff --git a/gfx/skia/skia/include/core/SkColorPriv.h b/gfx/skia/skia/include/core/SkColorPriv.h
+--- a/gfx/skia/skia/include/core/SkColorPriv.h
++++ b/gfx/skia/skia/include/core/SkColorPriv.h
+@@ -27,37 +27,27 @@
+ * For easier compatibility with Skia's GPU backend, we further restrict these
+ * to either (in memory-byte-order) RGBA or BGRA. Note that this "order" does
+ * not directly correspond to the same shift-order, since we have to take endianess
+ * into account.
+ *
+ * Here we enforce this constraint.
+ */
+
+-#ifdef SK_CPU_BENDIAN
+- #define SK_RGBA_R32_SHIFT 24
+- #define SK_RGBA_G32_SHIFT 16
+- #define SK_RGBA_B32_SHIFT 8
+- #define SK_RGBA_A32_SHIFT 0
+
+- #define SK_BGRA_B32_SHIFT 24
+- #define SK_BGRA_G32_SHIFT 16
+- #define SK_BGRA_R32_SHIFT 8
+- #define SK_BGRA_A32_SHIFT 0
+-#else
+ #define SK_RGBA_R32_SHIFT 0
+ #define SK_RGBA_G32_SHIFT 8
+ #define SK_RGBA_B32_SHIFT 16
+ #define SK_RGBA_A32_SHIFT 24
+
+ #define SK_BGRA_B32_SHIFT 0
+ #define SK_BGRA_G32_SHIFT 8
+ #define SK_BGRA_R32_SHIFT 16
+ #define SK_BGRA_A32_SHIFT 24
+-#endif
++
+
+ #if defined(SK_PMCOLOR_IS_RGBA) && defined(SK_PMCOLOR_IS_BGRA)
+ #error "can't define PMCOLOR to be RGBA and BGRA"
+ #endif
+
+ #define LOCAL_PMCOLOR_SHIFTS_EQUIVALENT_TO_RGBA \
+ (SK_A32_SHIFT == SK_RGBA_A32_SHIFT && \
+ SK_R32_SHIFT == SK_RGBA_R32_SHIFT && \
+diff --git a/gfx/skia/skia/include/core/SkImageInfo.h b/gfx/skia/skia/include/core/SkImageInfo.h
+--- a/gfx/skia/skia/include/core/SkImageInfo.h
++++ b/gfx/skia/skia/include/core/SkImageInfo.h
+@@ -78,17 +78,17 @@ enum SkColorType {
+
+ kLastEnum_SkColorType = kRGBA_F16_SkColorType,
+
+ #if SK_PMCOLOR_BYTE_ORDER(B,G,R,A)
+ kN32_SkColorType = kBGRA_8888_SkColorType,
+ #elif SK_PMCOLOR_BYTE_ORDER(R,G,B,A)
+ kN32_SkColorType = kRGBA_8888_SkColorType,
+ #else
+- #error "SK_*32_SHFIT values must correspond to BGRA or RGBA byte order"
++ kN32_SkColorType = kBGRA_8888_SkColorType
+ #endif
+ };
+
+ static int SkColorTypeBytesPerPixel(SkColorType ct) {
+ static const uint8_t gSize[] = {
+ 0, // Unknown
+ 1, // Alpha_8
+ 2, // RGB_565
+diff --git a/gfx/skia/skia/include/gpu/GrColor.h b/gfx/skia/skia/include/gpu/GrColor.h
+--- a/gfx/skia/skia/include/gpu/GrColor.h
++++ b/gfx/skia/skia/include/gpu/GrColor.h
+@@ -69,17 +69,17 @@ static inline GrColor GrColorPackA4(unsi
+ #define GrColorUnpackG(color) (((color) >> GrColor_SHIFT_G) & 0xFF)
+ #define GrColorUnpackB(color) (((color) >> GrColor_SHIFT_B) & 0xFF)
+ #define GrColorUnpackA(color) (((color) >> GrColor_SHIFT_A) & 0xFF)
+
+ /**
+ * Since premultiplied means that alpha >= color, we construct a color with
+ * each component==255 and alpha == 0 to be "illegal"
+ */
+-#define GrColor_ILLEGAL (~(0xFF << GrColor_SHIFT_A))
++#define GrColor_ILLEGAL ((uint32_t)(~(0xFF << GrColor_SHIFT_A)))
+
+ #define GrColor_WHITE 0xFFFFFFFF
+ #define GrColor_TRANSPARENT_BLACK 0x0
+
+ /**
+ * Assert in debug builds that a GrColor is premultiplied.
+ */
+ static inline void GrColorIsPMAssert(GrColor SkDEBUGCODE(c)) {
+diff --git a/gfx/skia/skia/include/gpu/GrTypes.h b/gfx/skia/skia/include/gpu/GrTypes.h
+--- a/gfx/skia/skia/include/gpu/GrTypes.h
++++ b/gfx/skia/skia/include/gpu/GrTypes.h
+@@ -321,25 +321,23 @@ enum GrPixelConfig {
+ */
+ kRGBA_half_GrPixelConfig,
+
+ kLast_GrPixelConfig = kRGBA_half_GrPixelConfig
+ };
+ static const int kGrPixelConfigCnt = kLast_GrPixelConfig + 1;
+
+ // Aliases for pixel configs that match skia's byte order.
+-#ifndef SK_CPU_LENDIAN
+- #error "Skia gpu currently assumes little endian"
+-#endif
++
+ #if SK_PMCOLOR_BYTE_ORDER(B,G,R,A)
+ static const GrPixelConfig kSkia8888_GrPixelConfig = kBGRA_8888_GrPixelConfig;
+ #elif SK_PMCOLOR_BYTE_ORDER(R,G,B,A)
+ static const GrPixelConfig kSkia8888_GrPixelConfig = kRGBA_8888_GrPixelConfig;
+ #else
+- #error "SK_*32_SHIFT values must correspond to GL_BGRA or GL_RGBA format."
++ static const GrPixelConfig kSkia8888_GrPixelConfig = kBGRA_8888_GrPixelConfig;
+ #endif
+
+ // Returns true if the pixel config is a GPU-specific compressed format
+ // representation.
+ static inline bool GrPixelConfigIsCompressed(GrPixelConfig config) {
+ switch (config) {
+ case kETC1_GrPixelConfig:
+ return true;
diff --git a/mozilla-bmo1446062.patch b/mozilla-bmo1446062.patch
new file mode 100644
index 0000000..3efe280
--- /dev/null
+++ b/mozilla-bmo1446062.patch
@@ -0,0 +1,116 @@
+
+# HG changeset patch
+# User Thomas Daede
+# Date 1521175629 25200
+# Node ID 5cd5586a2f48424a9031a3fa4c782954a9df9a52
+# Parent 494e5d5278ba6f5fdda9a2bb9ac7ca772653ee4a
+Bug 1446062: libtremor Vorbis fix. r=jmspeex a=dveditz
+
+diff --git a/media/libtremor/lib/tremor_codebook.c b/media/libtremor/lib/tremor_codebook.c
+--- a/media/libtremor/lib/tremor_codebook.c
++++ b/media/libtremor/lib/tremor_codebook.c
+@@ -253,26 +253,26 @@ long vorbis_book_decodevs_add(codebook *
+
+ if(shift>=0){
+ for (i = 0; i < step; i++) {
+ entry[i]=decode_packed_entry_number(book,b);
+ if(entry[i]==-1)return(-1);
+ t[i] = book->valuelist+entry[i]*book->dim;
+ }
+ for(i=0,o=0;idim;i++,o+=step)
+- for (j=0;j>shift;
+ }else{
+ for (i = 0; i < step; i++) {
+ entry[i]=decode_packed_entry_number(book,b);
+ if(entry[i]==-1)return(-1);
+ t[i] = book->valuelist+entry[i]*book->dim;
+ }
+ for(i=0,o=0;idim;i++,o+=step)
+- for (j=0;jbinarypoint;
+
+ if(shift>=0){
+ for(i=0;ivaluelist+entry*book->dim;
+- for (j=0;jdim;)
++ for (j=0;idim;)
+ a[i++]+=t[j++]>>shift;
+ }
+ }else{
+ for(i=0;ivaluelist+entry*book->dim;
+- for (j=0;jdim;)
++ for (j=0;idim;)
+ a[i++]+=t[j++]<<-shift;
+ }
+ }
+ }
+ return(0);
+ }
+
+ /* unlike the others, we guard against n not being an integer number
+@@ -347,41 +347,41 @@ long vorbis_book_decodev_set(codebook *b
+ /* decode vector / dim granularity gaurding is done in the upper layer */
+ long vorbis_book_decodevv_add(codebook *book,ogg_int32_t **a,\
+ long offset,int ch,
+ oggpack_buffer *b,int n,int point){
+ if(book->used_entries>0){
+ long i,j,entry;
+ int chptr=0;
+ int shift=point-book->binarypoint;
+-
++ int m=offset+n;
+ if(shift>=0){
+
+- for(i=offset;ivaluelist+entry*book->dim;
+- for (j=0;jdim;j++){
++ for (j=0;idim;j++){
+ a[chptr++][i]+=t[j]>>shift;
+ if(chptr==ch){
+ chptr=0;
+ i++;
+ }
+ }
+ }
+ }
+ }else{
+
+- for(i=offset;ivaluelist+entry*book->dim;
+- for (j=0;jdim;j++){
++ for (j=0;idim;j++){
+ a[chptr++][i]+=t[j]<<-shift;
+ if(chptr==ch){
+ chptr=0;
+ i++;
+ }
+ }
+ }
+ }
+
diff --git a/mozilla-enable-csd.patch b/mozilla-enable-csd.patch
deleted file mode 100644
index 25869ad..0000000
--- a/mozilla-enable-csd.patch
+++ /dev/null
@@ -1,1312 +0,0 @@
-diff -up firefox-58.0/browser/base/moz.build.1399611 firefox-58.0/browser/base/moz.build
---- firefox-58.0/browser/base/moz.build.1399611 2017-11-02 17:16:30.000000000 +0100
-+++ firefox-58.0/browser/base/moz.build 2018-01-24 10:57:03.717031953 +0100
-@@ -57,7 +57,7 @@ DEFINES['APP_LICENSE_BLOCK'] = '%s/conte
- if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3', 'cocoa'):
- DEFINES['CONTEXT_COPY_IMAGE_CONTENTS'] = 1
-
--if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa'):
-+if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa', 'gtk3'):
- DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
-
- if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
-diff -up firefox-58.0/browser/themes/linux/browser.css.1399611 firefox-58.0/browser/themes/linux/browser.css
---- firefox-58.0/browser/themes/linux/browser.css.1399611 2018-01-11 21:16:54.000000000 +0100
-+++ firefox-58.0/browser/themes/linux/browser.css 2018-01-24 10:57:03.718031950 +0100
-@@ -717,7 +717,7 @@ html|span.ac-emphasize-text-url {
- :root[tabsintitlebar] > #titlebar:-moz-lwtheme {
- visibility: hidden;
- }
-- :root[tabsintitlebar] > #titlebar-content:-moz-lwtheme {
-+ :root[tabsintitlebar] #titlebar-content:-moz-lwtheme {
- visibility: visible;
- }
-
-diff -up firefox-58.0/layout/style/nsMediaFeatures.cpp.1399611 firefox-58.0/layout/style/nsMediaFeatures.cpp
---- firefox-58.0/layout/style/nsMediaFeatures.cpp.1399611 2018-01-11 21:17:01.000000000 +0100
-+++ firefox-58.0/layout/style/nsMediaFeatures.cpp 2018-01-24 10:57:03.718031950 +0100
-@@ -831,6 +831,42 @@ nsMediaFeatures::features[] = {
- GetSystemMetric
- },
-
-+ {
-+ &nsGkAtoms::_moz_gtk_csd_available,
-+ nsMediaFeature::eMinMaxNotAllowed,
-+ nsMediaFeature::eBoolInteger,
-+ nsMediaFeature::eNoRequirements,
-+ { &nsGkAtoms::gtk_csd_available },
-+ GetSystemMetric
-+ },
-+
-+ {
-+ &nsGkAtoms::_moz_gtk_csd_minimize_button,
-+ nsMediaFeature::eMinMaxNotAllowed,
-+ nsMediaFeature::eBoolInteger,
-+ nsMediaFeature::eNoRequirements,
-+ { &nsGkAtoms::gtk_csd_minimize_button },
-+ GetSystemMetric
-+ },
-+
-+ {
-+ &nsGkAtoms::_moz_gtk_csd_maximize_button,
-+ nsMediaFeature::eMinMaxNotAllowed,
-+ nsMediaFeature::eBoolInteger,
-+ nsMediaFeature::eNoRequirements,
-+ { &nsGkAtoms::gtk_csd_maximize_button },
-+ GetSystemMetric
-+ },
-+
-+ {
-+ &nsGkAtoms::_moz_gtk_csd_close_button,
-+ nsMediaFeature::eMinMaxNotAllowed,
-+ nsMediaFeature::eBoolInteger,
-+ nsMediaFeature::eNoRequirements,
-+ { &nsGkAtoms::gtk_csd_close_button },
-+ GetSystemMetric
-+ },
-+
- // Internal -moz-is-glyph media feature: applies only inside SVG glyphs.
- // Internal because it is really only useful in the user agent anyway
- // and therefore not worth standardizing.
-diff -up firefox-58.0/toolkit/modules/moz.build.1399611 firefox-58.0/toolkit/modules/moz.build
---- firefox-58.0/toolkit/modules/moz.build.1399611 2018-01-11 21:17:05.000000000 +0100
-+++ firefox-58.0/toolkit/modules/moz.build 2018-01-24 10:57:03.718031950 +0100
-@@ -259,7 +259,7 @@ EXTRA_JS_MODULES.sessionstore += [
- ]
-
- DEFINES['INSTALL_COMPACT_THEMES'] = 1
--if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa'):
-+if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa', 'gtk3'):
- DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
-
- if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
-diff -up firefox-58.0/widget/gtk/mozgtk/mozgtk.c.1399611 firefox-58.0/widget/gtk/mozgtk/mozgtk.c
---- firefox-58.0/widget/gtk/mozgtk/mozgtk.c.1399611 2018-01-11 21:17:06.000000000 +0100
-+++ firefox-58.0/widget/gtk/mozgtk/mozgtk.c 2018-01-24 10:11:58.638648276 +0100
-@@ -391,6 +391,7 @@ STUB(gtk_separator_menu_item_new)
- STUB(gtk_separator_tool_item_new)
- STUB(gtk_settings_get_default)
- STUB(gtk_settings_get_for_screen)
-+STUB(gtk_show_uri)
- STUB(gtk_socket_add_id)
- STUB(gtk_socket_get_id)
- STUB(gtk_socket_get_type)
-@@ -407,6 +408,7 @@ STUB(gtk_target_list_add_image_targets)
- STUB(gtk_target_list_new)
- STUB(gtk_target_list_unref)
- STUB(gtk_targets_include_image)
-+STUB(gtk_targets_include_text)
- STUB(gtk_target_table_free)
- STUB(gtk_target_table_new_from_list)
- STUB(gtk_text_view_new)
-@@ -479,6 +481,7 @@ STUB(gtk_widget_show_all)
- STUB(gtk_widget_size_allocate)
- STUB(gtk_widget_style_get)
- STUB(gtk_widget_unparent)
-+STUB(gtk_widget_unrealize)
- STUB(gtk_window_deiconify)
- STUB(gtk_window_fullscreen)
- STUB(gtk_window_get_group)
-@@ -582,6 +585,8 @@ STUB(gtk_style_context_set_state)
- STUB(gtk_style_properties_lookup_property)
- STUB(gtk_tree_view_column_get_button)
- STUB(gtk_widget_get_preferred_size)
-+STUB(gtk_widget_get_preferred_width)
-+STUB(gtk_widget_get_preferred_height)
- STUB(gtk_widget_get_state_flags)
- STUB(gtk_widget_get_style_context)
- STUB(gtk_widget_path_append_type)
-diff -up firefox-58.0/widget/gtk/nsLookAndFeel.cpp.1399611 firefox-58.0/widget/gtk/nsLookAndFeel.cpp
---- firefox-58.0/widget/gtk/nsLookAndFeel.cpp.1399611 2018-01-11 21:17:06.000000000 +0100
-+++ firefox-58.0/widget/gtk/nsLookAndFeel.cpp 2018-01-24 10:57:03.718031950 +0100
-@@ -24,6 +24,7 @@
- #include "nsStyleConsts.h"
- #include "gfxFontConstants.h"
- #include "WidgetUtils.h"
-+#include "nsWindow.h"
-
- #include
-
-@@ -740,7 +741,7 @@ GetSystemFontInfo(GtkStyleContext *aStyl
- // Scale fonts up on HiDPI displays.
- // This would be done automatically with cairo, but we manually manage
- // the display scale for platform consistency.
-- size *= ScreenHelperGTK::GetGTKMonitorScaleFactor();
-+ size *= mozilla::widget::ScreenHelperGTK::GetGTKMonitorScaleFactor();
-
- // |size| is now pixels
-
-@@ -1076,17 +1077,13 @@ nsLookAndFeel::EnsureInit()
- gtk_widget_destroy(window);
- g_object_unref(labelWidget);
-
-- // Require GTK 3.20 for client-side decoration support.
-- mCSDAvailable = gtk_check_version(3, 20, 0) == nullptr;
-- if (mCSDAvailable) {
-- mCSDAvailable =
-- mozilla::Preferences::GetBool("widget.allow-client-side-decoration",
-- false);
-- }
-+ // Require GTK 3.10 for GtkHeaderBar support and compatible window manager.
-+ mCSDAvailable = (gtk_check_version(3, 10, 0) == nullptr &&
-+ nsWindow::GetCSDSupportLevel() != nsWindow::CSD_SUPPORT_NONE);
-
- // We need to initialize whole CSD config explicitly because it's queried
- // as -moz-gtk* media features.
-- mCSDCloseButton = false;
-+ mCSDCloseButton = true;
- mCSDMaximizeButton = false;
- mCSDMinimizeButton = false;
-
-@@ -1095,18 +1092,24 @@ nsLookAndFeel::EnsureInit()
- (const gchar* (*)(GtkWidget*))
- dlsym(RTLD_DEFAULT, "gtk_header_bar_get_decoration_layout");
-
-- GtkWidget* headerBar = GetWidget(MOZ_GTK_HEADER_BAR);
-- const gchar* decorationLayout =
-- sGtkHeaderBarGetDecorationLayoutPtr(headerBar);
-- if (!decorationLayout) {
-- g_object_get(settings, "gtk-decoration-layout", &decorationLayout,
-- nullptr);
-- }
-+ if (sGtkHeaderBarGetDecorationLayoutPtr) {
-+ GtkWidget* headerBar = GetWidget(MOZ_GTK_HEADER_BAR);
-+ const gchar* decorationLayout =
-+ sGtkHeaderBarGetDecorationLayoutPtr(headerBar);
-+ if (!decorationLayout) {
-+ g_object_get(settings, "gtk-decoration-layout",
-+ &decorationLayout,
-+ nullptr);
-+ }
-
-- if (decorationLayout) {
-- mCSDCloseButton = (strstr(decorationLayout, "close") != nullptr);
-- mCSDMaximizeButton = (strstr(decorationLayout, "maximize") != nullptr);
-- mCSDMinimizeButton = (strstr(decorationLayout, "minimize") != nullptr);
-+ if (decorationLayout) {
-+ mCSDCloseButton =
-+ (strstr(decorationLayout, "close") != nullptr);
-+ mCSDMaximizeButton =
-+ (strstr(decorationLayout, "maximize") != nullptr);
-+ mCSDMinimizeButton =
-+ (strstr(decorationLayout, "minimize") != nullptr);
-+ }
- }
- }
- }
-diff -up firefox-58.0/widget/gtk/nsNativeThemeGTK.cpp.1399611 firefox-58.0/widget/gtk/nsNativeThemeGTK.cpp
---- firefox-58.0/widget/gtk/nsNativeThemeGTK.cpp.1399611 2018-01-11 21:17:06.000000000 +0100
-+++ firefox-58.0/widget/gtk/nsNativeThemeGTK.cpp 2018-01-24 10:57:03.719031946 +0100
-@@ -29,6 +29,7 @@
-
- #include
- #include
-+#include
-
- #include "gfxContext.h"
- #include "gfxPlatformGtk.h"
-@@ -51,6 +52,7 @@
-
- using namespace mozilla;
- using namespace mozilla::gfx;
-+using namespace mozilla::widget;
-
- NS_IMPL_ISUPPORTS_INHERITED(nsNativeThemeGTK, nsNativeTheme, nsITheme,
- nsIObserver)
-@@ -1375,6 +1377,10 @@ nsNativeThemeGTK::GetWidgetPadding(nsDev
- switch (aWidgetType) {
- case NS_THEME_BUTTON_FOCUS:
- case NS_THEME_TOOLBARBUTTON:
-+ case NS_THEME_WINDOW_BUTTON_CLOSE:
-+ case NS_THEME_WINDOW_BUTTON_MINIMIZE:
-+ case NS_THEME_WINDOW_BUTTON_MAXIMIZE:
-+ case NS_THEME_WINDOW_BUTTON_RESTORE:
- case NS_THEME_DUALBUTTON:
- case NS_THEME_TAB_SCROLL_ARROW_BACK:
- case NS_THEME_TAB_SCROLL_ARROW_FORWARD:
-diff -up firefox-58.0/widget/gtk/nsWindow.cpp.1399611 firefox-58.0/widget/gtk/nsWindow.cpp
---- firefox-58.0/widget/gtk/nsWindow.cpp.1399611 2018-01-24 10:57:03.714031963 +0100
-+++ firefox-58.0/widget/gtk/nsWindow.cpp 2018-01-24 10:57:03.720031943 +0100
-@@ -178,13 +178,8 @@ static int is_parent_ungrab_enter(Gdk
- static int is_parent_grab_leave(GdkEventCrossing *aEvent);
-
- /* callbacks from widgets */
--#if (MOZ_WIDGET_GTK == 2)
--static gboolean expose_event_cb (GtkWidget *widget,
-- GdkEventExpose *event);
--#else
- static gboolean expose_event_cb (GtkWidget *widget,
- cairo_t *rect);
--#endif
- static gboolean configure_event_cb (GtkWidget *widget,
- GdkEventConfigure *event);
- static void container_unrealize_cb (GtkWidget *widget);
-@@ -230,11 +225,9 @@ static void screen_composited_change
- static void widget_composited_changed_cb (GtkWidget* widget,
- gpointer user_data);
-
--#if (MOZ_WIDGET_GTK == 3)
- static void scale_changed_cb (GtkWidget* widget,
- GParamSpec* aPSpec,
- gpointer aPointer);
--#endif
- #if GTK_CHECK_VERSION(3,4,0)
- static gboolean touch_event_cb (GtkWidget* aWidget,
- GdkEventTouch* aEvent);
-@@ -390,7 +383,7 @@ static guint gButtonState;
- static inline int32_t
- GetBitmapStride(int32_t width)
- {
--#if defined(MOZ_X11) || (MOZ_WIDGET_GTK == 2)
-+#if defined(MOZ_X11)
- return (width+7)/8;
- #else
- return cairo_format_stride_for_width(CAIRO_FORMAT_A1, width);
-@@ -458,11 +451,23 @@ nsWindow::nsWindow()
- mXVisual = nullptr;
- mXDepth = 0;
- #endif /* MOZ_X11 */
-+
- if (!gGlobalsInitialized) {
- gGlobalsInitialized = true;
-
- // It's OK if either of these fail, but it may not be one day.
- initialize_prefs();
-+
-+#ifdef MOZ_WAYLAND
-+ // Wayland provides clipboard data to application on focus-in event
-+ // so we need to init our clipboard hooks before we create window
-+ // and get focus.
-+ if (!mIsX11Display) {
-+ nsCOMPtr clipboard =
-+ do_GetService("@mozilla.org/widget/clipboard;1");
-+ NS_ASSERTION(clipboard, "Failed to init clipboard!");
-+ }
-+#endif
- }
-
- mLastMotionPressure = 0;
-@@ -1521,7 +1526,7 @@ nsWindow::UpdateClientOffset()
- {
- AUTO_PROFILER_LABEL("nsWindow::UpdateClientOffset", GRAPHICS);
-
-- if (!mIsTopLevel || !mShell || !mGdkWindow || !mIsX11Display ||
-+ if (!mIsTopLevel || !mShell || !mIsX11Display ||
- gtk_window_get_window_type(GTK_WINDOW(mShell)) == GTK_WINDOW_POPUP) {
- mClientOffset = nsIntPoint(0, 0);
- return;
-@@ -1534,7 +1539,7 @@ nsWindow::UpdateClientOffset()
- int length_returned;
- long *frame_extents;
-
-- if (!gdk_property_get(mGdkWindow,
-+ if (!gdk_property_get(gtk_widget_get_window(mShell),
- gdk_atom_intern ("_NET_FRAME_EXTENTS", FALSE),
- cardinal_atom,
- 0, // offset
-@@ -1710,16 +1715,22 @@ nsWindow::GetNativeData(uint32_t aDataTy
- #ifdef MOZ_X11
- GdkDisplay* gdkDisplay = gdk_display_get_default();
- if (GDK_IS_X11_DISPLAY(gdkDisplay)) {
-- return GDK_DISPLAY_XDISPLAY(gdkDisplay);
-+ return GDK_DISPLAY_XDISPLAY(gdkDisplay);
- }
- #endif /* MOZ_X11 */
-+ // Don't bother to return native display on Wayland as it's for
-+ // X11 only NPAPI plugins.
- return nullptr;
- }
- case NS_NATIVE_SHELLWIDGET:
- return GetToplevelWidget();
-
- case NS_NATIVE_SHAREABLE_WINDOW:
-- return (void *) GDK_WINDOW_XID(gdk_window_get_toplevel(mGdkWindow));
-+ if (mIsX11Display) {
-+ return (void *) GDK_WINDOW_XID(gdk_window_get_toplevel(mGdkWindow));
-+ }
-+ NS_WARNING("nsWindow::GetNativeData(): NS_NATIVE_SHAREABLE_WINDOW is not handled on Wayland!");
-+ return nullptr;
- case NS_RAW_NATIVE_IME_CONTEXT: {
- void* pseudoIMEContext = GetPseudoIMEContext();
- if (pseudoIMEContext) {
-@@ -1800,18 +1811,18 @@ nsWindow::SetIcon(const nsAString& aIcon
- // The last two entries (for the old XPM format) will be ignored unless
- // no icons are found using other suffixes. XPM icons are deprecated.
-
-- const char extensions[6][7] = { ".png", "16.png", "32.png", "48.png",
-- ".xpm", "16.xpm" };
-+ const char16_t extensions[9][8] = { u".png", u"16.png", u"32.png",
-+ u"48.png", u"64.png", u"128.png",
-+ u"256.png",
-+ u".xpm", u"16.xpm" };
-
- for (uint32_t i = 0; i < ArrayLength(extensions); i++) {
- // Don't bother looking for XPM versions if we found a PNG.
- if (i == ArrayLength(extensions) - 2 && foundIcon)
- break;
-
-- nsAutoString extension;
-- extension.AppendASCII(extensions[i]);
--
-- ResolveIconName(aIconSpec, extension, getter_AddRefs(iconFile));
-+ ResolveIconName(aIconSpec, nsDependentString(extensions[i]),
-+ getter_AddRefs(iconFile));
- if (iconFile) {
- iconFile->GetNativePath(path);
- GdkPixbuf *icon = gdk_pixbuf_new_from_file(path.get(), nullptr);
-@@ -2024,30 +2035,6 @@ gdk_window_flash(GdkWindow * aGdkWind
- #endif // DEBUG
- #endif
-
--#if (MOZ_WIDGET_GTK == 2)
--static bool
--ExtractExposeRegion(LayoutDeviceIntRegion& aRegion, GdkEventExpose* aEvent)
--{
-- GdkRectangle* rects;
-- gint nrects;
-- gdk_region_get_rectangles(aEvent->region, &rects, &nrects);
--
-- if (nrects > MAX_RECTS_IN_REGION) {
-- // Just use the bounding box
-- rects[0] = aEvent->area;
-- nrects = 1;
-- }
--
-- for (GdkRectangle* r = rects; r < rects + nrects; r++) {
-- aRegion.Or(aRegion, LayoutDeviceIntRect(r->x, r->y, r->width, r->height));
-- LOGDRAW(("\t%d %d %d %d\n", r->x, r->y, r->width, r->height));
-- }
--
-- g_free(rects);
-- return true;
--}
--
--#else
- # ifdef cairo_copy_clip_rectangle_list
- # error "Looks like we're including Mozilla's cairo instead of system cairo"
- # endif
-@@ -2069,15 +2056,9 @@ ExtractExposeRegion(LayoutDeviceIntRegio
- cairo_rectangle_list_destroy(rects);
- return true;
- }
--#endif
-
--#if (MOZ_WIDGET_GTK == 2)
--gboolean
--nsWindow::OnExposeEvent(GdkEventExpose *aEvent)
--#else
- gboolean
- nsWindow::OnExposeEvent(cairo_t *cr)
--#endif
- {
- // Send any pending resize events so that layout can update.
- // May run event loop.
-@@ -2096,11 +2077,7 @@ nsWindow::OnExposeEvent(cairo_t *cr)
- return FALSE;
-
- LayoutDeviceIntRegion exposeRegion;
--#if (MOZ_WIDGET_GTK == 2)
-- if (!ExtractExposeRegion(exposeRegion, aEvent)) {
--#else
- if (!ExtractExposeRegion(exposeRegion, cr)) {
--#endif
- return FALSE;
- }
-
-@@ -2141,7 +2118,7 @@ nsWindow::OnExposeEvent(cairo_t *cr)
-
- LOGDRAW(("sending expose event [%p] %p 0x%lx (rects follow):\n",
- (void *)this, (void *)mGdkWindow,
-- gdk_x11_window_get_xid(mGdkWindow)));
-+ mIsX11Display ? gdk_x11_window_get_xid(mGdkWindow) : 0));
-
- // Our bounds may have changed after calling WillPaintWindow. Clip
- // to the new bounds here. The region is relative to this
-@@ -2304,19 +2281,11 @@ nsWindow::OnExposeEvent(cairo_t *cr)
- listener->DidPaintWindow();
-
- // Synchronously flush any new dirty areas
--#if (MOZ_WIDGET_GTK == 2)
-- GdkRegion* dirtyArea = gdk_window_get_update_area(mGdkWindow);
--#else
- cairo_region_t* dirtyArea = gdk_window_get_update_area(mGdkWindow);
--#endif
-
- if (dirtyArea) {
- gdk_window_invalidate_region(mGdkWindow, dirtyArea, false);
--#if (MOZ_WIDGET_GTK == 2)
-- gdk_region_destroy(dirtyArea);
--#else
- cairo_region_destroy(dirtyArea);
--#endif
- gdk_window_process_updates(mGdkWindow, false);
- }
-
-@@ -2466,7 +2435,7 @@ nsWindow::OnSizeAllocate(GtkAllocation *
- mBounds.SizeTo(size);
-
- #ifdef MOZ_X11
-- // Notify the X11CompositorWidget of a ClientSizeChange
-+ // Notify the GtkCompositorWidget of a ClientSizeChange
- if (mCompositorWidgetDelegate) {
- mCompositorWidgetDelegate->NotifyClientSizeChanged(GetClientSize());
- }
-@@ -3550,21 +3519,9 @@ CreateGdkWindow(GdkWindow *parent, GtkWi
- attributes.visual = gtk_widget_get_visual(widget);
- attributes.window_type = GDK_WINDOW_CHILD;
-
--#if (MOZ_WIDGET_GTK == 2)
-- attributes_mask |= GDK_WA_COLORMAP;
-- attributes.colormap = gtk_widget_get_colormap(widget);
--#endif
--
- GdkWindow *window = gdk_window_new(parent, &attributes, attributes_mask);
- gdk_window_set_user_data(window, widget);
-
--// GTK3 TODO?
--#if (MOZ_WIDGET_GTK == 2)
-- /* set the default pixmap to None so that you don't end up with the
-- gtk default which is BlackPixel. */
-- gdk_window_set_back_pixmap(window, nullptr, FALSE);
--#endif
--
- return window;
- }
-
-@@ -3653,10 +3610,14 @@ nsWindow::Create(nsIWidget* aParent,
- // which will use a Window with the override-redirect attribute
- // (for temporary windows).
- // For long-lived windows, their stacking order is managed by the
-- // window manager, as indicated by GTK_WINDOW_TOPLEVEL ...
-- GtkWindowType type =
-- mWindowType != eWindowType_popup || aInitData->mNoAutoHide ?
-- GTK_WINDOW_TOPLEVEL : GTK_WINDOW_POPUP;
-+ // window manager, as indicated by GTK_WINDOW_TOPLEVEL.
-+ // For Wayland we have to always use GTK_WINDOW_POPUP to control
-+ // popup window position.
-+ GtkWindowType type = GTK_WINDOW_TOPLEVEL;
-+ if (mWindowType == eWindowType_popup) {
-+ type = (mIsX11Display && aInitData->mNoAutoHide) ?
-+ GTK_WINDOW_TOPLEVEL : GTK_WINDOW_POPUP;
-+ }
- mShell = gtk_window_new(type);
-
- bool useAlphaVisual = (mWindowType == eWindowType_popup &&
-@@ -3674,13 +3635,8 @@ nsWindow::Create(nsIWidget* aParent,
- if (useAlphaVisual) {
- GdkScreen *screen = gtk_widget_get_screen(mShell);
- if (gdk_screen_is_composited(screen)) {
--#if (MOZ_WIDGET_GTK == 2)
-- GdkColormap *colormap = gdk_screen_get_rgba_colormap(screen);
-- gtk_widget_set_colormap(mShell, colormap);
--#else
- GdkVisual *visual = gdk_screen_get_rgba_visual(screen);
- gtk_widget_set_visual(mShell, visual);
--#endif
- }
- }
-
-@@ -3728,9 +3684,11 @@ nsWindow::Create(nsIWidget* aParent,
- #ifdef MOZ_X11
- // ... but when the window manager offers focus through
- // WM_TAKE_FOCUS, focus is requested on the parent window.
-- gtk_widget_realize(mShell);
-- gdk_window_add_filter(gtk_widget_get_window(mShell),
-- popup_take_focus_filter, nullptr);
-+ if (mIsX11Display) {
-+ gtk_widget_realize(mShell);
-+ gdk_window_add_filter(gtk_widget_get_window(mShell),
-+ popup_take_focus_filter, nullptr);
-+ }
- #endif
- }
-
-@@ -3742,7 +3700,11 @@ nsWindow::Create(nsIWidget* aParent,
- else {
- switch (aInitData->mPopupHint) {
- case ePopupTypeMenu:
-- gtkTypeHint = GDK_WINDOW_TYPE_HINT_POPUP_MENU;
-+ // Use GDK_WINDOW_TYPE_HINT_UTILITY on Wayland which
-+ // guides Gtk to create the popup as subsurface
-+ // instead of xdg_shell popup (see Bug 1423598).
-+ gtkTypeHint = mIsX11Display ? GDK_WINDOW_TYPE_HINT_POPUP_MENU :
-+ GDK_WINDOW_TYPE_HINT_UTILITY;
- break;
- case ePopupTypeTooltip:
- gtkTypeHint = GDK_WINDOW_TYPE_HINT_TOOLTIP;
-@@ -3769,13 +3731,11 @@ nsWindow::Create(nsIWidget* aParent,
- gtk_window_group_add_window(group, GTK_WINDOW(mShell));
- g_object_unref(group);
-
-- if (GetCSDSupportLevel() != CSD_SUPPORT_NONE) {
-- int32_t isCSDAvailable = false;
-- nsresult rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDAvailable,
-- &isCSDAvailable);
-- if (NS_SUCCEEDED(rv)) {
-- mIsCSDAvailable = isCSDAvailable;
-- }
-+ int32_t isCSDAvailable = false;
-+ nsresult rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDAvailable,
-+ &isCSDAvailable);
-+ if (NS_SUCCEEDED(rv)) {
-+ mIsCSDAvailable = isCSDAvailable;
- }
- }
-
-@@ -3783,7 +3743,6 @@ nsWindow::Create(nsIWidget* aParent,
- GtkWidget *container = moz_container_new();
- mContainer = MOZ_CONTAINER(container);
-
--#if (MOZ_WIDGET_GTK == 3)
- // "csd" style is set when widget is realized so we need to call
- // it explicitly now.
- gtk_widget_realize(mShell);
-@@ -3793,16 +3752,22 @@ nsWindow::Create(nsIWidget* aParent,
- * 1) We're running on Gtk+ without client side decorations.
- * Content is rendered to mShell window and we listen
- * to the Gtk+ events on mShell
-- * 2) We're running on Gtk+ > 3.20 and client side decorations
-+ * 2) We're running on Gtk+ and client side decorations
- * are drawn by Gtk+ to mShell. Content is rendered to mContainer
- * and we listen to the Gtk+ events on mContainer.
-+ * 3) We're running on Wayland. All gecko content is rendered
-+ * to mContainer and we listen to the Gtk+ events on mContainer.
- */
- GtkStyleContext* style = gtk_widget_get_style_context(mShell);
-- drawToContainer = gtk_style_context_has_class(style, "csd");
--#endif
-+ drawToContainer =
-+ !mIsX11Display ||
-+ (mIsCSDAvailable && GetCSDSupportLevel() == CSD_SUPPORT_FLAT ) ||
-+ gtk_style_context_has_class(style, "csd");
- eventWidget = (drawToContainer) ? container : mShell;
-
- gtk_widget_add_events(eventWidget, kEvents);
-+ if (drawToContainer)
-+ gtk_widget_add_events(mShell, GDK_PROPERTY_CHANGE_MASK);
-
- // Prevent GtkWindow from painting a background to avoid flickering.
- gtk_widget_set_app_paintable(eventWidget, TRUE);
-@@ -3839,19 +3804,11 @@ nsWindow::Create(nsIWidget* aParent,
-
- // If the popup ignores mouse events, set an empty input shape.
- if (aInitData->mMouseTransparent) {
--#if (MOZ_WIDGET_GTK == 2)
-- GdkRectangle rect = { 0, 0, 0, 0 };
-- GdkRegion *region = gdk_region_rectangle(&rect);
--
-- gdk_window_input_shape_combine_region(mGdkWindow, region, 0, 0);
-- gdk_region_destroy(region);
--#else
- cairo_rectangle_int_t rect = { 0, 0, 0, 0 };
- cairo_region_t *region = cairo_region_create_rectangle(&rect);
-
- gdk_window_input_shape_combine_region(mGdkWindow, region, 0, 0);
- cairo_region_destroy(region);
--#endif
- }
- }
- }
-@@ -3893,6 +3850,12 @@ nsWindow::Create(nsIWidget* aParent,
-
- // label the drawing window with this object so we can find our way home
- g_object_set_data(G_OBJECT(mGdkWindow), "nsWindow", this);
-+ if (drawToContainer) {
-+ // Also label mShell toplevel window,
-+ // property_notify_event_cb callback also needs to find its way home
-+ g_object_set_data(G_OBJECT(gtk_widget_get_window(mShell)),
-+ "nsWindow", this);
-+ }
-
- if (mContainer)
- g_object_set_data(G_OBJECT(mContainer), "nsWindow", this);
-@@ -3910,12 +3873,12 @@ nsWindow::Create(nsIWidget* aParent,
- G_CALLBACK(window_state_event_cb), nullptr);
- g_signal_connect(mShell, "check-resize",
- G_CALLBACK(check_resize_cb), nullptr);
--
-- GdkScreen *screen = gtk_widget_get_screen(mShell);
--
- g_signal_connect(mShell, "composited-changed",
- G_CALLBACK(widget_composited_changed_cb), nullptr);
-+ g_signal_connect(mShell, "property-notify-event",
-+ G_CALLBACK(property_notify_event_cb), nullptr);
-
-+ GdkScreen *screen = gtk_widget_get_screen(mShell);
- if (!g_signal_handler_find(screen, G_SIGNAL_MATCH_FUNC,
- 0, 0, nullptr,
- FuncToGpointer(screen_composited_changed_cb), 0)) {
-@@ -3940,21 +3903,14 @@ nsWindow::Create(nsIWidget* aParent,
- G_CALLBACK(size_allocate_cb), nullptr);
- g_signal_connect(mContainer, "hierarchy-changed",
- G_CALLBACK(hierarchy_changed_cb), nullptr);
--#if (MOZ_WIDGET_GTK == 3)
- g_signal_connect(mContainer, "notify::scale-factor",
- G_CALLBACK(scale_changed_cb), nullptr);
--#endif
- // Initialize mHasMappedToplevel.
- hierarchy_changed_cb(GTK_WIDGET(mContainer), nullptr);
- // Expose, focus, key, and drag events are sent even to GTK_NO_WINDOW
- // widgets.
--#if (MOZ_WIDGET_GTK == 2)
-- g_signal_connect(mContainer, "expose_event",
-- G_CALLBACK(expose_event_cb), nullptr);
--#else
- g_signal_connect(G_OBJECT(mContainer), "draw",
- G_CALLBACK(expose_event_cb), nullptr);
--#endif
- g_signal_connect(mContainer, "focus_in_event",
- G_CALLBACK(focus_in_event_cb), nullptr);
- g_signal_connect(mContainer, "focus_out_event",
-@@ -4006,10 +3962,6 @@ nsWindow::Create(nsIWidget* aParent,
- }
-
- if (eventWidget) {
--#if (MOZ_WIDGET_GTK == 2)
-- // Don't let GTK mess with the shapes of our GdkWindows
-- GTK_PRIVATE_SET_FLAG(eventWidget, GTK_HAS_SHAPE_MASK);
--#endif
-
- // These events are sent to the owning widget of the relevant window
- // and propagate up to the first widget that handles the events, so we
-@@ -4025,8 +3977,6 @@ nsWindow::Create(nsIWidget* aParent,
- G_CALLBACK(button_press_event_cb), nullptr);
- g_signal_connect(eventWidget, "button-release-event",
- G_CALLBACK(button_release_event_cb), nullptr);
-- g_signal_connect(eventWidget, "property-notify-event",
-- G_CALLBACK(property_notify_event_cb), nullptr);
- g_signal_connect(eventWidget, "scroll-event",
- G_CALLBACK(scroll_event_cb), nullptr);
- #if GTK_CHECK_VERSION(3,4,0)
-@@ -4039,7 +3989,7 @@ nsWindow::Create(nsIWidget* aParent,
- if (mShell) {
- LOG(("\tmShell %p mContainer %p mGdkWindow %p 0x%lx\n",
- mShell, mContainer, mGdkWindow,
-- gdk_x11_window_get_xid(mGdkWindow)));
-+ mIsX11Display ? gdk_x11_window_get_xid(mGdkWindow) : 0));
- } else if (mContainer) {
- LOG(("\tmContainer %p mGdkWindow %p\n", mContainer, mGdkWindow));
- }
-@@ -4063,8 +4013,12 @@ nsWindow::Create(nsIWidget* aParent,
-
- mSurfaceProvider.Initialize(mXDisplay, mXWindow, mXVisual, mXDepth);
- }
-+#ifdef MOZ_WAYLAND
-+ else if (!mIsX11Display) {
-+ mSurfaceProvider.Initialize(this);
-+ }
-+#endif
- #endif
--
- return NS_OK;
- }
-
-@@ -4099,7 +4053,8 @@ nsWindow::SetWindowClass(const nsAString
- res_name[0] = toupper(res_name[0]);
- if (!role) role = res_name;
-
-- gdk_window_set_role(mGdkWindow, role);
-+ GdkWindow* gdkWindow = gtk_widget_get_window(mShell);
-+ gdk_window_set_role(gdkWindow, role);
-
- #ifdef MOZ_X11
- if (mIsX11Display) {
-@@ -4115,7 +4070,7 @@ nsWindow::SetWindowClass(const nsAString
- // a warning & refuses to make the change.
- GdkDisplay *display = gdk_display_get_default();
- XSetClassHint(GDK_DISPLAY_XDISPLAY(display),
-- gdk_x11_window_get_xid(mGdkWindow),
-+ gdk_x11_window_get_xid(gdkWindow),
- class_hint);
- XFree(class_hint);
- }
-@@ -4164,7 +4119,7 @@ nsWindow::NativeResize()
- }
-
- #ifdef MOZ_X11
-- // Notify the X11CompositorWidget of a ClientSizeChange
-+ // Notify the GtkCompositorWidget of a ClientSizeChange
- // This is different than OnSizeAllocate to catch initial sizing
- if (mCompositorWidgetDelegate) {
- mCompositorWidgetDelegate->NotifyClientSizeChanged(GetClientSize());
-@@ -4220,7 +4175,7 @@ nsWindow::NativeMoveResize()
- }
-
- #ifdef MOZ_X11
-- // Notify the X11CompositorWidget of a ClientSizeChange
-+ // Notify the GtkCompositorWidget of a ClientSizeChange
- // This is different than OnSizeAllocate to catch initial sizing
- if (mCompositorWidgetDelegate) {
- mCompositorWidgetDelegate->NotifyClientSizeChanged(GetClientSize());
-@@ -4529,17 +4484,6 @@ nsWindow::SetWindowClipRegion(const nsTA
- if (!mGdkWindow)
- return NS_OK;
-
--#if (MOZ_WIDGET_GTK == 2)
-- GdkRegion *region = gdk_region_new(); // aborts on OOM
-- for (uint32_t i = 0; i < newRects->Length(); ++i) {
-- const LayoutDeviceIntRect& r = newRects->ElementAt(i);
-- GdkRectangle rect = { r.x, r.y, r.width, r.height };
-- gdk_region_union_with_rect(region, &rect);
-- }
--
-- gdk_window_shape_combine_region(mGdkWindow, region, 0, 0);
-- gdk_region_destroy(region);
--#else
- cairo_region_t *region = cairo_region_create();
- for (uint32_t i = 0; i < newRects->Length(); ++i) {
- const LayoutDeviceIntRect& r = newRects->ElementAt(i);
-@@ -4549,7 +4493,6 @@ nsWindow::SetWindowClipRegion(const nsTA
-
- gdk_window_shape_combine_region(mGdkWindow, region, 0, 0);
- cairo_region_destroy(region);
--#endif
-
- return NS_OK;
- }
-@@ -4658,17 +4601,6 @@ nsWindow::ApplyTransparencyBitmap()
- maskPixmap, ShapeSet);
- XFreePixmap(xDisplay, maskPixmap);
- #else
--#if (MOZ_WIDGET_GTK == 2)
-- gtk_widget_reset_shapes(mShell);
-- GdkBitmap* maskBitmap = gdk_bitmap_create_from_data(mGdkWindow,
-- mTransparencyBitmap,
-- mTransparencyBitmapWidth, mTransparencyBitmapHeight);
-- if (!maskBitmap)
-- return;
--
-- gtk_widget_shape_combine_mask(mShell, maskBitmap, 0, 0);
-- g_object_unref(maskBitmap);
--#else
- cairo_surface_t *maskBitmap;
- maskBitmap = cairo_image_surface_create_for_data((unsigned char*)mTransparencyBitmap,
- CAIRO_FORMAT_A1,
-@@ -4682,7 +4614,6 @@ nsWindow::ApplyTransparencyBitmap()
- gtk_widget_shape_combine_region(mShell, maskRegion);
- cairo_region_destroy(maskRegion);
- cairo_surface_destroy(maskBitmap);
--#endif // MOZ_WIDGET_GTK == 2
- #endif // MOZ_X11
- }
-
-@@ -4779,6 +4710,12 @@ nsWindow::GrabPointer(guint32 aTime)
- if (!mGdkWindow)
- return;
-
-+ if (!mIsX11Display) {
-+ // Don't to the grab on Wayland as it causes a regression
-+ // from Bug 1377084.
-+ return;
-+ }
-+
- gint retval;
- retval = gdk_pointer_grab(mGdkWindow, TRUE,
- (GdkEventMask)(GDK_BUTTON_PRESS_MASK |
-@@ -4812,6 +4749,13 @@ nsWindow::ReleaseGrabs(void)
- LOG(("ReleaseGrabs\n"));
-
- mRetryPointerGrab = false;
-+
-+ if (!mIsX11Display) {
-+ // Don't to the ungrab on Wayland as it causes a regression
-+ // from Bug 1377084.
-+ return;
-+ }
-+
- gdk_pointer_ungrab(GDK_CURRENT_TIME);
- }
-
-@@ -5058,7 +5002,7 @@ nsWindow::MakeFullScreen(bool aFullScree
- LOG(("nsWindow::MakeFullScreen [%p] aFullScreen %d\n",
- (void *)this, aFullScreen));
-
-- if (!IsFullscreenSupported(mShell)) {
-+ if (mIsX11Display && !IsFullscreenSupported(mShell)) {
- return NS_ERROR_NOT_AVAILABLE;
- }
-
-@@ -5080,7 +5024,7 @@ nsWindow::MakeFullScreen(bool aFullScree
- }
-
- void
--nsWindow::HideWindowChrome(bool aShouldHide)
-+nsWindow::SetWindowDecoration(nsBorderStyle aStyle)
- {
- if (!mShell) {
- // Pass the request to the toplevel window
-@@ -5092,30 +5036,29 @@ nsWindow::HideWindowChrome(bool aShouldH
- if (!topWindow)
- return;
-
-- topWindow->HideWindowChrome(aShouldHide);
-+ topWindow->SetWindowDecoration(aStyle);
- return;
- }
-
-+ // We can't use mGdkWindow directly here as it can be
-+ // derived from mContainer which is not a top-level GdkWindow.
-+ GdkWindow *window = gtk_widget_get_window(mShell);
-+
- // Sawfish, metacity, and presumably other window managers get
- // confused if we change the window decorations while the window
- // is visible.
- bool wasVisible = false;
-- if (gdk_window_is_visible(mGdkWindow)) {
-- gdk_window_hide(mGdkWindow);
-+ if (gdk_window_is_visible(window)) {
-+ gdk_window_hide(window);
- wasVisible = true;
- }
-
-- gint wmd;
-- if (aShouldHide)
-- wmd = 0;
-- else
-- wmd = ConvertBorderStyles(mBorderStyle);
--
-+ gint wmd = ConvertBorderStyles(aStyle);
- if (wmd != -1)
-- gdk_window_set_decorations(mGdkWindow, (GdkWMDecoration) wmd);
-+ gdk_window_set_decorations(window, (GdkWMDecoration) wmd);
-
- if (wasVisible)
-- gdk_window_show(mGdkWindow);
-+ gdk_window_show(window);
-
- // For some window managers, adding or removing window decorations
- // requires unmapping and remapping our toplevel window. Go ahead
-@@ -5123,10 +5066,19 @@ nsWindow::HideWindowChrome(bool aShouldH
- // error later when this happens (when the persistence timer fires
- // and GetWindowPos is called)
- #ifdef MOZ_X11
-- XSync(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()) , False);
--#else
-- gdk_flush ();
-+ if (mIsX11Display) {
-+ XSync(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()) , False);
-+ } else
- #endif /* MOZ_X11 */
-+ {
-+ gdk_flush ();
-+ }
-+}
-+
-+void
-+nsWindow::HideWindowChrome(bool aShouldHide)
-+{
-+ SetWindowDecoration(aShouldHide ? eBorderStyle_none : mBorderStyle);
- }
-
- bool
-@@ -5237,12 +5189,8 @@ is_mouse_in_window (GdkWindow* aWindow,
- window = gdk_window_get_parent(window);
- }
-
--#if (MOZ_WIDGET_GTK == 2)
-- gdk_drawable_get_size(aWindow, &w, &h);
--#else
- w = gdk_window_get_width(aWindow);
- h = gdk_window_get_height(aWindow);
--#endif
-
- if (aMouseX > x && aMouseX < x + w &&
- aMouseY > y && aMouseY < y + h)
-@@ -5498,18 +5446,6 @@ get_gtk_cursor(nsCursor aCursor)
-
- // gtk callbacks
-
--#if (MOZ_WIDGET_GTK == 2)
--static gboolean
--expose_event_cb(GtkWidget *widget, GdkEventExpose *event)
--{
-- RefPtr window = get_window_for_gdk_window(event->window);
-- if (!window)
-- return FALSE;
--
-- window->OnExposeEvent(event);
-- return FALSE;
--}
--#else
- void
- draw_window_of_widget(GtkWidget *widget, GdkWindow *aWindow, cairo_t *cr)
- {
-@@ -5561,7 +5497,6 @@ expose_event_cb(GtkWidget *widget, cairo
-
- return FALSE;
- }
--#endif //MOZ_WIDGET_GTK == 2
-
- static gboolean
- configure_event_cb(GtkWidget *widget,
-@@ -5980,7 +5915,6 @@ widget_composited_changed_cb (GtkWidget*
- window->OnCompositedChanged();
- }
-
--#if (MOZ_WIDGET_GTK == 3)
- static void
- scale_changed_cb (GtkWidget* widget, GParamSpec* aPSpec, gpointer aPointer)
- {
-@@ -5996,7 +5930,6 @@ scale_changed_cb (GtkWidget* widget, GPa
- gtk_widget_get_allocation(widget, &allocation);
- window->OnSizeAllocate(&allocation);
- }
--#endif
-
- #if GTK_CHECK_VERSION(3,4,0)
- static gboolean
-@@ -6174,11 +6107,7 @@ get_inner_gdk_window (GdkWindow *aWindow
- child = g_list_previous(child)) {
- auto *childWindow = (GdkWindow *) child->data;
- if (get_window_for_gdk_window(childWindow)) {
--#if (MOZ_WIDGET_GTK == 2)
-- gdk_window_get_geometry(childWindow, &cx, &cy, &cw, &ch, nullptr);
--#else
- gdk_window_get_geometry(childWindow, &cx, &cy, &cw, &ch);
--#endif
- if ((cx < x) && (x < (cx + cw)) &&
- (cy < y) && (y < (cy + ch)) &&
- gdk_window_is_visible(childWindow)) {
-@@ -6386,53 +6315,6 @@ nsWindow::GetEditCommands(NativeKeyBindi
- keyBindings->GetEditCommands(aEvent, aCommands);
- }
-
--#if defined(MOZ_X11) && (MOZ_WIDGET_GTK == 2)
--/* static */ already_AddRefed
--nsWindow::GetDrawTargetForGdkDrawable(GdkDrawable* aDrawable,
-- const IntSize& aSize)
--{
-- GdkVisual* visual = gdk_drawable_get_visual(aDrawable);
-- Screen* xScreen =
-- gdk_x11_screen_get_xscreen(gdk_drawable_get_screen(aDrawable));
-- Display* xDisplay = DisplayOfScreen(xScreen);
-- Drawable xDrawable = gdk_x11_drawable_get_xid(aDrawable);
--
-- RefPtr surface;
--
-- if (visual) {
-- Visual* xVisual = gdk_x11_visual_get_xvisual(visual);
--
-- surface = new gfxXlibSurface(xDisplay, xDrawable, xVisual, aSize);
-- } else {
-- // no visual? we must be using an xrender format. Find a format
-- // for this depth.
-- XRenderPictFormat *pf = nullptr;
-- switch (gdk_drawable_get_depth(aDrawable)) {
-- case 32:
-- pf = XRenderFindStandardFormat(xDisplay, PictStandardARGB32);
-- break;
-- case 24:
-- pf = XRenderFindStandardFormat(xDisplay, PictStandardRGB24);
-- break;
-- default:
-- NS_ERROR("Don't know how to handle the given depth!");
-- break;
-- }
--
-- surface = new gfxXlibSurface(xScreen, xDrawable, pf, aSize);
-- }
--
-- RefPtr dt =
-- gfxPlatform::GetPlatform()->CreateDrawTargetForSurface(surface, aSize);
--
-- if (!dt || !dt->IsValid()) {
-- return nullptr;
-- }
--
-- return dt.forget();
--}
--#endif
--
- already_AddRefed
- nsWindow::StartRemoteDrawingInRegion(LayoutDeviceIntRegion& aInvalidRegion, BufferMode* aBufferMode)
- {
-@@ -6649,9 +6531,66 @@ nsWindow::SetDrawsInTitlebar(bool aState
- return;
-
- if (mShell) {
-- gint wmd = aState ? GDK_DECOR_BORDER : ConvertBorderStyles(mBorderStyle);
-- gdk_window_set_decorations(gtk_widget_get_window(mShell),
-- (GdkWMDecoration) wmd);
-+ if (GetCSDSupportLevel() == CSD_SUPPORT_FULL) {
-+ SetWindowDecoration(aState ? eBorderStyle_border : mBorderStyle);
-+ }
-+ else {
-+ /* Window manager does not support GDK_DECOR_BORDER,
-+ * emulate it by CSD.
-+ *
-+ * gtk_window_set_titlebar() works on unrealized widgets only,
-+ * we need to handle mShell carefully here.
-+ * When CSD is enabled mGdkWindow is owned by mContainer which is good
-+ * as we can't delete our mGdkWindow. To make mShell unrealized while
-+ * mContainer is preserved we temporary reparent mContainer to an
-+ * invisible GtkWindow.
-+ */
-+ NativeShow(false);
-+
-+ // Using GTK_WINDOW_POPUP rather than
-+ // GTK_WINDOW_TOPLEVEL in the hope that POPUP results in less
-+ // initialization and window manager interaction.
-+ GtkWidget* tmpWindow = gtk_window_new(GTK_WINDOW_POPUP);
-+ gtk_widget_realize(tmpWindow);
-+
-+ gtk_widget_reparent(GTK_WIDGET(mContainer), tmpWindow);
-+ gtk_widget_unrealize(GTK_WIDGET(mShell));
-+
-+ // Available as of GTK 3.10+
-+ static auto sGtkWindowSetTitlebar = (void (*)(GtkWindow*, GtkWidget*))
-+ dlsym(RTLD_DEFAULT, "gtk_window_set_titlebar");
-+ MOZ_ASSERT(sGtkWindowSetTitlebar,
-+ "Missing gtk_window_set_titlebar(), old Gtk+ library?");
-+
-+ if (aState) {
-+ // Add a hidden titlebar widget to trigger CSD, but disable the default
-+ // titlebar. GtkFixed is a somewhat random choice for a simple unused
-+ // widget. gtk_window_set_titlebar() takes ownership of the titlebar
-+ // widget.
-+ sGtkWindowSetTitlebar(GTK_WINDOW(mShell), gtk_fixed_new());
-+ } else {
-+ sGtkWindowSetTitlebar(GTK_WINDOW(mShell), nullptr);
-+ }
-+
-+ /* A workaround for https://bugzilla.gnome.org/show_bug.cgi?id=791081
-+ * gtk_widget_realize() throws:
-+ * "In pixman_region32_init_rect: Invalid rectangle passed"
-+ * when mShell has default 1x1 size.
-+ */
-+ GtkAllocation allocation = {0, 0, 0, 0};
-+ gtk_widget_get_preferred_width(GTK_WIDGET(mShell), nullptr,
-+ &allocation.width);
-+ gtk_widget_get_preferred_height(GTK_WIDGET(mShell), nullptr,
-+ &allocation.height);
-+ gtk_widget_size_allocate(GTK_WIDGET(mShell), &allocation);
-+
-+ gtk_widget_realize(GTK_WIDGET(mShell));
-+ gtk_widget_reparent(GTK_WIDGET(mContainer), GTK_WIDGET(mShell));
-+ mNeedsShow = true;
-+ NativeResize();
-+
-+ gtk_widget_destroy(tmpWindow);
-+ }
- }
-
- mIsCSDEnabled = aState;
-@@ -6762,11 +6701,9 @@ nsWindow::SynthesizeNativeMouseEvent(Lay
- event.button.window = mGdkWindow;
- event.button.time = GDK_CURRENT_TIME;
-
--#if (MOZ_WIDGET_GTK == 3)
- // Get device for event source
- GdkDeviceManager *device_manager = gdk_display_get_device_manager(display);
- event.button.device = gdk_device_manager_get_client_pointer(device_manager);
--#endif
-
- event.button.x_root = DevicePixelsToGdkCoordRoundDown(aPoint.x);
- event.button.y_root = DevicePixelsToGdkCoordRoundDown(aPoint.y);
-@@ -6809,12 +6746,10 @@ nsWindow::SynthesizeNativeMouseScrollEve
- event.type = GDK_SCROLL;
- event.scroll.window = mGdkWindow;
- event.scroll.time = GDK_CURRENT_TIME;
--#if (MOZ_WIDGET_GTK == 3)
- // Get device for event source
- GdkDisplay* display = gdk_window_get_display(mGdkWindow);
- GdkDeviceManager *device_manager = gdk_display_get_device_manager(display);
- event.scroll.device = gdk_device_manager_get_client_pointer(device_manager);
--#endif
- event.scroll.x_root = DevicePixelsToGdkCoordRoundDown(aPoint.x);
- event.scroll.y_root = DevicePixelsToGdkCoordRoundDown(aPoint.y);
-
-@@ -6938,27 +6873,54 @@ nsWindow::GetCSDSupportLevel() {
- if (sCSDSupportLevel != CSD_SUPPORT_UNKNOWN) {
- return sCSDSupportLevel;
- }
-- // TODO: MATE
-+
- const char* currentDesktop = getenv("XDG_CURRENT_DESKTOP");
- if (currentDesktop) {
-- if (strcmp(currentDesktop, "GNOME") == 0) {
-- sCSDSupportLevel = CSD_SUPPORT_FULL;
-- } else if (strcmp(currentDesktop, "XFCE") == 0) {
-+ if (strstr(currentDesktop, "GNOME") != nullptr) {
- sCSDSupportLevel = CSD_SUPPORT_FULL;
-- } else if (strcmp(currentDesktop, "X-Cinnamon") == 0) {
-+ } else if (strstr(currentDesktop, "XFCE") != nullptr) {
-+ sCSDSupportLevel = CSD_SUPPORT_FLAT;
-+ } else if (strstr(currentDesktop, "X-Cinnamon") != nullptr) {
- sCSDSupportLevel = CSD_SUPPORT_FULL;
-- } else if (strcmp(currentDesktop, "KDE") == 0) {
-+ } else if (strstr(currentDesktop, "KDE") != nullptr) {
- sCSDSupportLevel = CSD_SUPPORT_FLAT;
-- } else if (strcmp(currentDesktop, "LXDE") == 0) {
-+ } else if (strstr(currentDesktop, "LXDE") != nullptr) {
- sCSDSupportLevel = CSD_SUPPORT_FLAT;
-- } else if (strcmp(currentDesktop, "openbox") == 0) {
-+ } else if (strstr(currentDesktop, "openbox") != nullptr) {
- sCSDSupportLevel = CSD_SUPPORT_FLAT;
-- } else if (strcmp(currentDesktop, "i3") == 0) {
-+ } else if (strstr(currentDesktop, "i3") != nullptr) {
- sCSDSupportLevel = CSD_SUPPORT_NONE;
-+ } else if (strstr(currentDesktop, "MATE") != nullptr) {
-+ sCSDSupportLevel = CSD_SUPPORT_FLAT;
-+ } else if (strstr(currentDesktop, "Unity") != nullptr) {
-+ sCSDSupportLevel = CSD_SUPPORT_FLAT;
-+ } else if (strstr(currentDesktop, "Pantheon") != nullptr) {
-+ sCSDSupportLevel = CSD_SUPPORT_FULL;
- } else {
-+ sCSDSupportLevel = CSD_SUPPORT_FLAT;
-+ }
-+ } else {
-+ sCSDSupportLevel = CSD_SUPPORT_NONE;
-+ }
-+
-+ // We don't support CSD_SUPPORT_FULL on Wayland
-+ if (!GDK_IS_X11_DISPLAY(gdk_display_get_default()) &&
-+ sCSDSupportLevel == CSD_SUPPORT_FULL) {
-+ sCSDSupportLevel = CSD_SUPPORT_FLAT;
-+ }
-+
-+ // Allow MOZ_GTK_TITLEBAR_DECORATION to override our heuristics
-+ const char* decorationOverride = getenv("MOZ_GTK_TITLEBAR_DECORATION");
-+ if (decorationOverride) {
-+ if (strcmp(decorationOverride, "none") == 0) {
- sCSDSupportLevel = CSD_SUPPORT_NONE;
-+ } else if (strcmp(decorationOverride, "client") == 0) {
-+ sCSDSupportLevel = CSD_SUPPORT_FLAT;
-+ } else if (strcmp(decorationOverride, "system") == 0) {
-+ sCSDSupportLevel = CSD_SUPPORT_FULL;
- }
- }
-+
- return sCSDSupportLevel;
- }
-
-@@ -6991,3 +6953,24 @@ nsWindow::IsComposited() const
- (gdk_window_get_visual(mGdkWindow)
- == gdk_screen_get_rgba_visual(gdkScreen));
- }
-+
-+#ifdef MOZ_WAYLAND
-+wl_display*
-+nsWindow::GetWaylandDisplay()
-+{
-+ // Available as of GTK 3.8+
-+ static auto sGdkWaylandDisplayGetWlDisplay =
-+ (wl_display *(*)(GdkDisplay *))
-+ dlsym(RTLD_DEFAULT, "gdk_wayland_display_get_wl_display");
-+
-+ GdkDisplay* gdkDisplay = gdk_display_get_default();
-+ return mIsX11Display ? nullptr :
-+ sGdkWaylandDisplayGetWlDisplay(gdkDisplay);
-+}
-+
-+wl_surface*
-+nsWindow::GetWaylandSurface()
-+{
-+ return moz_container_get_wl_surface(MOZ_CONTAINER(mContainer));
-+}
-+#endif
-diff -up firefox-58.0/widget/gtk/nsWindow.h.1399611 firefox-58.0/widget/gtk/nsWindow.h
---- firefox-58.0/widget/gtk/nsWindow.h.1399611 2018-01-11 21:17:06.000000000 +0100
-+++ firefox-58.0/widget/gtk/nsWindow.h 2018-01-24 10:57:03.720031943 +0100
-@@ -23,7 +23,11 @@
-
- #ifdef MOZ_X11
- #include
-+#include "X11UndefineNone.h"
- #endif /* MOZ_X11 */
-+#ifdef MOZ_WAYLAND
-+#include
-+#endif
-
- #include "mozilla/widget/WindowSurface.h"
- #include "mozilla/widget/WindowSurfaceProvider.h"
-@@ -172,11 +176,7 @@ public:
- GdkRectangle DevicePixelsToGdkRectRoundOut(LayoutDeviceIntRect aRect);
-
- // event callbacks
--#if (MOZ_WIDGET_GTK == 2)
-- gboolean OnExposeEvent(GdkEventExpose *aEvent);
--#else
- gboolean OnExposeEvent(cairo_t *cr);
--#endif
- gboolean OnConfigureEvent(GtkWidget *aWidget,
- GdkEventConfigure *aEvent);
- void OnContainerUnrealize();
-@@ -315,10 +315,6 @@ public:
- nsresult UpdateTranslucentWindowAlphaInternal(const nsIntRect& aRect,
- uint8_t* aAlphas, int32_t aStride);
-
--#if (MOZ_WIDGET_GTK == 2)
-- static already_AddRefed GetDrawTargetForGdkDrawable(GdkDrawable* aDrawable,
-- const mozilla::gfx::IntSize& aSize);
--#endif
- virtual void ReparentNativeWidget(nsIWidget* aNewParent) override;
-
- virtual nsresult SynthesizeNativeMouseEvent(LayoutDeviceIntPoint aPoint,
-@@ -348,9 +344,14 @@ public:
- nsIObserver* aObserver) override;
- #endif
-
-+
- #ifdef MOZ_X11
- Display* XDisplay() { return mXDisplay; }
- #endif
-+#ifdef MOZ_WAYLAND
-+ wl_display* GetWaylandDisplay();
-+ wl_surface* GetWaylandSurface();
-+#endif
- virtual void GetCompositorWidgetInitData(mozilla::widget::CompositorWidgetInitData* aInitData) override;
-
- virtual nsresult SetNonClientMargins(LayoutDeviceIntMargin& aMargins) override;
-@@ -374,6 +375,18 @@ public:
- virtual bool WidgetTypeSupportsAcceleration() override;
-
- bool DoDrawTitlebar() const;
-+
-+ typedef enum { CSD_SUPPORT_FULL, // CSD including shadows
-+ CSD_SUPPORT_FLAT, // CSD without shadows
-+ CSD_SUPPORT_NONE, // WM does not support CSD at all
-+ CSD_SUPPORT_UNKNOWN
-+ } CSDSupportLevel;
-+ /**
-+ * Get the support of Client Side Decoration by checking
-+ * the XDG_CURRENT_DESKTOP environment variable.
-+ */
-+ static CSDSupportLevel GetCSDSupportLevel();
-+
- protected:
- virtual ~nsWindow();
-
-@@ -423,6 +436,7 @@ private:
- nsWindow *GetContainerWindow();
- void SetUrgencyHint(GtkWidget *top_window, bool state);
- void SetDefaultIcon(void);
-+ void SetWindowDecoration(nsBorderStyle aStyle);
- void InitButtonEvent(mozilla::WidgetMouseEvent& aEvent,
- GdkEventButton* aGdkEvent);
- bool DispatchCommandEvent(nsAtom* aCommand);
-@@ -441,7 +455,6 @@ private:
- nsIWidgetListener* GetListener();
- bool IsComposited() const;
-
--
- GtkWidget *mShell;
- MozContainer *mContainer;
- GdkWindow *mGdkWindow;
-@@ -578,16 +591,6 @@ private:
- RefPtr mIMContext;
-
- mozilla::UniquePtr mCurrentTimeGetter;
-- typedef enum { CSD_SUPPORT_FULL, // CSD including shadows
-- CSD_SUPPORT_FLAT, // CSD without shadows
-- CSD_SUPPORT_NONE, // WM does not support CSD at all
-- CSD_SUPPORT_UNKNOWN
-- } CSDSupportLevel;
-- /**
-- * Get the support of Client Side Decoration by checking
-- * the XDG_CURRENT_DESKTOP environment variable.
-- */
-- static CSDSupportLevel GetCSDSupportLevel();
- static CSDSupportLevel sCSDSupportLevel;
- };
-
diff --git a/mozilla-kde.patch b/mozilla-kde.patch
index 4421f4b..cc35b0a 100644
--- a/mozilla-kde.patch
+++ b/mozilla-kde.patch
@@ -1,5 +1,5 @@
# HG changeset patch
-# Parent 5be2231eadfb6de978e93c0ba95469e8a4d54cb0
+# Parent 97234138e3aafe66fc7f17c8f530e7c534af2fc2
Description: Add KDE integration to Firefox (toolkit parts)
Author: Wolfgang Rosenauer
Author: Lubos Lunak
@@ -9,7 +9,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
-@@ -75,16 +75,17 @@
+@@ -76,16 +76,17 @@
#include "nsXPCOMCID.h"
#include "nsXPCOM.h"
#include "nsXULAppAPI.h"
@@ -20,68 +20,14 @@ diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp
#include "prlink.h"
+#include "nsKDEUtils.h"
- #ifdef MOZ_CRASHREPORTER
- #include "nsICrashReporter.h"
- #endif
-
#ifdef XP_WIN
#include "windows.h"
#endif
-@@ -4324,16 +4325,34 @@ pref_LoadPrefsInDirList(const char* aLis
- {
- nsresult rv;
- nsCOMPtr dirSvc(
- do_GetService(NS_DIRECTORY_SERVICE_CONTRACTID, &rv));
- if (NS_FAILED(rv)) {
- return rv;
- }
-+ // make sure we load these special files after all the others
-+ static const char* specialFiles[] = {
-+#if defined(XP_UNIX)
-+ ""
-+#endif
-+ };
-+
-+ if (nsKDEUtils::kdeSession()) {
-+ for(int i = 0;
-+ i < MOZ_ARRAY_LENGTH(specialFiles);
-+ ++i ) {
-+ if (*specialFiles[ i ] == '\0') {
-+ specialFiles[ i ] = "kde.js";
-+ break;
-+ }
-+ }
-+ }
-+
- nsCOMPtr list;
- dirSvc->Get(aListId, NS_GET_IID(nsISimpleEnumerator), getter_AddRefs(list));
- if (!list) {
- return NS_OK;
- }
+ using namespace mozilla;
- bool hasMore;
- while (NS_SUCCEEDED(list->HasMoreElements(&hasMore)) && hasMore) {
-@@ -4344,17 +4363,17 @@ pref_LoadPrefsInDirList(const char* aLis
- }
-
- nsCOMPtr path = do_QueryInterface(elem);
- if (!path) {
- continue;
- }
-
- // Do we care if a file provided by this process fails to load?
-- pref_LoadPrefsInDir(path, nullptr, 0);
-+ pref_LoadPrefsInDir(path, specialFiles, ArrayLength(specialFiles));
- }
-
- return NS_OK;
- }
-
- static nsresult
- pref_ReadPrefFromJar(nsZipArchive* aJarReader, const char* aName)
- {
-@@ -4461,25 +4480,37 @@ pref_InitInitialObjects()
+ #ifdef DEBUG
+@@ -4235,25 +4236,37 @@ Preferences::InitInitialObjects()
// application pref files for backwards compatibility.
static const char* specialFiles[] = {
#if defined(XP_MACOSX)
@@ -119,6 +65,25 @@ 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.
+@@ -4302,17 +4315,17 @@ Preferences::InitInitialObjects()
+ }
+
+ nsCOMPtr path = do_QueryInterface(elem);
+ if (!path) {
+ continue;
+ }
+
+ // Do we care if a file provided by this process fails to load?
+- pref_LoadPrefsInDir(path, nullptr, 0);
++ pref_LoadPrefsInDir(path, specialFiles, ArrayLength(specialFiles));
+ }
+ }
+
+ #ifdef MOZ_WIDGET_ANDROID
+ // Set up the correct default for toolkit.telemetry.enabled. If this build
+ // has MOZ_TELEMETRY_ON_BY_DEFAULT *or* we're on the beta channel, telemetry
+ // is on by default, otherwise not. This is necessary so that beta users who
+ // are testing final release builds don't flipflop defaults.
diff --git a/modules/libpref/moz.build b/modules/libpref/moz.build
--- a/modules/libpref/moz.build
+++ b/modules/libpref/moz.build
@@ -205,11 +170,11 @@ diff --git a/toolkit/components/downloads/moz.build b/toolkit/components/downloa
diff --git a/toolkit/content/jar.mn b/toolkit/content/jar.mn
--- a/toolkit/content/jar.mn
+++ b/toolkit/content/jar.mn
-@@ -75,29 +75,33 @@ toolkit.jar:
+@@ -67,16 +67,18 @@ toolkit.jar:
+ content/global/bindings/checkbox.xml (widgets/checkbox.xml)
content/global/bindings/colorpicker.xml (widgets/colorpicker.xml)
content/global/bindings/datekeeper.js (widgets/datekeeper.js)
content/global/bindings/datepicker.js (widgets/datepicker.js)
- content/global/bindings/datetimepicker.xml (widgets/datetimepicker.xml)
content/global/bindings/datetimepopup.xml (widgets/datetimepopup.xml)
content/global/bindings/datetimebox.xml (widgets/datetimebox.xml)
content/global/bindings/datetimebox.css (widgets/datetimebox.css)
@@ -217,7 +182,6 @@ diff --git a/toolkit/content/jar.mn b/toolkit/content/jar.mn
+* 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/editor.xml (widgets/editor.xml)
- content/global/bindings/expander.xml (widgets/expander.xml)
content/global/bindings/filefield.xml (widgets/filefield.xml)
* content/global/bindings/findbar.xml (widgets/findbar.xml)
content/global/bindings/general.xml (widgets/general.xml)
@@ -225,30 +189,20 @@ diff --git a/toolkit/content/jar.mn b/toolkit/content/jar.mn
content/global/bindings/listbox.xml (widgets/listbox.xml)
content/global/bindings/menu.xml (widgets/menu.xml)
content/global/bindings/menulist.xml (widgets/menulist.xml)
- content/global/bindings/notification.xml (widgets/notification.xml)
- content/global/bindings/numberbox.xml (widgets/numberbox.xml)
- content/global/bindings/popup.xml (widgets/popup.xml)
- * content/global/bindings/preferences.xml (widgets/preferences.xml)
-+* content/global/bindings/preferences-kde.xml (widgets/preferences-kde.xml)
-+% override chrome://global/content/bindings/preferences.xml chrome://global/content/bindings/preferences-kde.xml desktop=kde
- content/global/bindings/progressmeter.xml (widgets/progressmeter.xml)
- content/global/bindings/radio.xml (widgets/radio.xml)
- content/global/bindings/remote-browser.xml (widgets/remote-browser.xml)
- content/global/bindings/resizer.xml (widgets/resizer.xml)
- content/global/bindings/richlistbox.xml (widgets/richlistbox.xml)
- content/global/bindings/scale.xml (widgets/scale.xml)
- content/global/bindings/scrollbar.xml (widgets/scrollbar.xml)
- content/global/bindings/scrollbox.xml (widgets/scrollbox.xml)
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,459 @@
+@@ -0,0 +1,477 @@
+
+
+
++
++ %globalKeysDTD;
++]>
+
+
+#endif
+
++
++
++
++#else
++ keycode="&openHelp.commandkey;"/>
++#endif
++
++
+
+
+
@@ -313,7 +277,7 @@ new file mode 100644
+
+
+
@@ -464,6 +428,20 @@ new file mode 100644
+