changeset: 521156:e856a981e2be tag: tip parent: 521144:5bfecf5aff6d user: Martin Stransky 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( - 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( - 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( + 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( + 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.