diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c index 99b42cfe9..5c6f06b9d 100644 --- a/clutter/clutter/clutter-actor.c +++ b/clutter/clutter/clutter-actor.c @@ -1004,6 +1004,8 @@ static void push_in_paint_unmapped_branch (ClutterActor *self, static void pop_in_paint_unmapped_branch (ClutterActor *self, guint count); +static void clutter_actor_update_pointer (ClutterActor *self); + static GQuark quark_actor_layout_info = 0; static GQuark quark_actor_transform_info = 0; static GQuark quark_actor_animation_info = 0; @@ -2449,6 +2451,13 @@ transform_changed (ClutterActor *actor) NULL); } +static void +update_pointer_if_not_animated (ClutterActor *actor) +{ + if (!clutter_actor_has_transitions (actor)) + clutter_actor_update_pointer (actor); +} + /*< private > * clutter_actor_set_allocation_internal: * @self: a #ClutterActor @@ -4279,6 +4288,7 @@ clutter_actor_set_pivot_point_internal (ClutterActor *self, info->pivot = *pivot; transform_changed (self); + update_pointer_if_not_animated (self); g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_PIVOT_POINT]); @@ -4295,6 +4305,7 @@ clutter_actor_set_pivot_point_z_internal (ClutterActor *self, info->pivot_z = pivot_z; transform_changed (self); + update_pointer_if_not_animated (self); g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_PIVOT_POINT_Z]); @@ -4329,6 +4340,7 @@ clutter_actor_set_translation_internal (ClutterActor *self, g_assert_not_reached (); transform_changed (self); + update_pointer_if_not_animated (self); clutter_actor_queue_redraw (self); g_object_notify_by_pspec (obj, pspec); @@ -4458,6 +4470,7 @@ clutter_actor_set_rotation_angle_internal (ClutterActor *self, g_assert_not_reached (); transform_changed (self); + update_pointer_if_not_animated (self); clutter_actor_queue_redraw (self); @@ -4579,6 +4592,7 @@ clutter_actor_set_scale_factor_internal (ClutterActor *self, g_assert_not_reached (); transform_changed (self); + update_pointer_if_not_animated (self); clutter_actor_queue_redraw (self); g_object_notify_by_pspec (obj, pspec); @@ -10361,6 +10375,7 @@ clutter_actor_set_z_position_internal (ClutterActor *self, info->z_position = z_position; transform_changed (self); + update_pointer_if_not_animated (self); clutter_actor_queue_redraw (self); @@ -13798,6 +13813,7 @@ clutter_actor_set_transform_internal (ClutterActor *self, info->transform_set = !graphene_matrix_is_identity (&info->transform); transform_changed (self); + update_pointer_if_not_animated (self); clutter_actor_queue_redraw (self); @@ -18942,6 +18958,7 @@ clutter_actor_invalidate_transform (ClutterActor *self) g_return_if_fail (CLUTTER_IS_ACTOR (self)); transform_changed (self); + update_pointer_if_not_animated (self); } /** @@ -19069,8 +19086,12 @@ clutter_actor_notify_transform_invalid (ClutterActor *self) transform_changed (self); ensure_valid_actor_transform (self); + g_assert (priv->transform_valid); if (!graphene_matrix_equal (&old_transform, &priv->transform)) - clutter_actor_queue_redraw (self); + { + update_pointer_if_not_animated (self); + clutter_actor_queue_redraw (self); + } }