mirror of
https://github.com/brl/mutter.git
synced 2025-02-18 22:24:10 +00:00
clutter/pick-stack: Add an allocation check to calculate_clear_area ()
We might pick an actor that needs relayout. I've seen this happen inside hiding / unmapping in particular. In this case, calculate_clear_area () will call clutter_actor_get_abs_allocation_vertices () which in turn will force a relayout. However, this is not what we want, because: 1. We don't want to run layout during picking. 2. If the actor needs an allocation, then the pick stack could not have used an up-to-date allocation, because it is not computed. Therefore this clear area would use a potentially completely different allocation than the one stored in the pick stack. Thankfully, clear area seems to be used as a cache/optimization, so let's just avoid computing it if the actor is not allocated. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3425>
This commit is contained in:
parent
adc5489ba7
commit
edbc9a2086
@ -462,6 +462,13 @@ calculate_clear_area (ClutterPickStack *pick_stack,
|
|||||||
MtkRectangle rect;
|
MtkRectangle rect;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (!clutter_actor_has_allocation (pick_rec->actor))
|
||||||
|
{
|
||||||
|
if (clear_area)
|
||||||
|
*clear_area = NULL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
clutter_actor_get_abs_allocation_vertices (pick_rec->actor,
|
clutter_actor_get_abs_allocation_vertices (pick_rec->actor,
|
||||||
(graphene_point3d_t *) &verts);
|
(graphene_point3d_t *) &verts);
|
||||||
if (!get_verts_rectangle (verts, &rect))
|
if (!get_verts_rectangle (verts, &rect))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user