[mutter] clutter/actor: Return the actor used when picking clock



commit 07e964e9fc8bb55c412ae1227d13aef2bf74de5e
Author: Jonas Ådahl <jadahl gmail com>
Date:   Wed Aug 12 18:08:35 2020 +0200

    clutter/actor: Return the actor used when picking clock
    
    The actor used might be relevant, so that e.g. if it moves or for some
    other reason changes stage views, the user can listen for that.
    
    https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1404

 clutter/clutter/clutter-actor.c        | 18 ++++++++++++++----
 clutter/clutter/clutter-mutter.h       |  3 ++-
 clutter/clutter/clutter-timeline.c     |  2 +-
 src/compositor/meta-window-actor-x11.c |  2 +-
 src/tests/stage-view-tests.c           |  6 +++---
 5 files changed, 21 insertions(+), 10 deletions(-)
---
diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c
index ab77fa37e7..ecdfaf7116 100644
--- a/clutter/clutter/clutter-actor.c
+++ b/clutter/clutter/clutter-actor.c
@@ -16356,13 +16356,17 @@ clutter_actor_is_effectively_on_stage_view (ClutterActor     *self,
 /**
  * clutter_actor_pick_frame_clock: (skip)
  * @self: a #ClutterActor
+ * @out_actor: (nullable): a pointer to an #ClutterActor
  *
  * Pick the most suitable frame clock for driving animations for this actor.
  *
+ * The #ClutterActor used for picking the frame clock is written @out_actor.
+ *
  * Returns: (transfer none): a #ClutterFrameClock
  */
 ClutterFrameClock *
-clutter_actor_pick_frame_clock (ClutterActor *self)
+clutter_actor_pick_frame_clock (ClutterActor  *self,
+                                ClutterActor **out_actor)
 {
   ClutterActorPrivate *priv = self->priv;
   float max_refresh_rate = 0.0;
@@ -16372,7 +16376,7 @@ clutter_actor_pick_frame_clock (ClutterActor *self)
   if (!priv->stage_views)
     {
      if (priv->parent)
-       return clutter_actor_pick_frame_clock (priv->parent);
+       return clutter_actor_pick_frame_clock (priv->parent, out_actor);
      else
        return NULL;
     }
@@ -16391,9 +16395,15 @@ clutter_actor_pick_frame_clock (ClutterActor *self)
     }
 
   if (best_view)
-    return clutter_stage_view_get_frame_clock (best_view);
+    {
+      if (out_actor)
+        *out_actor = self;
+      return clutter_stage_view_get_frame_clock (best_view);
+    }
   else
-    return NULL;
+    {
+      return NULL;
+    }
 }
 
 /**
diff --git a/clutter/clutter/clutter-mutter.h b/clutter/clutter/clutter-mutter.h
index 126aabf768..654c6dac0e 100644
--- a/clutter/clutter/clutter-mutter.h
+++ b/clutter/clutter/clutter-mutter.h
@@ -69,7 +69,8 @@ CLUTTER_EXPORT
 gboolean clutter_actor_has_transitions (ClutterActor *actor);
 
 CLUTTER_EXPORT
-ClutterFrameClock * clutter_actor_pick_frame_clock (ClutterActor *self);
+ClutterFrameClock * clutter_actor_pick_frame_clock (ClutterActor  *self,
+                                                    ClutterActor **out_actor);
 
 #undef __CLUTTER_H_INSIDE__
 
diff --git a/clutter/clutter/clutter-timeline.c b/clutter/clutter/clutter-timeline.c
index 6750072a1f..4a36da4352 100644
--- a/clutter/clutter/clutter-timeline.c
+++ b/clutter/clutter/clutter-timeline.c
@@ -393,7 +393,7 @@ update_frame_clock (ClutterTimeline *timeline)
   if (!priv->actor)
     goto out;
 
-  frame_clock = clutter_actor_pick_frame_clock (priv->actor);
+  frame_clock = clutter_actor_pick_frame_clock (priv->actor, NULL);
   if (frame_clock)
     {
       g_clear_signal_handler (&priv->stage_stage_views_handler_id, priv->stage);
diff --git a/src/compositor/meta-window-actor-x11.c b/src/compositor/meta-window-actor-x11.c
index 9ea907b3c0..a1b419bbe7 100644
--- a/src/compositor/meta-window-actor-x11.c
+++ b/src/compositor/meta-window-actor-x11.c
@@ -1237,7 +1237,7 @@ handle_stage_views_changed (MetaWindowActorX11 *actor_x11)
 {
   ClutterActor *actor = CLUTTER_ACTOR (actor_x11);
 
-  actor_x11->frame_clock = clutter_actor_pick_frame_clock (actor);
+  actor_x11->frame_clock = clutter_actor_pick_frame_clock (actor, NULL);
   if (actor_x11->frame_clock && actor_x11->pending_schedule_update_now)
     {
       clutter_frame_clock_schedule_update_now (actor_x11->frame_clock);
diff --git a/src/tests/stage-view-tests.c b/src/tests/stage-view-tests.c
index f298b8ba81..684319d41f 100644
--- a/src/tests/stage-view-tests.c
+++ b/src/tests/stage-view-tests.c
@@ -652,15 +652,15 @@ meta_test_actor_stage_views_frame_clock (void)
                      stage_views->data,
                      stage_views->next->data);
 
-  frame_clock = clutter_actor_pick_frame_clock (actor_1);
+  frame_clock = clutter_actor_pick_frame_clock (actor_1, NULL);
   g_assert_cmpfloat (clutter_frame_clock_get_refresh_rate (frame_clock),
                      ==,
                      60.0);
-  frame_clock = clutter_actor_pick_frame_clock (actor_2);
+  frame_clock = clutter_actor_pick_frame_clock (actor_2, NULL);
   g_assert_cmpfloat (clutter_frame_clock_get_refresh_rate (frame_clock),
                      ==,
                      30.0);
-  frame_clock = clutter_actor_pick_frame_clock (actor_3);
+  frame_clock = clutter_actor_pick_frame_clock (actor_3, NULL);
   g_assert_cmpfloat (clutter_frame_clock_get_refresh_rate (frame_clock),
                      ==,
                      60.0);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]