summaryrefslogtreecommitdiff
path: root/mozilla-1623106.patch
diff options
context:
space:
mode:
Diffstat (limited to 'mozilla-1623106.patch')
-rw-r--r--mozilla-1623106.patch73
1 files changed, 73 insertions, 0 deletions
diff --git a/mozilla-1623106.patch b/mozilla-1623106.patch
new file mode 100644
index 0000000..354d918
--- /dev/null
+++ b/mozilla-1623106.patch
@@ -0,0 +1,73 @@
+changeset: 521156:e856a981e2be
+tag: tip
+parent: 521144:5bfecf5aff6d
+user: Martin Stransky <stransky@redhat.com>
+date: Tue Mar 17 21:22:44 2020 +0100
+files: widget/gtk/nsWindow.cpp
+description:
+Bug 1623106 [Linux/Gtk] Don't use window resize workaround for Gtk >= 3.24, r?jhorak
+
+We have a workaround for https://gitlab.gnome.org/GNOME/gtk/issues/1044 which is already fixed
+in Gtk 3.24 and causes resize regression there so let's remove it.
+
+Differential Revision: https://phabricator.services.mozilla.com/D67387
+
+
+diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
+--- a/widget/gtk/nsWindow.cpp
++++ b/widget/gtk/nsWindow.cpp
+@@ -2739,16 +2739,18 @@ void nsWindow::OnContainerUnrealize() {
+ }
+ }
+
+ void nsWindow::OnSizeAllocate(GtkAllocation* aAllocation) {
+ LOG(("nsWindow::OnSizeAllocate [%p] %d,%d -> %d x %d\n", (void*)this,
+ aAllocation->x, aAllocation->y, aAllocation->width,
+ aAllocation->height));
+
++ mBoundsAreValid = true;
++
+ LayoutDeviceIntSize size = GdkRectToDevicePixels(*aAllocation).Size();
+ if (mBounds.Size() == size) {
+ // We were already resized at nsWindow::OnConfigureEvent() so skip it.
+ return;
+ }
+
+ // Invalidate the new part of the window now for the pending paint to
+ // minimize background flashes (GDK does not do this for external resizes
+@@ -3524,23 +3526,27 @@ void nsWindow::OnWindowStateEvent(GtkWid
+ // maximized state, we hide the GDK_WINDOW_STATE_MAXIMIZED change from
+ // gtk_window_state_event() so as to trick GTK into using the values from
+ // gtk_window_resize() in its configure request.
+ //
+ // We instead notify gtk_window_state_event() of the maximized state change
+ // once the window is shown.
+ //
+ // See https://gitlab.gnome.org/GNOME/gtk/issues/1044
+- if (!mIsShown) {
+- aEvent->changed_mask = static_cast<GdkWindowState>(
+- aEvent->changed_mask & ~GDK_WINDOW_STATE_MAXIMIZED);
+- } else if (aEvent->changed_mask & GDK_WINDOW_STATE_WITHDRAWN &&
+- aEvent->new_window_state & GDK_WINDOW_STATE_MAXIMIZED) {
+- aEvent->changed_mask = static_cast<GdkWindowState>(
+- aEvent->changed_mask | GDK_WINDOW_STATE_MAXIMIZED);
++ //
++ // This is fixed in Gtk 3.24+
++ if (gtk_check_version(3, 24, 0) != nullptr) {
++ if (!mIsShown) {
++ aEvent->changed_mask = static_cast<GdkWindowState>(
++ aEvent->changed_mask & ~GDK_WINDOW_STATE_MAXIMIZED);
++ } else if (aEvent->changed_mask & GDK_WINDOW_STATE_WITHDRAWN &&
++ aEvent->new_window_state & GDK_WINDOW_STATE_MAXIMIZED) {
++ aEvent->changed_mask = static_cast<GdkWindowState>(
++ aEvent->changed_mask | GDK_WINDOW_STATE_MAXIMIZED);
++ }
+ }
+
+ // This is a workaround for https://gitlab.gnome.org/GNOME/gtk/issues/1395
+ // Gtk+ controls window active appearance by window-state-event signal.
+ if (mDrawInTitlebar && (aEvent->changed_mask & GDK_WINDOW_STATE_FOCUSED)) {
+ // Emulate what Gtk+ does at gtk_window_state_event().
+ // We can't check GTK_STATE_FLAG_BACKDROP directly as it's set by Gtk+
+ // *after* this window-state-event handler.
+
bgstack15