summaryrefslogtreecommitdiff
path: root/mozilla-1623106.patch
blob: 354d918ea10c343064a88dfa080e88323524629b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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