diff --git a/src/wayland/meta-wayland-surface-private.h b/src/wayland/meta-wayland-surface-private.h index fb5f88eed..b1c5ac00f 100644 --- a/src/wayland/meta-wayland-surface-private.h +++ b/src/wayland/meta-wayland-surface-private.h @@ -200,6 +200,7 @@ struct _MetaWaylandSurface GNode *subsurface_leaf_node; MetaMultiTexture *texture; int scale; + gboolean is_valid; } applied_state, committed_state; /* Extension resources. */ @@ -433,6 +434,8 @@ meta_wayland_surface_state_new (void) } gboolean meta_wayland_surface_is_xwayland (MetaWaylandSurface *surface); +gboolean meta_wayland_surface_has_initial_commit (MetaWaylandSurface *surface); + static inline GNode * meta_get_next_subsurface_sibling (GNode *n) { diff --git a/src/wayland/meta-wayland-surface.c b/src/wayland/meta-wayland-surface.c index d45fc00a8..dfa54e3fd 100644 --- a/src/wayland/meta-wayland-surface.c +++ b/src/wayland/meta-wayland-surface.c @@ -762,6 +762,8 @@ meta_wayland_surface_apply_state (MetaWaylandSurface *surface, g_signal_emit (surface, surface_signals[SURFACE_PRE_STATE_APPLIED], 0); + surface->applied_state.is_valid = surface->committed_state.is_valid; + if (surface->role) { meta_wayland_surface_role_pre_apply_state (surface->role, state); @@ -971,6 +973,8 @@ meta_wayland_surface_commit (MetaWaylandSurface *surface) COGL_TRACE_BEGIN_SCOPED (MetaWaylandSurfaceCommit, "Meta::WaylandSurface::commit()"); + surface->committed_state.is_valid = TRUE; + if (pending->scale > 0) surface->committed_state.scale = pending->scale; @@ -2657,3 +2661,9 @@ meta_wayland_surface_get_main_monitor (MetaWaylandSurface *surface) { return surface->main_monitor; } + +gboolean +meta_wayland_surface_has_initial_commit (MetaWaylandSurface *surface) +{ + return surface->committed_state.is_valid; +}