[gtk: 67/88] gdk/surface: Allow inhibit layout from backend




commit 3bbeb891c4cfbbeec86846633027350e87cbd1f7
Author: Jonas Ã…dahl <jadahl gmail com>
Date:   Sat Dec 5 00:11:08 2020 +0100

    gdk/surface: Allow inhibit layout from backend
    
    If compute_size() returns TRUE, the layout will not be propagated to
    GTK. This will be used by the X11 backend to queue asynchronous resizes
    that shouldn't yet allocate in GTK.

 gdk/gdksurface.c                 | 5 ++++-
 gdk/gdksurfaceprivate.h          | 2 +-
 gdk/wayland/gdksurface-wayland.c | 4 +++-
 gdk/x11/gdksurface-x11.c         | 4 +++-
 4 files changed, 11 insertions(+), 4 deletions(-)
---
diff --git a/gdk/gdksurface.c b/gdk/gdksurface.c
index fd2d0772e8..27b775982c 100644
--- a/gdk/gdksurface.c
+++ b/gdk/gdksurface.c
@@ -1340,7 +1340,10 @@ gdk_surface_layout_on_clock (GdkFrameClock *clock,
 
   class = GDK_SURFACE_GET_CLASS (surface);
   if (class->compute_size)
-    class->compute_size (surface);
+    {
+      if (class->compute_size (surface))
+        return;
+    }
 
   g_signal_emit (surface, signals[LAYOUT], 0, surface->width, surface->height);
 }
diff --git a/gdk/gdksurfaceprivate.h b/gdk/gdksurfaceprivate.h
index 4fb40a376b..4c879fc2cb 100644
--- a/gdk/gdksurfaceprivate.h
+++ b/gdk/gdksurfaceprivate.h
@@ -162,7 +162,7 @@ struct _GdkSurfaceClass
                                            GdkGLContext   *share,
                                            GError        **error);
   void         (* request_layout)         (GdkSurface     *surface);
-  void         (* compute_size)           (GdkSurface     *surface);
+  gboolean     (* compute_size)           (GdkSurface     *surface);
 };
 
 #define GDK_SURFACE_DESTROYED(d) (((GdkSurface *)(d))->destroyed)
diff --git a/gdk/wayland/gdksurface-wayland.c b/gdk/wayland/gdksurface-wayland.c
index 6ad40c39cd..c152acf3e5 100644
--- a/gdk/wayland/gdksurface-wayland.c
+++ b/gdk/wayland/gdksurface-wayland.c
@@ -639,7 +639,7 @@ configure_drag_surface_geometry (GdkSurface *surface)
                               impl->scale);
 }
 
-static void
+static gboolean
 gdk_wayland_surface_compute_size (GdkSurface *surface)
 {
   GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (surface);
@@ -655,6 +655,8 @@ gdk_wayland_surface_compute_size (GdkSurface *surface)
 
       impl->next_layout.surface_geometry_dirty = FALSE;
     }
+
+  return FALSE;
 }
 
 static void
diff --git a/gdk/x11/gdksurface-x11.c b/gdk/x11/gdksurface-x11.c
index a4b6e5f6ce..5e0fc557d8 100644
--- a/gdk/x11/gdksurface-x11.c
+++ b/gdk/x11/gdksurface-x11.c
@@ -295,7 +295,7 @@ gdk_x11_surface_request_layout (GdkSurface *surface)
     }
 }
 
-static void
+static gboolean
 gdk_x11_surface_compute_size (GdkSurface *surface)
 {
   GdkX11Surface *impl = GDK_X11_SURFACE (surface);
@@ -352,6 +352,8 @@ gdk_x11_surface_compute_size (GdkSurface *surface)
 
       impl->next_layout.surface_geometry_dirty = FALSE;
     }
+
+  return surface->resize_count > 0;
 }
 
 gboolean


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]