summaryrefslogtreecommitdiff
path: root/src/tests/clutter/conform/actor-clone.c
blob: 582ddbbf3001d2a0c02373c119d4ecb0b3abd58c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <stdlib.h>
#include <string.h>

#include <clutter/clutter.h>

#include "tests/clutter-test-utils.h"

static void
on_presented (ClutterStage     *stage,
              ClutterStageView *view,
              ClutterFrameInfo *frame_info,
              gboolean         *was_presented)
{
  *was_presented = TRUE;
}

static void
actor_clone_unmapped (void)
{
  ClutterActor *container;
  ClutterActor *actor;
  ClutterActor *clone;
  ClutterActor *stage;
  gboolean was_presented;

  stage = clutter_test_get_stage ();

  container = clutter_actor_new ();
  g_object_ref_sink (container);
  g_object_add_weak_pointer (G_OBJECT (container), (gpointer *) &container);

  actor = clutter_actor_new ();
  g_object_ref_sink (actor);
  g_object_add_weak_pointer (G_OBJECT (actor), (gpointer *) &actor);

  clone = clutter_clone_new (actor);
  g_object_ref_sink (clone);
  g_object_add_weak_pointer (G_OBJECT (clone), (gpointer *) &clone);

  clutter_actor_hide (container);
  clutter_actor_hide (actor);

  clutter_actor_add_child (stage, container);
  clutter_actor_add_child (container, actor);
  clutter_actor_add_child (stage, clone);

  clutter_actor_set_offscreen_redirect (actor, CLUTTER_OFFSCREEN_REDIRECT_ALWAYS);

  g_signal_connect (stage, "presented", G_CALLBACK (on_presented),
                    &was_presented);

  clutter_actor_show (stage);

  was_presented = FALSE;
  while (!was_presented)
    g_main_context_iteration (NULL, FALSE);

  clutter_actor_destroy (clone);
  clutter_actor_destroy (actor);
  clutter_actor_destroy (container);
  g_assert_null (clone);
  g_assert_null (actor);
  g_assert_null (container);
}

CLUTTER_TEST_SUITE (
  CLUTTER_TEST_UNIT ("/actor/clone/unmapped", actor_clone_unmapped)
)