stage: Create the default stage on demand
Instead of creating the default stage during initialization we can now safely create it whenever clutter_stage_get_default() is called. To maintain the invariant, the default stage is immediately realized by Clutter itself.
This commit is contained in:
parent
d2c091e62d
commit
ede2cbfab0
@ -1492,7 +1492,6 @@ static ClutterInitError
|
|||||||
clutter_init_real (GError **error)
|
clutter_init_real (GError **error)
|
||||||
{
|
{
|
||||||
ClutterMainContext *ctx;
|
ClutterMainContext *ctx;
|
||||||
ClutterActor *stage;
|
|
||||||
ClutterBackend *backend;
|
ClutterBackend *backend;
|
||||||
|
|
||||||
/* Note, creates backend if not already existing, though parse args will
|
/* Note, creates backend if not already existing, though parse args will
|
||||||
@ -1558,33 +1557,6 @@ clutter_init_real (GError **error)
|
|||||||
/* Initiate event collection */
|
/* Initiate event collection */
|
||||||
_clutter_backend_init_events (ctx->backend);
|
_clutter_backend_init_events (ctx->backend);
|
||||||
|
|
||||||
/* Create the default stage and realize it */
|
|
||||||
stage = clutter_stage_get_default ();
|
|
||||||
if (!stage)
|
|
||||||
{
|
|
||||||
if (error)
|
|
||||||
g_set_error (error, CLUTTER_INIT_ERROR,
|
|
||||||
CLUTTER_INIT_ERROR_INTERNAL,
|
|
||||||
"Unable to create the default stage");
|
|
||||||
else
|
|
||||||
g_critical ("Unable to create the default stage");
|
|
||||||
|
|
||||||
return CLUTTER_INIT_ERROR_INTERNAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
clutter_actor_realize (stage);
|
|
||||||
if (!CLUTTER_ACTOR_IS_REALIZED (stage))
|
|
||||||
{
|
|
||||||
if (error)
|
|
||||||
g_set_error (error, CLUTTER_INIT_ERROR,
|
|
||||||
CLUTTER_INIT_ERROR_INTERNAL,
|
|
||||||
"Unable to realize the default stage");
|
|
||||||
else
|
|
||||||
g_critical ("Unable to realize the default stage");
|
|
||||||
|
|
||||||
return CLUTTER_INIT_ERROR_INTERNAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
clutter_is_initialized = TRUE;
|
clutter_is_initialized = TRUE;
|
||||||
ctx->is_initialized = TRUE;
|
ctx->is_initialized = TRUE;
|
||||||
|
|
||||||
|
@ -1215,12 +1215,17 @@ clutter_stage_get_default (void)
|
|||||||
|
|
||||||
stage = clutter_stage_manager_get_default_stage (stage_manager);
|
stage = clutter_stage_manager_get_default_stage (stage_manager);
|
||||||
if (G_UNLIKELY (stage == NULL))
|
if (G_UNLIKELY (stage == NULL))
|
||||||
|
{
|
||||||
/* This will take care of automatically adding the stage to the
|
/* This will take care of automatically adding the stage to the
|
||||||
* stage manager and setting it as the default. Its floating
|
* stage manager and setting it as the default. Its floating
|
||||||
* reference will be claimed by the stage manager.
|
* reference will be claimed by the stage manager.
|
||||||
*/
|
*/
|
||||||
stage = g_object_new (CLUTTER_TYPE_STAGE, NULL);
|
stage = g_object_new (CLUTTER_TYPE_STAGE, NULL);
|
||||||
|
|
||||||
|
/* the default stage is realized by default */
|
||||||
|
clutter_actor_realize (CLUTTER_ACTOR (stage));
|
||||||
|
}
|
||||||
|
|
||||||
return CLUTTER_ACTOR (stage);
|
return CLUTTER_ACTOR (stage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user