[clutter] actor: Add ActorIter.is_valid()
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [clutter] actor: Add ActorIter.is_valid()
- Date: Wed, 27 Jun 2012 20:31:51 +0000 (UTC)
commit 1da42dd8a0407bc9929c36ec676827f8d0fb56c5
Author: Emmanuele Bassi <ebassi gnome org>
Date: Wed Jun 27 12:57:36 2012 +0100
actor: Add ActorIter.is_valid()
It can be useful to check whether a ClutterActorIter is currently valid,
i.e. if the iterator has been initialized *and* if the actor to which it
refers to hasn't been updated.
We can also use the is_valid() method in the conformance test suite to
check that initialization has been successful, and that changing the
children list through the ClutterActorIter API leaves the iterator in a
valid state.
clutter/clutter-actor.c | 27 +++++++++++++++++++++++++++
clutter/clutter-actor.h | 2 ++
clutter/clutter.symbols | 1 +
tests/conform/actor-iter.c | 18 ++++++++++++++----
4 files changed, 44 insertions(+), 4 deletions(-)
---
diff --git a/clutter/clutter-actor.c b/clutter/clutter-actor.c
index b0c874b..5728983 100644
--- a/clutter/clutter-actor.c
+++ b/clutter/clutter-actor.c
@@ -17194,6 +17194,33 @@ clutter_actor_iter_init (ClutterActorIter *iter,
}
/**
+ * clutter_actor_iter_is_valid:
+ * @iter: a #ClutterActorIter
+ *
+ * Checks whether a #ClutterActorIter is still valid.
+ *
+ * An iterator is considered valid if it has been initialized, and
+ * if the #ClutterActor that it refers to hasn't been modified after
+ * the initialization.
+ *
+ * Return value: %TRUE if the iterator is valid, and %FALSE otherwise
+ *
+ * Since: 1.12
+ */
+gboolean
+clutter_actor_iter_is_valid (const ClutterActorIter *iter)
+{
+ RealActorIter *ri = (RealActorIter *) iter;
+
+ g_return_val_if_fail (iter != NULL, FALSE);
+
+ if (ri->root == NULL)
+ return FALSE;
+
+ return ri->root->priv->age == ri->age;
+}
+
+/**
* clutter_actor_iter_next:
* @iter: a #ClutterActorIter
* @child: (out): return location for a #ClutterActor
diff --git a/clutter/clutter-actor.h b/clutter/clutter-actor.h
index ae95418..e98cd55 100644
--- a/clutter/clutter-actor.h
+++ b/clutter/clutter-actor.h
@@ -617,6 +617,8 @@ CLUTTER_AVAILABLE_IN_1_10
void clutter_actor_iter_remove (ClutterActorIter *iter);
CLUTTER_AVAILABLE_IN_1_10
void clutter_actor_iter_destroy (ClutterActorIter *iter);
+CLUTTER_AVAILABLE_IN_1_12
+gboolean clutter_actor_iter_is_valid (const ClutterActorIter *iter);
/* Transformations */
gboolean clutter_actor_is_rotated (ClutterActor *self);
diff --git a/clutter/clutter.symbols b/clutter/clutter.symbols
index fd32e82..39307e7 100644
--- a/clutter/clutter.symbols
+++ b/clutter/clutter.symbols
@@ -178,6 +178,7 @@ clutter_actor_is_rotated
clutter_actor_is_scaled
clutter_actor_iter_destroy
clutter_actor_iter_init
+clutter_actor_iter_is_valid
clutter_actor_iter_next
clutter_actor_iter_prev
clutter_actor_iter_remove
diff --git a/tests/conform/actor-iter.c b/tests/conform/actor-iter.c
index 5633e2f..4c55079 100644
--- a/tests/conform/actor-iter.c
+++ b/tests/conform/actor-iter.c
@@ -33,6 +33,8 @@ actor_iter_traverse_children (TestConformSimpleFixture *fixture G_GNUC_UNUSED,
i = 0;
clutter_actor_iter_init (&iter, actor);
+ g_assert (clutter_actor_iter_is_valid (&iter));
+
while (clutter_actor_iter_next (&iter, &child))
{
g_assert (CLUTTER_IS_ACTOR (child));
@@ -54,6 +56,8 @@ actor_iter_traverse_children (TestConformSimpleFixture *fixture G_GNUC_UNUSED,
i = 0;
clutter_actor_iter_init (&iter, actor);
+ g_assert (clutter_actor_iter_is_valid (&iter));
+
while (clutter_actor_iter_prev (&iter, &child))
{
g_assert (CLUTTER_IS_ACTOR (child));
@@ -105,6 +109,8 @@ actor_iter_traverse_remove (TestConformSimpleFixture *fixture G_GNUC_UNUSED,
i = 0;
clutter_actor_iter_init (&iter, actor);
+ g_assert (clutter_actor_iter_is_valid (&iter));
+
while (clutter_actor_iter_next (&iter, &child))
{
g_assert (CLUTTER_IS_ACTOR (child));
@@ -120,6 +126,7 @@ actor_iter_traverse_remove (TestConformSimpleFixture *fixture G_GNUC_UNUSED,
g_assert (child == clutter_actor_get_last_child (actor));
clutter_actor_iter_remove (&iter);
+ g_assert (clutter_actor_iter_is_valid (&iter));
i += 1;
}
@@ -163,6 +170,9 @@ actor_iter_assignment (TestConformSimpleFixture *fixure G_GNUC_UNUSED,
iter_b = iter_a;
+ g_assert (clutter_actor_iter_is_valid (&iter_a));
+ g_assert (clutter_actor_iter_is_valid (&iter_b));
+
while (clutter_actor_iter_next (&iter_a, &child))
{
g_assert (CLUTTER_IS_ACTOR (child));
@@ -182,7 +192,7 @@ actor_iter_assignment (TestConformSimpleFixture *fixure G_GNUC_UNUSED,
g_assert_cmpint (i, ==, n_actors);
- i = n_actors;
+ i = n_actors - 1;
while (clutter_actor_iter_prev (&iter_b, &child))
{
@@ -191,16 +201,16 @@ actor_iter_assignment (TestConformSimpleFixture *fixure G_GNUC_UNUSED,
if (g_test_verbose ())
g_print ("actor %2d = '%s'\n", i, clutter_actor_get_name (child));
- if (i == n_actors)
+ if (i == n_actors - 1)
g_assert (child == clutter_actor_get_last_child (actor));
- if (i == 1)
+ if (i == 0)
g_assert (child == clutter_actor_get_first_child (actor));
i -= 1;
}
- g_assert_cmpint (i, ==, 0);
+ g_assert_cmpint (i, ==, -1);
g_object_unref (actor);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]