Added patches for correct popups position at CSD mode (mozilla-1457691)

This commit is contained in:
Martin Stransky 2018-04-30 12:07:49 +02:00
parent bbe9daf281
commit 14c907c375
3 changed files with 408 additions and 1 deletions

View File

@ -0,0 +1,212 @@
diff -up firefox-60.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.old firefox-60.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium
diff -up firefox-60.0/media/webrtc/trunk/Makefile.old firefox-60.0/media/webrtc/trunk/Makefile
diff -up firefox-60.0/widget/gtk/gtk3drawing.cpp.old firefox-60.0/widget/gtk/gtk3drawing.cpp
--- firefox-60.0/widget/gtk/gtk3drawing.cpp.old 2018-04-26 22:07:36.000000000 +0200
+++ firefox-60.0/widget/gtk/gtk3drawing.cpp 2018-04-30 11:59:06.750866104 +0200
@@ -38,6 +38,16 @@ static ToolbarGTKMetrics sToolbarMetrics
#define GTK_STATE_FLAG_CHECKED (1 << 11)
#endif
+static GtkBorder
+operator+=(GtkBorder& first, const GtkBorder& second)
+{
+ first.left += second.left;
+ first.right += second.right;
+ first.top += second.top;
+ first.bottom += second.bottom;
+ return first;
+}
+
static gint
moz_gtk_get_tab_thickness(GtkStyleContext *style);
@@ -3056,6 +3066,76 @@ GetScrollbarMetrics(GtkOrientation aOrie
return metrics;
}
+/*
+ * get_shadow_width() from gtkwindow.c is not public so we need
+ * to implement it.
+ */
+bool
+GetCSDDecorationSize(GtkWindow *aGtkWindow, GtkBorder* aDecorationSize)
+{
+ GtkStyleContext* context = gtk_widget_get_style_context(GTK_WIDGET(aGtkWindow));
+ bool solidDecorations = gtk_style_context_has_class(context, "solid-csd");
+ context = GetStyleContext(solidDecorations ?
+ MOZ_GTK_WINDOW_DECORATION_SOLID :
+ MOZ_GTK_WINDOW_DECORATION);
+
+ /* Always sum border + padding */
+ GtkBorder padding;
+ GtkStateFlags state = gtk_style_context_get_state(context);
+ gtk_style_context_get_border(context, state, aDecorationSize);
+ gtk_style_context_get_padding(context, state, &padding);
+ *aDecorationSize += padding;
+
+ // Available on GTK 3.20+.
+ static auto sGtkRenderBackgroundGetClip =
+ (void (*)(GtkStyleContext*, gdouble, gdouble, gdouble, gdouble, GdkRectangle*))
+ dlsym(RTLD_DEFAULT, "gtk_render_background_get_clip");
+
+ GtkBorder margin;
+ gtk_style_context_get_margin(context, state, &margin);
+
+ GtkBorder extents = {0, 0, 0, 0};
+ if (sGtkRenderBackgroundGetClip) {
+ /* Get shadow extents but combine with style margin; use the bigger value.
+ */
+ GdkRectangle clip;
+ sGtkRenderBackgroundGetClip(context, 0, 0, 0, 0, &clip);
+
+ extents.top = -clip.y;
+ extents.right = clip.width + clip.x;
+ extents.bottom = clip.height + clip.y;
+ extents.left = -clip.x;
+
+ // Margin is used for resize grip size - it's not present on
+ // popup windows.
+ if (gtk_window_get_window_type(aGtkWindow) != GTK_WINDOW_POPUP) {
+ extents.top = MAX(extents.top, margin.top);
+ extents.right = MAX(extents.right, margin.right);
+ extents.bottom = MAX(extents.bottom, margin.bottom);
+ extents.left = MAX(extents.left, margin.left);
+ }
+ } else {
+ /* If we can't get shadow extents use decoration-resize-handle instead
+ * as a workaround. This is inspired by update_border_windows()
+ * from gtkwindow.c although this is not 100% accurate as we emulate
+ * the extents here.
+ */
+ gint handle;
+ gtk_widget_style_get(GetWidget(MOZ_GTK_WINDOW),
+ "decoration-resize-handle", &handle,
+ NULL);
+
+ extents.top = handle + margin.top;
+ extents.right = handle + margin.right;
+ extents.bottom = handle + margin.bottom;
+ extents.left = handle + margin.left;
+ }
+
+ *aDecorationSize += extents;
+
+ return (sGtkRenderBackgroundGetClip != nullptr);
+}
+
/* cairo_t *cr argument has to be a system-cairo. */
gint
moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
diff -up firefox-60.0/widget/gtk/gtkdrawing.h.old firefox-60.0/widget/gtk/gtkdrawing.h
--- firefox-60.0/widget/gtk/gtkdrawing.h.old 2018-04-26 22:07:35.000000000 +0200
+++ firefox-60.0/widget/gtk/gtkdrawing.h 2018-04-30 11:59:06.750866104 +0200
@@ -334,6 +334,10 @@ typedef enum {
*/
MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE_RESTORE,
+ /* Client-side window decoration node. Available on GTK 3.20+. */
+ MOZ_GTK_WINDOW_DECORATION,
+ MOZ_GTK_WINDOW_DECORATION_SOLID,
+
MOZ_GTK_WIDGET_NODE_COUNT
} WidgetNodeType;
@@ -606,4 +610,17 @@ GetToolbarButtonMetrics(WidgetNodeType a
int
GetGtkHeaderBarButtonLayout(WidgetNodeType* aButtonLayout, int aMaxButtonNums);
+/**
+ * Get size of CSD window extents of given GtkWindow.
+ *
+ * aGtkWindow [IN] Decorated window.
+ * aDecorationSize [OUT] Returns calculated (or estimated) decoration
+ * size of given aGtkWindow.
+ *
+ * returns: True if we have extract decoration size (for GTK 3.20+)
+ * False if we have only an estimation (for GTK+ before 3.20+)
+ */
+bool
+GetCSDDecorationSize(GtkWindow *aGtkWindow, GtkBorder* aDecorationSize);
+
#endif
diff -up firefox-60.0/widget/gtk/nsWindow.cpp.old firefox-60.0/widget/gtk/nsWindow.cpp
--- firefox-60.0/widget/gtk/nsWindow.cpp.old 2018-04-30 12:01:38.788343254 +0200
+++ firefox-60.0/widget/gtk/nsWindow.cpp 2018-04-30 12:00:01.012679502 +0200
@@ -127,6 +127,7 @@ using namespace mozilla::widget;
#endif
#include "nsShmImage.h"
+#include "gtkdrawing.h"
#include "nsIDOMWheelEvent.h"
@@ -3360,6 +3361,10 @@ nsWindow::OnWindowStateEvent(GtkWidget *
aEvent->new_window_state & GDK_WINDOW_STATE_FULLSCREEN);
}
}
+
+ if (mDrawInTitlebar && mCSDSupportLevel == CSD_SUPPORT_CLIENT) {
+ UpdateClientOffsetForCSDWindow();
+ }
}
void
@@ -6556,6 +6561,32 @@ nsWindow::ClearCachedResources()
}
}
+/* nsWindow::UpdateClientOffsetForCSDWindow() is designed to be called from
+ * paint code to update mClientOffset any time. It also propagates
+ * the mClientOffset to child tabs.
+ *
+ * It works only for CSD decorated GtkWindow.
+ */
+void
+nsWindow::UpdateClientOffsetForCSDWindow()
+{
+ // _NET_FRAME_EXTENTS is not set on client decorated windows,
+ // so we need to read offset between mContainer and toplevel mShell
+ // window.
+ if (mSizeState == nsSizeMode_Normal) {
+ GtkBorder decorationSize;
+ GetCSDDecorationSize(GTK_WINDOW(mShell), &decorationSize);
+ mClientOffset = nsIntPoint(decorationSize.left, decorationSize.top);
+ } else {
+ mClientOffset = nsIntPoint(0, 0);
+ }
+
+ // Send a WindowMoved notification. This ensures that TabParent
+ // picks up the new client offset and sends it to the child process
+ // if appropriate.
+ NotifyWindowMoved(mBounds.x, mBounds.y);
+}
+
nsresult
nsWindow::SetNonClientMargins(LayoutDeviceIntMargin &aMargins)
{
@@ -6628,6 +6659,13 @@ nsWindow::SetDrawsInTitlebar(bool aState
mNeedsShow = true;
NativeResize();
+ // When we use system titlebar setup managed by Gtk+ we also get
+ // _NET_FRAME_EXTENTS property for our toplevel window so we can't
+ // update the client offset it here.
+ if (aState) {
+ UpdateClientOffsetForCSDWindow();
+ }
+
gtk_widget_destroy(tmpWindow);
}
}
diff -up firefox-60.0/widget/gtk/nsWindow.h.old firefox-60.0/widget/gtk/nsWindow.h
--- firefox-60.0/widget/gtk/nsWindow.h.old 2018-04-26 22:07:35.000000000 +0200
+++ firefox-60.0/widget/gtk/nsWindow.h 2018-04-30 11:57:33.656146337 +0200
@@ -456,6 +456,8 @@ private:
nsIWidgetListener* GetListener();
bool IsComposited() const;
+ void UpdateClientOffsetForCSDWindow();
+
GtkWidget *mShell;
MozContainer *mContainer;
GdkWindow *mGdkWindow;

View File

@ -96,7 +96,7 @@
Summary: Mozilla Firefox Web browser
Name: firefox
Version: 60.0
Release: 0.2%{?pre_tag}%{?dist}
Release: 0.3%{?pre_tag}%{?dist}
URL: https://www.mozilla.org/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
Source0: https://hg.mozilla.org/releases/mozilla-release/archive/firefox-%{version}%{?pre_version}.source.tar.xz
@ -153,6 +153,8 @@ Patch412: mozilla-1337988.patch
Patch413: mozilla-1353817.patch
Patch414: mozilla-1435212-ffmpeg-4.0.patch
Patch415: Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch
Patch416: mozilla-1424422.patch
Patch417: complete-csd-window-offset-mozilla-1457691.patch
# Debian patches
Patch500: mozilla-440908.patch
@ -321,6 +323,8 @@ This package contains results of tests executed during build.
%ifarch %{arm}
%patch415 -p1 -b .mozilla-1238661
%endif
%patch416 -p1 -b .1424422
%patch417 -p1 -b .complete-csd-1457691
# Patch for big endian platforms only
%if 0%{?big_endian}
@ -846,6 +850,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
* Mon Apr 30 2018 Martin Stransky <stransky@redhat.com> - 60.0-0.3
- Added patches for correct popups position at CSD mode (mozilla-1457691).
* Fri Apr 27 2018 Martin Stransky <stransky@redhat.com> - 60.0-0.2
- Update to 60.0 Beta 16

188
mozilla-1424422.patch Normal file
View File

@ -0,0 +1,188 @@
diff -up firefox-60.0/browser/base/content/browser.js.1424422 firefox-60.0/browser/base/content/browser.js
--- firefox-60.0/browser/base/content/browser.js.1424422 2018-04-26 22:07:20.000000000 +0200
+++ firefox-60.0/browser/base/content/browser.js 2018-04-30 11:49:51.609458857 +0200
@@ -1259,6 +1259,9 @@ var gBrowserInit = {
if (AppConstants.CAN_DRAW_IN_TITLEBAR) {
gDragSpaceObserver.init();
+ if (AppConstants.platform == "linux") {
+ gLightThemeObserver.init();
+ }
}
BrowserSearch.initPlaceHolder();
@@ -1826,6 +1829,9 @@ var gBrowserInit = {
if (AppConstants.CAN_DRAW_IN_TITLEBAR) {
gDragSpaceObserver.uninit();
+ if (AppConstants.platform == "linux") {
+ gLightThemeObserver.uninit();
+ }
}
TabsInTitlebar.uninit();
@@ -5781,6 +5787,24 @@ var gDragSpaceObserver = {
},
};
+var gLightThemeObserver = {
+ init() {
+ Services.obs.addObserver(this, "lightweight-theme-styling-update");
+ },
+
+ uninit() {
+ Services.obs.removeObserver(this, "lightweight-theme-styling-update");
+ },
+
+ observe(aSubject, aTopic, aData) {
+ switch (aTopic) {
+ case "lightweight-theme-styling-update":
+ TabsInTitlebar.updateAppearance(true);
+ break;
+ }
+ },
+};
+
// Updates the UI density (for touch and compact mode) based on the uidensity pref.
var gUIDensity = {
MODE_NORMAL: 0,
diff -up firefox-60.0/browser/themes/linux/browser.css.1424422 firefox-60.0/browser/themes/linux/browser.css
--- firefox-60.0/browser/themes/linux/browser.css.1424422 2018-04-26 22:07:21.000000000 +0200
+++ firefox-60.0/browser/themes/linux/browser.css 2018-04-30 11:45:40.388172492 +0200
@@ -691,12 +691,34 @@ notification[value="translation"] menuli
padding-bottom: 2px;
}
+ /* When default theme is used render titlebar command buttons
+ * according to system config.
+ *
+ * When -moz-lwtheme is enabled use similar approach as on Windows platform.
+ */
+ .titlebar-button:-moz-lwtheme {
+ border: none;
+ margin: 0 !important;
+ padding: 8px 17px;
+ }
+ .titlebar-button:-moz-lwtheme > .toolbarbutton-icon {
+ width: 12px;
+ height: 12px;
+ }
+ .titlebar-button:hover:-moz-lwtheme {
+ background-color: Highlight;
+ }
+
/* Render titlebar command buttons according to system config.
* Use full scale icons here as the Gtk+ does.
*/
@media (-moz-gtk-csd-minimize-button) {
- #titlebar-min {
- -moz-appearance: -moz-window-button-minimize;
+ #titlebar-min:not(:-moz-lwtheme) {
+ -moz-appearance: -moz-window-button-minimize;
+ }
+ #titlebar-min:-moz-lwtheme {
+ -moz-appearance: none !important;
+ list-style-image: url(chrome://browser/skin/window-controls/minimize-themes.svg);
}
}
@media (-moz-gtk-csd-minimize-button: 0) {
@@ -706,12 +728,20 @@ notification[value="translation"] menuli
}
@media (-moz-gtk-csd-maximize-button) {
- #titlebar-max {
+ #titlebar-max:not(:-moz-lwtheme) {
-moz-appearance: -moz-window-button-maximize;
}
- :root[sizemode="maximized"] #titlebar-max {
+ #titlebar-max:-moz-lwtheme {
+ -moz-appearance: none !important;
+ list-style-image: url(chrome://browser/skin/window-controls/maximize-themes.svg);
+ }
+ :root[sizemode="maximized"] #titlebar-max:not(:-moz-lwtheme) {
-moz-appearance: -moz-window-button-restore;
}
+ :root[sizemode="maximized"] #titlebar-max:-moz-lwtheme {
+ -moz-appearance: none !important;
+ list-style-image: url(chrome://browser/skin/window-controls/restore-themes.svg);
+ }
}
@media (-moz-gtk-csd-maximize-button: 0) {
#titlebar-max {
@@ -720,9 +750,13 @@ notification[value="translation"] menuli
}
@media (-moz-gtk-csd-close-button) {
- #titlebar-close {
+ #titlebar-close:not(:-moz-lwtheme) {
-moz-appearance: -moz-window-button-close;
}
+ #titlebar-close:-moz-lwtheme {
+ -moz-appearance: none !important;
+ list-style-image: url(chrome://browser/skin/window-controls/close-themes.svg);
+ }
}
@media (-moz-gtk-csd-close-button: 0) {
#titlebar-close {
diff -up firefox-60.0/browser/themes/linux/jar.mn.1424422 firefox-60.0/browser/themes/linux/jar.mn
--- firefox-60.0/browser/themes/linux/jar.mn.1424422 2018-04-26 22:07:20.000000000 +0200
+++ firefox-60.0/browser/themes/linux/jar.mn 2018-04-30 11:45:40.388172492 +0200
@@ -49,9 +49,12 @@ browser.jar:
* skin/classic/browser/preferences/in-content/dialog.css (preferences/in-content/dialog.css)
skin/classic/browser/preferences/applications.css (preferences/applications.css)
skin/classic/browser/tabbrowser/tabDragIndicator.png (tabbrowser/tabDragIndicator.png)
-
skin/classic/browser/sync-desktopIcon.svg (../shared/sync-desktopIcon.svg)
skin/classic/browser/sync-mobileIcon.svg (../shared/sync-mobileIcon.svg)
+ skin/classic/browser/window-controls/close-themes.svg (window-controls/close-themes.svg)
+ skin/classic/browser/window-controls/maximize-themes.svg (window-controls/maximize-themes.svg)
+ skin/classic/browser/window-controls/minimize-themes.svg (window-controls/minimize-themes.svg)
+ skin/classic/browser/window-controls/restore-themes.svg (window-controls/restore-themes.svg)
skin/classic/browser/e10s-64@2x.png (../shared/e10s-64@2x.png)
[extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}] chrome.jar:
diff -up firefox-60.0/browser/themes/linux/window-controls/close-themes.svg.1424422 firefox-60.0/browser/themes/linux/window-controls/close-themes.svg
--- firefox-60.0/browser/themes/linux/window-controls/close-themes.svg.1424422 2018-04-30 11:45:40.388172492 +0200
+++ firefox-60.0/browser/themes/linux/window-controls/close-themes.svg 2018-04-30 11:45:40.388172492 +0200
@@ -0,0 +1,7 @@
+<!-- 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/. -->
+<svg width="12" height="12" xmlns="http://www.w3.org/2000/svg">
+ <path stroke="black" stroke-width="3.6" stroke-opacity=".75" d="M1,1 l 10,10 M1,11 l 10,-10"/>
+ <path stroke="white" stroke-width="1.9" d="M1.75,1.75 l 8.5,8.5 M1.75,10.25 l 8.5,-8.5"/>
+</svg>
diff -up firefox-60.0/browser/themes/linux/window-controls/maximize-themes.svg.1424422 firefox-60.0/browser/themes/linux/window-controls/maximize-themes.svg
--- firefox-60.0/browser/themes/linux/window-controls/maximize-themes.svg.1424422 2018-04-30 11:45:40.388172492 +0200
+++ firefox-60.0/browser/themes/linux/window-controls/maximize-themes.svg 2018-04-30 11:45:40.388172492 +0200
@@ -0,0 +1,7 @@
+<!-- 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/. -->
+<svg width="12" height="12" xmlns="http://www.w3.org/2000/svg" shape-rendering="crispEdges" fill="none">
+ <rect stroke="black" stroke-width="3.6" stroke-opacity=".75" x="2" y="2" width="8" height="8"/>
+ <rect stroke="white" stroke-width="1.9" x="2" y="2" width="8" height="8"/>
+</svg>
diff -up firefox-60.0/browser/themes/linux/window-controls/minimize-themes.svg.1424422 firefox-60.0/browser/themes/linux/window-controls/minimize-themes.svg
--- firefox-60.0/browser/themes/linux/window-controls/minimize-themes.svg.1424422 2018-04-30 11:45:40.388172492 +0200
+++ firefox-60.0/browser/themes/linux/window-controls/minimize-themes.svg 2018-04-30 11:45:40.388172492 +0200
@@ -0,0 +1,7 @@
+<!-- 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/. -->
+<svg width="12" height="12" xmlns="http://www.w3.org/2000/svg" shape-rendering="crispEdges">
+ <line stroke="black" stroke-width="3.6" stroke-opacity=".75" x1="0" y1="6" x2="12" y2="6"/>
+ <line stroke="white" stroke-width="1.9" x1="1" y1="6" x2="11" y2="6"/>
+</svg>
diff -up firefox-60.0/browser/themes/linux/window-controls/restore-themes.svg.1424422 firefox-60.0/browser/themes/linux/window-controls/restore-themes.svg
--- firefox-60.0/browser/themes/linux/window-controls/restore-themes.svg.1424422 2018-04-30 11:45:40.388172492 +0200
+++ firefox-60.0/browser/themes/linux/window-controls/restore-themes.svg 2018-04-30 11:45:40.388172492 +0200
@@ -0,0 +1,8 @@
+<!-- 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/. -->
+<svg width="12" height="12" xmlns="http://www.w3.org/2000/svg" shape-rendering="crispEdges" fill="none" stroke="white">
+ <path stroke="black" stroke-width="3.6" stroke-opacity=".75" d="M2,4 l 6,0 l 0,6 l -6,0z M2.5,1.5 l 8,0 l 0,8"/>
+ <rect stroke-width="1.9" x="2" y="4" width="6" height="6"/>
+ <polyline stroke-width=".9" points="3.5,1.5 10.5,1.5 10.5,8.5"/>
+</svg>