st/viewport: Don't trigger relayout when picking

Calling clutter_actor_get_allocation_box() might still implicitly
trigger a full relayout, which has many side effects not expected to
occur during picking. Avoid a particular case which caused a reentry
issue by using the current allocation instead of forcing a relayout when
picking in StViewport.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1436
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1527>
This commit is contained in:
Jonas Ådahl 2020-12-09 19:02:55 +01:00
parent d263f5731c
commit 4e57119f40

View File

@ -431,7 +431,7 @@ st_viewport_pick (ClutterActor *actor,
StViewportPrivate *priv = st_viewport_get_instance_private (viewport);
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (actor));
double x, y;
ClutterActorBox allocation_box;
g_autoptr (ClutterActorBox) allocation_box = NULL;
ClutterActorBox content_box;
ClutterActor *child;
@ -440,8 +440,8 @@ st_viewport_pick (ClutterActor *actor,
if (clutter_actor_get_n_children (actor) == 0)
return;
clutter_actor_get_allocation_box (actor, &allocation_box);
st_theme_node_get_content_box (theme_node, &allocation_box, &content_box);
g_object_get (actor, "allocation", &allocation_box, NULL);
st_theme_node_get_content_box (theme_node, allocation_box, &content_box);
get_border_paint_offsets (viewport, &x, &y);