# HG changeset patch # User Wolfgang Rosenauer # Date 1518190249 -3600 # Node ID 8220ea23b47d48a8c4c6e9899cd09af19d38a096 # Parent 4b419fce88dc1e5d483a441c551c2751367c8416 remove obsolete patches updated patches reworked create-tar.sh to work with in-tree information diff -r 4b419fce88dc -r 8220ea23b47d MozillaFirefox/MozillaFirefox.changes --- a/MozillaFirefox/MozillaFirefox.changes Fri Feb 09 13:28:07 2018 +0100 +++ b/MozillaFirefox/MozillaFirefox.changes Fri Feb 09 16:30:49 2018 +0100 @@ -4,6 +4,12 @@ - update to Firefox 59.0b8 - 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 12:06:31 UTC 2018 - wr@rosenauer.org diff -r 4b419fce88dc -r 8220ea23b47d MozillaFirefox/MozillaFirefox.spec --- a/MozillaFirefox/MozillaFirefox.spec Fri Feb 09 13:28:07 2018 +0100 +++ b/MozillaFirefox/MozillaFirefox.spec Fri Feb 09 16:30:49 2018 +0100 @@ -136,7 +136,6 @@ 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,10 @@ 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 # 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 @@ -264,12 +260,9 @@ %endif %patch7 -p1 %patch8 -p1 -%patch9 -p1 -%patch10 -p1 # Firefox %patch101 -p1 %patch102 -p1 -%patch103 -p1 %build # no need to add build time to binaries diff -r 4b419fce88dc -r 8220ea23b47d MozillaFirefox/create-tar.sh --- a/MozillaFirefox/create-tar.sh Fri Feb 09 13:28:07 2018 +0100 +++ b/MozillaFirefox/create-tar.sh Fri Feb 09 16:30:49 2018 +0100 @@ -10,6 +10,11 @@ RELEASE_TAG="73ef186ad51ac2c4fc27b1f149fcc94355fe7dc6" VERSION="58.99" +# 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 pushd mozilla @@ -54,19 +59,19 @@ # 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 -r 4b419fce88dc -r 8220ea23b47d MozillaFirefox/firefox-no-default-ualocale.patch --- a/MozillaFirefox/firefox-no-default-ualocale.patch Fri Feb 09 13:28:07 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -../firefox-no-default-ualocale.patch \ No newline at end of file diff -r 4b419fce88dc -r 8220ea23b47d MozillaFirefox/l10n_changesets.txt --- a/MozillaFirefox/l10n_changesets.txt Fri Feb 09 13:28:07 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -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 -r 4b419fce88dc -r 8220ea23b47d MozillaFirefox/mozilla-alsa-sandbox.patch --- a/MozillaFirefox/mozilla-alsa-sandbox.patch Fri Feb 09 13:28:07 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -../mozilla-alsa-sandbox.patch \ No newline at end of file diff -r 4b419fce88dc -r 8220ea23b47d MozillaFirefox/mozilla-enable-csd.patch --- a/MozillaFirefox/mozilla-enable-csd.patch Fri Feb 09 13:28:07 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -../mozilla-enable-csd.patch \ No newline at end of file diff -r 4b419fce88dc -r 8220ea23b47d firefox-branded-icons.patch --- a/firefox-branded-icons.patch Fri Feb 09 13:28:07 2018 +0100 +++ b/firefox-branded-icons.patch Fri Feb 09 16:30:49 2018 +0100 @@ -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 += [ + 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', - 'mozicon128.png', - ] - FINAL_TARGET_FILES.icons += ['mozicon128.png'] - FINAL_TARGET_FILES.chrome.icons.default += [ - 'default16.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 @@ +@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 -r 4b419fce88dc -r 8220ea23b47d firefox-no-default-ualocale.patch --- a/firefox-no-default-ualocale.patch Fri Feb 09 13:28:07 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -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 -r 4b419fce88dc -r 8220ea23b47d mozilla-alsa-sandbox.patch --- a/mozilla-alsa-sandbox.patch Fri Feb 09 13:28:07 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -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 -r 4b419fce88dc -r 8220ea23b47d mozilla-enable-csd.patch --- a/mozilla-enable-csd.patch Fri Feb 09 13:28:07 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -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 -r 4b419fce88dc -r 8220ea23b47d mozilla-idldir.patch --- a/mozilla-idldir.patch Fri Feb 09 13:28:07 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ -# HG changeset patch -# Parent 1cd1e78dfe63c1a7bcfc0707697bb99bcfea19c4 -# User Wolfgang Rosenauer -# Parent a3ba03360353036e15ec6d275c14d82d783c53f5 -Install IDL files to includedir instead of /usr/share/idl - -diff --git a/config/baseconfig.mk b/config/baseconfig.mk ---- a/config/baseconfig.mk -+++ b/config/baseconfig.mk -@@ -1,14 +1,14 @@ - # This file is normally included by autoconf.mk, but it is also used - # directly in python/mozbuild/mozbuild/base.py for gmake validation. - # We thus use INCLUDED_AUTOCONF_MK to enable/disable some parts depending - # whether a normal build is happening or whether the check is running. - includedir := $(includedir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) --idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) -+idldir = $(includedir) - installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) - sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION) - ifeq (.,$(DEPTH)) - DIST = dist - else - DIST = $(DEPTH)/dist - endif - ABS_DIST = $(topobjdir)/dist diff -r 4b419fce88dc -r 8220ea23b47d mozilla-kde.patch --- a/mozilla-kde.patch Fri Feb 09 13:28:07 2018 +0100 +++ b/mozilla-kde.patch Fri Feb 09 16:30:49 2018 +0100 @@ -1,5 +1,5 @@ # HG changeset patch -# Parent 5be2231eadfb6de978e93c0ba95469e8a4d54cb0 +# Parent 0a40cd14044b87117b99763e7a155b6deb5ab180 Description: Add KDE integration to Firefox (toolkit parts) Author: Wolfgang Rosenauer Author: Lubos Lunak @@ -9,7 +9,7 @@ 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 @@ #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; - } + + using namespace mozilla; -+ // 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; - } - - 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 @@ // 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/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 @@ +* 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 @@ 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; ++]> + + -diff --git a/toolkit/content/widgets/preferences-kde.xml b/toolkit/content/widgets/preferences-kde.xml -new file mode 100644 ---- /dev/null -+++ b/toolkit/content/widgets/preferences-kde.xml -@@ -0,0 +1,1409 @@ -+ -+ -+ -+ %preferencesDTD; -+ -+ %globalKeysDTD; -+]> -+ -+ -+ -+# -+# = Preferences Window Framework -+# -+# The syntax for use looks something like: -+# -+# -+# -+# -+# -+# -+# -+# -+# -+# -+# -+ -+ -+ -+ -+ -+ elements is constructed. Its purpose is to propagate -+ // the values to the associated form elements. Sometimes the code for -+ // some initializers depend on other elements -+ // being initialized so we wait and call updateElements on all of them -+ // once the last one has been constructed. See bugs 997570 and 992185. -+ -+ var elements = this.getElementsByTagName("preference"); -+ for (let element of elements) { -+ element.updateElements(); -+ } -+ -+ this._constructAfterChildrenCalled = true; -+ ]]> -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Components.classes["@mozilla.org/preferences-service;1"] -+ .getService(Components.interfaces.nsIPrefService); -+ -+ -+ Components.classes["@mozilla.org/preferences-service;1"] -+ .getService(Components.interfaces.nsIPrefBranch); -+ -+ -+ this.service.getDefaultBranch(""); -+ -+ -+ Components.classes["@mozilla.org/preferences-service;1"] -+ .getService(Components.interfaces.nsIPrefBranch); -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ null -+ -+ false -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ was added after _constructAfterChildren() was already called. -+ // We can directly call updateElements(). -+ this.updateElements(); -+ return; -+ } -+ this.preferences._constructedChildrenCount++; -+ if (this.preferences._constructedChildrenCount == -+ this.preferences._preferenceChildren.length) { -+ // This is the last , time to updateElements() on all of them. -+ this.preferences._constructAfterChildren(); -+ } -+ ]]> -+ -+ -+ this.preferences.rootBranchInternal -+ .removeObserver(this.name, this.preferences); -+ -+ false -+ -+ -+ if (this.getAttribute("instantApply") == "false") -+ return false; -+ return this.getAttribute("instantApply") == "true" || this.preferences.instantApply; -+ -+ -+ -+ -+ -+ -+ if (val == this.name) -+ return val; -+ -+ this.preferences.rootBranchInternal -+ .removeObserver(this.name, this.preferences); -+ this.setAttribute("name", val); -+ this.preferences.rootBranchInternal -+ .addObserver(val, this.preferences); -+ -+ return val; -+ -+ -+ -+ -+ -+ -+ null -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ return this.preferences.rootBranch.prefIsLocked(this.name); -+ -+ -+ -+ -+ -+ return this.getAttribute("disabled") == "true"; -+ -+ -+ -+ -+ -+ -+ -+ -+ return parseInt(this.getAttribute("tabindex")); -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ // defer reset until preference update -+ this.value = undefined; -+ -+ -+ -+ false -+ -+ -+ -+ -+ -+ -+ -+ -+ return this._useDefault ? this.preferences.defaultBranch : this.preferences.rootBranch; -+ -+ -+ -+ false -+ -+ -+ -+ with id='" + this.id + "' and name='" + -+ this.name + "' has unknown type '" + this.type + "'."; -+ consoleService.logStringMessage(msg); -+ ]]> -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ this.updateElements(); -+ -+ -+ -+ -+ -+ -+ -+ -+ -+#else -+ title="&preferencesDefaultTitleMac.title;"> -+#endif -+ -+ -+ -+ -+ -+ -+ -+ -+ -+#ifndef XP_UNIX -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ false -+ -+ false -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ this.setAttribute("lastSelected", val); -+ document.persist(this.id, "lastSelected"); -+ return val; -+ -+ -+ -+ -+ if (!this._currentPane) -+ this._currentPane = this.preferencePanes[0]; -+ -+ return this._currentPane; -+ -+ -+ null -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ false -+ -+ -+ -+ 1) -+ aPaneElement.removeAttribute("flex"); -+ // Calling sizeToContent after the first prefpane is loaded -+ // will size the windows contents so style information is -+ // available to calculate correct sizing. -+ if (!this._initialized && prefpanes.length > 1) { -+ if (this._shouldAnimate) -+ this.style.minHeight = 0; -+ window.sizeToContent(); -+ } -+ -+ var oldPane = this.lastSelected ? document.getElementById(this.lastSelected) : this.preferencePanes[0]; -+ oldPane.selected = !(aPaneElement.selected = true); -+ this.lastSelected = aPaneElement.id; -+ this.currentPane = aPaneElement; -+ this._initialized = true; -+ -+ // Only animate if we've switched between prefpanes -+ if (this._shouldAnimate && oldPane.id != aPaneElement.id) { -+ aPaneElement.style.opacity = 0.0; -+ this.animate(oldPane, aPaneElement); -+ } else if (!this._shouldAnimate && prefpanes.length > 1) { -+ var targetHeight = parseInt(window.getComputedStyle(this._paneDeckContainer).height); -+ var verticalPadding = parseInt(window.getComputedStyle(aPaneElement).paddingTop); -+ verticalPadding += parseInt(window.getComputedStyle(aPaneElement).paddingBottom); -+ if (aPaneElement.contentHeight > targetHeight - verticalPadding) { -+ // To workaround the bottom border of a groupbox from being -+ // cutoff an hbox with a class of bottomBox may enclose it. -+ // This needs to include its padding to resize properly. -+ // See bug 394433 -+ var bottomPadding = 0; -+ var bottomBox = aPaneElement.getElementsByAttribute("class", "bottomBox")[0]; -+ if (bottomBox) -+ bottomPadding = parseInt(window.getComputedStyle(bottomBox).paddingBottom); -+ window.innerHeight += bottomPadding + verticalPadding + aPaneElement.contentHeight - targetHeight; -+ } -+ -+ // XXX rstrong - extend the contents of the prefpane to -+ // prevent elements from being cutoff (see bug 349098). -+ if (aPaneElement.contentHeight + verticalPadding < targetHeight) -+ aPaneElement._content.style.height = targetHeight - verticalPadding + "px"; -+ } -+ } -+ break; -+ } -+ } -+ ]]> -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ oldHeight ? 1 : -1; -+ var sizeDelta = Math.abs(oldHeight - aNewPane.contentHeight); -+ this._animateRemainder = sizeDelta % this._animateIncrement; -+ -+ this._setUpAnimationTimer(oldHeight); -+ ]]> -+ -+ -+ -+ -+ -+ 0 && this._currentHeight >= lastSelectedPane.contentHeight) || -+ (this._multiplier < 0 && this._currentHeight <= lastSelectedPane.contentHeight)) -+ return 0; -+ -+ if ((this._multiplier > 0 && newHeight > lastSelectedPane.contentHeight) || -+ (this._multiplier < 0 && newHeight < lastSelectedPane.contentHeight)) -+ increment = this._animateRemainder * this._multiplier; -+ return increment; -+ ]]> -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ null -+ null -+ 15 -+ 40 -+ 5 -+ 0.40 -+ 0 -+ 0 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ return openDialog(aURL, "", "modal,centerscreen,resizable=no" + (aFeatures != "" ? ("," + aFeatures) : ""), aParams); -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ if (event.originalTarget.hasAttribute("pane")) { -+ var pane = document.getElementById(event.originalTarget.getAttribute("pane")); -+ this.showPane(pane); -+ } -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ false -+ -+ -+ -+ -+ -+ return document.getElementById(aElement.getAttribute("preference")); -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ new Set(); -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ var targetHeight = parseInt(window.getComputedStyle(this._content).height); -+ targetHeight += parseInt(window.getComputedStyle(this._content).marginTop); -+ targetHeight += parseInt(window.getComputedStyle(this._content).marginBottom); -+ return targetHeight; -+ -+ -+ -+ document.getAnonymousElementByAttribute(this, "class", "content-box"); -+ -+ -+ -+ -+ // This "command" event handler tracks changes made to preferences by -+ // the user in this window. -+ if (event.sourceEvent) -+ event = event.sourceEvent; -+ this.userChangedValue(event.target); -+ -+ -+ // This "select" event handler tracks changes made to colorpicker -+ // preferences by the user in this window. -+ if (event.target.localName == "colorpicker") -+ this.userChangedValue(event.target); -+ -+ -+ // This "change" event handler tracks changes made to preferences by -+ // the user in this window. -+ this.userChangedValue(event.target); -+ -+ -+ // This "input" event handler tracks changes made to preferences by -+ // the user in this window. -+ this.userChangedValue(event.target); -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+# -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- -+# This Source Code Form is subject to the terms of the Mozilla Public -+# License, v. 2.0. If a copy of the MPL was not distributed with this -+# file, You can obtain one at http://mozilla.org/MPL/2.0/. -+ -+# -+# This is PrefWindow 6. The Code Could Well Be Ready, Are You? -+# -+# Historical References: -+# PrefWindow V (February 1, 2003) -+# PrefWindow IV (April 24, 2000) -+# PrefWindow III (January 6, 2000) -+# PrefWindow II (???) -+# PrefWindow I (June 4, 1999) -+# diff --git a/toolkit/mozapps/downloads/nsHelperAppDlg.js b/toolkit/mozapps/downloads/nsHelperAppDlg.js --- a/toolkit/mozapps/downloads/nsHelperAppDlg.js +++ b/toolkit/mozapps/downloads/nsHelperAppDlg.js @@ -2327,7 +881,7 @@ --- a/toolkit/xre/moz.build +++ b/toolkit/xre/moz.build @@ -61,17 +61,19 @@ elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'co - '../components/printingui/mac', + '../components/printingui', ] elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'uikit': UNIFIED_SOURCES += [ @@ -2755,14 +1309,14 @@ SOURCES += [ osdir + '/nsOSHelperAppService.cpp', ] - if CONFIG['GNU_CXX']: + if CONFIG['CC_TYPE'] in ('clang', 'gcc'): CXXFLAGS += ['-Wno-error=shadow'] if 'gtk' in CONFIG['MOZ_WIDGET_TOOLKIT']: UNIFIED_SOURCES += [ + 'unix/nsCommonRegistry.cpp', 'unix/nsGNOMERegistry.cpp', -+ 'unix/nsKDERegistry.cpp', ++ 'unix/nsKDERegistry.cpp', 'unix/nsMIMEInfoUnix.cpp', ] elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'android': @@ -2771,7 +1325,7 @@ 'android/nsExternalSharingAppService.cpp', 'android/nsExternalURLHandlerService.cpp', 'android/nsMIMEInfoAndroid.cpp', -@@ -129,16 +131,17 @@ include('/ipc/chromium/chromium-config.m +@@ -124,16 +126,17 @@ include('/ipc/chromium/chromium-config.m FINAL_LIBRARY = 'xul' LOCAL_INCLUDES += [ @@ -2787,7 +1341,7 @@ CXXFLAGS += CONFIG['TK_CFLAGS'] CXXFLAGS += CONFIG['MOZ_DBUS_CFLAGS'] - if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3'): + if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk3': CXXFLAGS += CONFIG['TK_CFLAGS'] diff --git a/uriloader/exthandler/unix/nsCommonRegistry.cpp b/uriloader/exthandler/unix/nsCommonRegistry.cpp new file mode 100644 @@ -3073,14 +1627,14 @@ if (*_retval) return NS_OK; -@@ -79,16 +82,33 @@ nsMIMEInfoUnix::LaunchDefaultWithFile(ns - ContentAction::Action::defaultActionForFile(uri, QString(mSchemeOrType.get())); - if (action.isValid()) { - action.trigger(); - return NS_OK; - } - return NS_ERROR_FAILURE; - #endif +@@ -59,16 +62,33 @@ nsMIMEInfoUnix::LaunchDefaultWithFile(ns + // either /etc/mailcap or ${HOME}/.mailcap, in which case we don't want to + // give the GNOME answer. + if (mDefaultApplication) + return nsMIMEInfoImpl::LaunchDefaultWithFile(aFile); + + nsAutoCString nativePath; + aFile->GetNativePath(nativePath); + if( nsKDEUtils::kdeSupport()) { + bool supports; @@ -3208,7 +1762,7 @@ diff --git a/widget/gtk/moz.build b/widget/gtk/moz.build --- a/widget/gtk/moz.build +++ b/widget/gtk/moz.build -@@ -109,16 +109,17 @@ else: +@@ -121,16 +121,17 @@ else: include('/ipc/chromium/chromium-config.mozbuild') FINAL_LIBRARY = 'xul' @@ -3577,7 +2131,7 @@ + NS_IMETHODIMP kdeAppsDialog(PRInt16 *aReturn); + nsCString kdeMakeFilter( int index ); + - #if (MOZ_WIDGET_GTK == 3) + #ifdef MOZ_WIDGET_GTK GtkFileChooserWidget *mFileChooserDelegate; #endif }; @@ -3756,7 +2310,7 @@ #include "prmem.h" #include "plbase64.h" -@@ -1938,59 +1939,74 @@ nsLocalFile::SetPersistentDescriptor(con +@@ -1934,59 +1935,74 @@ nsLocalFile::SetPersistentDescriptor(con return InitWithNativePath(aPersistentDescriptor); #endif } @@ -3835,5 +2389,5 @@ } return giovfs->ShowURIForInput(mPath); - #elif defined(MOZ_ENABLE_CONTENTACTION) - QUrl uri = QUrl::fromLocalFile(QString::fromUtf8(mPath.get())); + #elif defined(MOZ_WIDGET_ANDROID) + // Try to get a mimetype, if this fails just use the file uri alone diff -r 4b419fce88dc -r 8220ea23b47d series --- a/series Fri Feb 09 13:28:07 2018 +0100 +++ b/series Fri Feb 09 16:30:49 2018 +0100 @@ -2,16 +2,12 @@ mozilla-nongnome-proxies.patch mozilla-kde.patch mozilla-ntlm-full-path.patch -mozilla-idldir.patch mozilla-openaes-decl.patch mozilla-no-stdcxx-check.patch mozilla-reduce-files-per-UnifiedBindings.patch mozilla-aarch64-startup-crash.patch -mozilla-enable-csd.patch mozilla-bmo256180.patch -mozilla-alsa-sandbox.patch # Firefox patches firefox-kde.patch -firefox-no-default-ualocale.patch firefox-branded-icons.patch