mirror of
https://github.com/brl/mutter.git
synced 2024-11-23 08:30:42 -05:00
21117bb7a9
A few of the tests connected to the paint signal but never disconnected it. Most of these handlers had a call to g_main_quit in them which meant that it could sometimes cause subsequent tests to exit after the first frame is painted. Most of the tests don't validate any of the results until after a couple of frames have been rendered so this ended up skipping out the test entirely. To workaround this the test setup function now disconnects all handlers for the paint signal on the default stage before the test is run.
64 lines
2.0 KiB
C
64 lines
2.0 KiB
C
#include <clutter/clutter.h>
|
|
|
|
#include "test-conform-common.h"
|
|
|
|
/**
|
|
* test_conform_simple_fixture_setup:
|
|
*
|
|
* Initialise stuff before each test is run
|
|
*/
|
|
void
|
|
test_conform_simple_fixture_setup (TestConformSimpleFixture *fixture,
|
|
gconstpointer data)
|
|
{
|
|
/* const TestConformSharedState *shared_state = data; */
|
|
ClutterActor *stage = clutter_stage_get_default ();
|
|
GList *actors = clutter_container_get_children (CLUTTER_CONTAINER (stage));
|
|
GList *tmp;
|
|
guint paint_handler;
|
|
guint paint_signal;
|
|
guint n_paint_handlers = 0;
|
|
|
|
/* To help reduce leakage between unit tests, we destroy all children of the stage */
|
|
for (tmp = actors; tmp != NULL; tmp = tmp->next)
|
|
{
|
|
ClutterActor *leaked_actor = tmp->data;
|
|
|
|
if (g_test_verbose ())
|
|
g_print ("Freeing leaked actor %p\n", leaked_actor);
|
|
clutter_actor_destroy (leaked_actor);
|
|
}
|
|
|
|
/* Some of the tests leave the paint signal connected to the default
|
|
stage which causes problems for subsequent tests. This forcibly
|
|
disconnects all paint handlers. We can't use
|
|
g_signal_handlers_disconnect_matched because for some reason that
|
|
doesn't let you pass just G_SIGNAL_MATCH_ID. */
|
|
paint_signal = g_signal_lookup ("paint", CLUTTER_TYPE_ACTOR);
|
|
while ((paint_handler = g_signal_handler_find (stage,
|
|
G_SIGNAL_MATCH_ID,
|
|
paint_signal,
|
|
0, NULL, NULL, NULL)))
|
|
{
|
|
g_signal_handler_disconnect (stage, paint_handler);
|
|
n_paint_handlers++;
|
|
}
|
|
if (g_test_verbose () && n_paint_handlers > 0)
|
|
g_print ("Disconnecting %i leaked paint handler%s\n",
|
|
n_paint_handlers, n_paint_handlers == 1 ? "" : "s");
|
|
}
|
|
|
|
|
|
/**
|
|
* test_conform_simple_fixture_teardown:
|
|
*
|
|
* Cleanup stuff after each test has finished
|
|
*/
|
|
void
|
|
test_conform_simple_fixture_teardown (TestConformSimpleFixture *fixture,
|
|
gconstpointer data)
|
|
{
|
|
/* const TestConformSharedState *shared_state = data; */
|
|
}
|
|
|