summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Ådahl <jadahl@gmail.com>2020-12-05 00:11:08 +0100
committerJonas Ådahl <jadahl@gmail.com>2020-12-07 20:37:29 +0100
commit3bbeb891c4cfbbeec86846633027350e87cbd1f7 (patch)
tree9ada4b71fba65853411429770e5793a0f2b8e0d8
parentff23a2a58238b1b69142754254c6159b08f7fa4b (diff)
downloadgtk+-3bbeb891c4cfbbeec86846633027350e87cbd1f7.tar.gz
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.
-rw-r--r--gdk/gdksurface.c5
-rw-r--r--gdk/gdksurfaceprivate.h2
-rw-r--r--gdk/wayland/gdksurface-wayland.c4
-rw-r--r--gdk/x11/gdksurface-x11.c4
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