wayland/surface: Keep applied sub-surface branch node linked up
Until this surface or its parent is finalized. This makes sure that any `MetaWaylandSubsurfacePlacementOp` referencing this surface for sibling will be applied as intended. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3737>
This commit is contained in:
parent
5749810ddb
commit
be4bf8da9c
@ -701,8 +701,6 @@ meta_wayland_surface_apply_placement_ops (MetaWaylandSurface *parent,
|
|||||||
MetaWaylandSurface *surface = op->surface;
|
MetaWaylandSurface *surface = op->surface;
|
||||||
GNode *sibling_node;
|
GNode *sibling_node;
|
||||||
|
|
||||||
g_node_unlink (surface->applied_state.subsurface_branch_node);
|
|
||||||
|
|
||||||
if (!op->sibling)
|
if (!op->sibling)
|
||||||
{
|
{
|
||||||
surface->applied_state.parent = NULL;
|
surface->applied_state.parent = NULL;
|
||||||
@ -711,6 +709,8 @@ meta_wayland_surface_apply_placement_ops (MetaWaylandSurface *parent,
|
|||||||
|
|
||||||
surface->applied_state.parent = parent;
|
surface->applied_state.parent = parent;
|
||||||
|
|
||||||
|
g_node_unlink (surface->applied_state.subsurface_branch_node);
|
||||||
|
|
||||||
if (op->sibling == parent)
|
if (op->sibling == parent)
|
||||||
sibling_node = parent->applied_state.subsurface_leaf_node;
|
sibling_node = parent->applied_state.subsurface_leaf_node;
|
||||||
else
|
else
|
||||||
@ -1520,6 +1520,7 @@ meta_wayland_surface_finalize (GObject *object)
|
|||||||
{
|
{
|
||||||
MetaWaylandSurface *surface = META_WAYLAND_SURFACE (object);
|
MetaWaylandSurface *surface = META_WAYLAND_SURFACE (object);
|
||||||
MetaWaylandCompositor *compositor = surface->compositor;
|
MetaWaylandCompositor *compositor = surface->compositor;
|
||||||
|
MetaWaylandSurface *subsurface_surface;
|
||||||
MetaWaylandFrameCallback *cb, *next;
|
MetaWaylandFrameCallback *cb, *next;
|
||||||
|
|
||||||
g_clear_object (&surface->scanout_candidate);
|
g_clear_object (&surface->scanout_candidate);
|
||||||
@ -1555,6 +1556,10 @@ meta_wayland_surface_finalize (GObject *object)
|
|||||||
|
|
||||||
meta_wayland_surface_discard_presentation_feedback (surface);
|
meta_wayland_surface_discard_presentation_feedback (surface);
|
||||||
|
|
||||||
|
META_WAYLAND_SURFACE_FOREACH_SUBSURFACE (&surface->applied_state,
|
||||||
|
subsurface_surface)
|
||||||
|
g_node_unlink (subsurface_surface->applied_state.subsurface_branch_node);
|
||||||
|
|
||||||
g_clear_pointer (&surface->applied_state.subsurface_branch_node, g_node_destroy);
|
g_clear_pointer (&surface->applied_state.subsurface_branch_node, g_node_destroy);
|
||||||
|
|
||||||
g_hash_table_destroy (surface->shortcut_inhibited_seats);
|
g_hash_table_destroy (surface->shortcut_inhibited_seats);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user