diff options
Diffstat (limited to 'mozilla-1623106.patch')
-rw-r--r-- | mozilla-1623106.patch | 73 |
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. + |