74 lines
3.1 KiB
Diff
74 lines
3.1 KiB
Diff
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.
|
|
|