clutter/actor: Make actors have a context

The context can be set via a property (currently unused) or via the
current global singleton as a fallback. It means API that acts on an
actor can avoid going via any globals.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
This commit is contained in:
Jonas Ådahl 2023-11-06 15:03:40 +08:00 committed by Sebastian Wick
parent 2e02078638
commit 42d4287f20
2 changed files with 44 additions and 0 deletions

View File

@ -543,6 +543,8 @@ typedef enum
struct _ClutterActorPrivate
{
ClutterContext *context;
/* request mode */
ClutterRequestMode request_mode;
@ -736,6 +738,8 @@ enum
{
PROP_0,
PROP_CONTEXT,
PROP_NAME,
/* X, Y, WIDTH, HEIGHT are "do what I mean" properties;
@ -4515,6 +4519,10 @@ clutter_actor_set_property (GObject *object,
switch (prop_id)
{
case PROP_CONTEXT:
priv->context = g_value_get_object (value);
break;
case PROP_X:
clutter_actor_set_x (actor, g_value_get_float (value));
break;
@ -4812,6 +4820,10 @@ clutter_actor_get_property (GObject *object,
switch (prop_id)
{
case PROP_CONTEXT:
g_value_set_object (value, priv->context);
break;
case PROP_X:
g_value_set_float (value, clutter_actor_get_x (actor));
break;
@ -5546,6 +5558,9 @@ clutter_actor_constructor (GType gtype,
clutter_actor_set_layout_manager (self, default_layout);
}
if (!self->priv->context)
self->priv->context = _clutter_context_get_default ();
return retval;
}
@ -5597,6 +5612,19 @@ clutter_actor_class_init (ClutterActorClass *klass)
klass->layout_manager_type = G_TYPE_INVALID;
/**
* ClutterActor:context:
*
* The %ClutterContext of the actor
*/
obj_props[PROP_CONTEXT] =
g_param_spec_object ("context", NULL, NULL,
CLUTTER_TYPE_CONTEXT,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_EXPLICIT_NOTIFY);
/**
* ClutterActor:x:
*
@ -12458,6 +12486,18 @@ clutter_actor_is_scaled (ClutterActor *self)
return FALSE;
}
/**
* clutter_actor_get_context:
* @actor: a #ClutterActor
*
* Returns: (transfer none): the Clutter context
*/
ClutterContext *
clutter_actor_get_context (ClutterActor *actor)
{
return actor->priv->context;
}
ClutterActor *
_clutter_actor_get_stage_internal (ClutterActor *actor)
{

View File

@ -663,6 +663,10 @@ gboolean clutter_actor_contains
ClutterActor *descendant);
CLUTTER_EXPORT
ClutterActor* clutter_actor_get_stage (ClutterActor *actor);
CLUTTER_EXPORT
ClutterContext * clutter_actor_get_context (ClutterActor *actor);
CLUTTER_EXPORT
void clutter_actor_set_child_below_sibling (ClutterActor *self,
ClutterActor *child,