[mutter] clutter: Use G_PARAM_EXPLICIT_NOTIFY for actor and stage properties



commit 3a8b714e722b9b8aad750c4ff51b75e3ef93c2d3
Author: Jonas Dreßler <verdre v0yd nl>
Date:   Sat Dec 19 17:08:27 2020 +0100

    clutter: Use G_PARAM_EXPLICIT_NOTIFY for actor and stage properties
    
    Turns out GObject implicitly notifies all properties by default as soon
    as a property setter is called, no matter if the property actually
    changed or not. One can opt-out of this behavior by setting the
    G_PARAM_EXPLICIT_NOTIFY flag.
    
    So since almost all our properties get notified explicitely (well,
    except ClutterActors deprecated show-on-set-parent property), set this
    flag for all properties of ClutterActor and ClutterStage now. This
    significantly reduces the number of notify:: signals emitted on
    ClutterActors, because in gnome-shell javascript we usually set GObject
    properties directly, not by going through the extra setter method.
    
    More cleanups can be done in the future, since this flag is suitable for
    almost every property in Clutter and even Mutter.
    
    This fixes a crash where we'd hit a newly introduced assertion in
    on_device_actor_reactive_changed() of ClutterStage because
    notify::reactive got emitted multiple times.
    
    Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1651>

 clutter/clutter/clutter-actor.c | 147 +++++++++++++++++++++++++++++-----------
 clutter/clutter/clutter-stage.c |   9 ++-
 2 files changed, 113 insertions(+), 43 deletions(-)
---
diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c
index 91d0061c3f..1f08a06bc2 100644
--- a/clutter/clutter/clutter-actor.c
+++ b/clutter/clutter/clutter-actor.c
@@ -5959,6 +5959,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         0.0,
                         G_PARAM_READWRITE |
                         G_PARAM_STATIC_STRINGS |
+                        G_PARAM_EXPLICIT_NOTIFY |
                         CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -5978,6 +5979,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         0.0,
                         G_PARAM_READWRITE |
                         G_PARAM_STATIC_STRINGS |
+                        G_PARAM_EXPLICIT_NOTIFY |
                         CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -6000,6 +6002,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         GRAPHENE_TYPE_POINT,
                         G_PARAM_READWRITE |
                         G_PARAM_STATIC_STRINGS |
+                        G_PARAM_EXPLICIT_NOTIFY |
                         CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -6019,6 +6022,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         0.0,
                         G_PARAM_READWRITE |
                         G_PARAM_STATIC_STRINGS |
+                        G_PARAM_EXPLICIT_NOTIFY |
                         CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -6038,6 +6042,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         0.0,
                         G_PARAM_READWRITE |
                         G_PARAM_STATIC_STRINGS |
+                        G_PARAM_EXPLICIT_NOTIFY |
                         CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -6059,6 +6064,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         GRAPHENE_TYPE_SIZE,
                         G_PARAM_READWRITE |
                         G_PARAM_STATIC_STRINGS |
+                        G_PARAM_EXPLICIT_NOTIFY |
                         CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -6077,7 +6083,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         P_("Forced X position of the actor"),
                         -G_MAXFLOAT, G_MAXFLOAT,
                         0.0,
-                        CLUTTER_PARAM_READWRITE);
+                        CLUTTER_PARAM_READWRITE |
+                        G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:fixed-y:
@@ -6095,7 +6102,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         P_("Forced Y position of the actor"),
                         -G_MAXFLOAT, G_MAXFLOAT,
                         0,
-                        CLUTTER_PARAM_READWRITE);
+                        CLUTTER_PARAM_READWRITE |
+                        G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:fixed-position-set:
@@ -6110,7 +6118,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                           P_("Fixed position set"),
                           P_("Whether to use fixed positioning for the actor"),
                           FALSE,
-                          CLUTTER_PARAM_READWRITE);
+                          CLUTTER_PARAM_READWRITE |
+                          G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:min-width:
@@ -6130,7 +6139,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         P_("Forced minimum width request for the actor"),
                         0.0, G_MAXFLOAT,
                         0.0,
-                        CLUTTER_PARAM_READWRITE);
+                        CLUTTER_PARAM_READWRITE |
+                        G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:min-height:
@@ -6149,7 +6159,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         P_("Forced minimum height request for the actor"),
                         0.0, G_MAXFLOAT,
                         0.0,
-                        CLUTTER_PARAM_READWRITE);
+                        CLUTTER_PARAM_READWRITE |
+                        G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:natural-width:
@@ -6168,7 +6179,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         P_("Forced natural width request for the actor"),
                         0.0, G_MAXFLOAT,
                         0.0,
-                        CLUTTER_PARAM_READWRITE);
+                        CLUTTER_PARAM_READWRITE |
+                        G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:natural-height:
@@ -6187,7 +6199,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         P_("Forced natural height request for the actor"),
                         0.0, G_MAXFLOAT,
                         0.0,
-                        CLUTTER_PARAM_READWRITE);
+                        CLUTTER_PARAM_READWRITE |
+                        G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:min-width-set:
@@ -6202,7 +6215,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                           P_("Minimum width set"),
                           P_("Whether to use the min-width property"),
                           FALSE,
-                          CLUTTER_PARAM_READWRITE);
+                          CLUTTER_PARAM_READWRITE |
+                          G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:min-height-set:
@@ -6217,7 +6231,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                           P_("Minimum height set"),
                           P_("Whether to use the min-height property"),
                           FALSE,
-                          CLUTTER_PARAM_READWRITE);
+                          CLUTTER_PARAM_READWRITE |
+                          G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:natural-width-set:
@@ -6232,7 +6247,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                           P_("Natural width set"),
                           P_("Whether to use the natural-width property"),
                           FALSE,
-                          CLUTTER_PARAM_READWRITE);
+                          CLUTTER_PARAM_READWRITE |
+                          G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:natural-height-set:
@@ -6247,7 +6263,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                           P_("Natural height set"),
                           P_("Whether to use the natural-height property"),
                           FALSE,
-                          CLUTTER_PARAM_READWRITE);
+                          CLUTTER_PARAM_READWRITE |
+                          G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:allocation:
@@ -6266,6 +6283,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         CLUTTER_TYPE_ACTOR_BOX,
                         G_PARAM_READABLE |
                         G_PARAM_STATIC_STRINGS |
+                        G_PARAM_EXPLICIT_NOTIFY |
                         CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -6333,7 +6351,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                        P_("The actor's request mode"),
                        CLUTTER_TYPE_REQUEST_MODE,
                        CLUTTER_REQUEST_HEIGHT_FOR_WIDTH,
-                       CLUTTER_PARAM_READWRITE);
+                       CLUTTER_PARAM_READWRITE |
+                       G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:z-position:
@@ -6360,6 +6379,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         0.0f,
                         G_PARAM_READWRITE |
                         G_PARAM_STATIC_STRINGS |
+                        G_PARAM_EXPLICIT_NOTIFY |
                         CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -6378,6 +6398,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                        255,
                        G_PARAM_READWRITE |
                        G_PARAM_STATIC_STRINGS |
+                       G_PARAM_EXPLICIT_NOTIFY |
                        CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -6411,7 +6432,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                           P_("Visible"),
                           P_("Whether the actor is visible or not"),
                           FALSE,
-                          CLUTTER_PARAM_READWRITE);
+                          CLUTTER_PARAM_READWRITE |
+                          G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:mapped:
@@ -6426,7 +6448,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                           P_("Mapped"),
                           P_("Whether the actor will be painted"),
                           FALSE,
-                          CLUTTER_PARAM_READABLE);
+                          CLUTTER_PARAM_READABLE |
+                          G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:realized:
@@ -6440,7 +6463,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                           P_("Realized"),
                           P_("Whether the actor has been realized"),
                           FALSE,
-                          CLUTTER_PARAM_READABLE);
+                          CLUTTER_PARAM_READABLE |
+                          G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:reactive:
@@ -6456,7 +6480,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                           P_("Reactive"),
                           P_("Whether the actor is reactive to events"),
                           FALSE,
-                          CLUTTER_PARAM_READWRITE);
+                          CLUTTER_PARAM_READWRITE |
+                          G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:has-clip:
@@ -6468,7 +6493,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                           P_("Has Clip"),
                           P_("Whether the actor has a clip set"),
                           FALSE,
-                          CLUTTER_PARAM_READABLE);
+                          CLUTTER_PARAM_READABLE |
+                          G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:clip-rect:
@@ -6489,7 +6515,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         P_("The visible region of the actor"),
                         GRAPHENE_TYPE_RECT,
                         G_PARAM_READWRITE |
-                        G_PARAM_STATIC_STRINGS);
+                        G_PARAM_STATIC_STRINGS |
+                        G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:name:
@@ -6503,7 +6530,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                          P_("Name"),
                          P_("Name of the actor"),
                          NULL,
-                         CLUTTER_PARAM_READWRITE);
+                         CLUTTER_PARAM_READWRITE |
+                         G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:pivot-point:
@@ -6527,6 +6555,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         GRAPHENE_TYPE_POINT,
                         G_PARAM_READWRITE |
                         G_PARAM_STATIC_STRINGS |
+                        G_PARAM_EXPLICIT_NOTIFY |
                         CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -6547,6 +6576,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         0.f,
                         G_PARAM_READWRITE |
                         G_PARAM_STATIC_STRINGS |
+                        G_PARAM_EXPLICIT_NOTIFY |
                         CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -6566,6 +6596,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                          1.0,
                          G_PARAM_READWRITE |
                          G_PARAM_STATIC_STRINGS |
+                         G_PARAM_EXPLICIT_NOTIFY |
                          CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -6585,6 +6616,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                          1.0,
                          G_PARAM_READWRITE |
                          G_PARAM_STATIC_STRINGS |
+                         G_PARAM_EXPLICIT_NOTIFY |
                          CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -6604,6 +6636,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                          1.0,
                          G_PARAM_READWRITE |
                          G_PARAM_STATIC_STRINGS |
+                         G_PARAM_EXPLICIT_NOTIFY |
                          CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -6623,6 +6656,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                          0.0,
                          G_PARAM_READWRITE |
                          G_PARAM_STATIC_STRINGS |
+                         G_PARAM_EXPLICIT_NOTIFY |
                          CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -6642,6 +6676,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                          0.0,
                          G_PARAM_READWRITE |
                          G_PARAM_STATIC_STRINGS |
+                         G_PARAM_EXPLICIT_NOTIFY |
                          CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -6681,6 +6716,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         0.f,
                         G_PARAM_READWRITE |
                         G_PARAM_STATIC_STRINGS |
+                        G_PARAM_EXPLICIT_NOTIFY |
                         CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -6701,6 +6737,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         0.f,
                         G_PARAM_READWRITE |
                         G_PARAM_STATIC_STRINGS |
+                        G_PARAM_EXPLICIT_NOTIFY |
                         CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -6721,6 +6758,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         0.f,
                         G_PARAM_READWRITE |
                         G_PARAM_STATIC_STRINGS |
+                        G_PARAM_EXPLICIT_NOTIFY |
                         CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -6751,6 +6789,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         GRAPHENE_TYPE_MATRIX,
                         G_PARAM_READWRITE |
                         G_PARAM_STATIC_STRINGS |
+                        G_PARAM_EXPLICIT_NOTIFY |
                         CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -6766,7 +6805,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                           P_("Whether the transform property is set"),
                           FALSE,
                           G_PARAM_READABLE |
-                          G_PARAM_STATIC_STRINGS);
+                          G_PARAM_STATIC_STRINGS |
+                          G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:child-transform:
@@ -6789,6 +6829,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         GRAPHENE_TYPE_MATRIX,
                         G_PARAM_READWRITE |
                         G_PARAM_STATIC_STRINGS |
+                        G_PARAM_EXPLICIT_NOTIFY |
                         CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -6804,7 +6845,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                           P_("Whether the child-transform property is set"),
                           FALSE,
                           G_PARAM_READABLE |
-                          G_PARAM_STATIC_STRINGS);
+                          G_PARAM_STATIC_STRINGS |
+                          G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:show-on-set-parent:
@@ -6839,7 +6881,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                           P_("Clip to Allocation"),
                           P_("Sets the clip region to track the actor's allocation"),
                           FALSE,
-                          CLUTTER_PARAM_READWRITE);
+                          CLUTTER_PARAM_READWRITE |
+                          G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:text-direction:
@@ -6854,7 +6897,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                        P_("Direction of the text"),
                        CLUTTER_TYPE_TEXT_DIRECTION,
                        CLUTTER_TEXT_DIRECTION_LTR,
-                       CLUTTER_PARAM_READWRITE);
+                       CLUTTER_PARAM_READWRITE |
+                       G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:has-pointer:
@@ -6869,7 +6913,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                           P_("Has Pointer"),
                           P_("Whether the actor contains the pointer of an input device"),
                           FALSE,
-                          CLUTTER_PARAM_READABLE);
+                          CLUTTER_PARAM_READABLE |
+                          G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:actions:
@@ -6883,7 +6928,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                          P_("Actions"),
                          P_("Adds an action to the actor"),
                          CLUTTER_TYPE_ACTION,
-                         CLUTTER_PARAM_WRITABLE);
+                         CLUTTER_PARAM_WRITABLE |
+                         G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:constraints:
@@ -6897,7 +6943,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                          P_("Constraints"),
                          P_("Adds a constraint to the actor"),
                          CLUTTER_TYPE_CONSTRAINT,
-                         CLUTTER_PARAM_WRITABLE);
+                         CLUTTER_PARAM_WRITABLE |
+                         G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:effect:
@@ -6911,7 +6958,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                          P_("Effect"),
                          P_("Add an effect to be applied on the actor"),
                          CLUTTER_TYPE_EFFECT,
-                         CLUTTER_PARAM_WRITABLE);
+                         CLUTTER_PARAM_WRITABLE |
+                         G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:layout-manager:
@@ -6926,7 +6974,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                          P_("Layout Manager"),
                          P_("The object controlling the layout of an actor's children"),
                          CLUTTER_TYPE_LAYOUT_MANAGER,
-                         CLUTTER_PARAM_READWRITE);
+                         CLUTTER_PARAM_READWRITE |
+                         G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:x-expand:
@@ -6942,7 +6991,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                           P_("Whether extra horizontal space should be assigned to the actor"),
                           FALSE,
                           G_PARAM_READWRITE |
-                          G_PARAM_STATIC_STRINGS);
+                          G_PARAM_STATIC_STRINGS |
+                          G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:y-expand:
@@ -6958,7 +7008,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                           P_("Whether extra vertical space should be assigned to the actor"),
                           FALSE,
                           G_PARAM_READWRITE |
-                          G_PARAM_STATIC_STRINGS);
+                          G_PARAM_STATIC_STRINGS |
+                          G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:x-align:
@@ -6975,7 +7026,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                        P_("The alignment of the actor on the X axis within its allocation"),
                        CLUTTER_TYPE_ACTOR_ALIGN,
                        CLUTTER_ACTOR_ALIGN_FILL,
-                       CLUTTER_PARAM_READWRITE);
+                       CLUTTER_PARAM_READWRITE |
+                       G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:y-align:
@@ -6991,7 +7043,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                        P_("The alignment of the actor on the Y axis within its allocation"),
                        CLUTTER_TYPE_ACTOR_ALIGN,
                        CLUTTER_ACTOR_ALIGN_FILL,
-                       CLUTTER_PARAM_READWRITE);
+                       CLUTTER_PARAM_READWRITE |
+                       G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:margin-top:
@@ -7013,6 +7066,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         0.0,
                         G_PARAM_READWRITE |
                         G_PARAM_STATIC_STRINGS |
+                        G_PARAM_EXPLICIT_NOTIFY |
                         CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -7035,6 +7089,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         0.0,
                         G_PARAM_READWRITE |
                         G_PARAM_STATIC_STRINGS |
+                        G_PARAM_EXPLICIT_NOTIFY |
                         CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -7057,6 +7112,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         0.0,
                         G_PARAM_READWRITE |
                         G_PARAM_STATIC_STRINGS |
+                        G_PARAM_EXPLICIT_NOTIFY |
                         CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -7079,6 +7135,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         0.0,
                         G_PARAM_READWRITE |
                         G_PARAM_STATIC_STRINGS |
+                        G_PARAM_EXPLICIT_NOTIFY |
                         CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -7093,7 +7150,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                           P_("Background Color Set"),
                           P_("Whether the background color is set"),
                           FALSE,
-                          CLUTTER_PARAM_READABLE);
+                          CLUTTER_PARAM_READABLE |
+                          G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:background-color:
@@ -7112,6 +7170,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                               CLUTTER_COLOR_Transparent,
                               G_PARAM_READWRITE |
                               G_PARAM_STATIC_STRINGS |
+                              G_PARAM_EXPLICIT_NOTIFY |
                               CLUTTER_PARAM_ANIMATABLE);
 
   /**
@@ -7126,7 +7185,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                          P_("First Child"),
                          P_("The actor's first child"),
                          CLUTTER_TYPE_ACTOR,
-                         CLUTTER_PARAM_READABLE);
+                         CLUTTER_PARAM_READABLE |
+                         G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:last-child:
@@ -7140,7 +7200,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                          P_("Last Child"),
                          P_("The actor's last child"),
                          CLUTTER_TYPE_ACTOR,
-                         CLUTTER_PARAM_READABLE);
+                         CLUTTER_PARAM_READABLE |
+                         G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:content:
@@ -7155,7 +7216,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                          P_("Content"),
                          P_("Delegate object for painting the actor's content"),
                          CLUTTER_TYPE_CONTENT,
-                         CLUTTER_PARAM_READWRITE);
+                         CLUTTER_PARAM_READWRITE |
+                         G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:content-gravity:
@@ -7182,7 +7244,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                        P_("Alignment of the actor's content"),
                        CLUTTER_TYPE_CONTENT_GRAVITY,
                        CLUTTER_CONTENT_GRAVITY_RESIZE_FILL,
-                       CLUTTER_PARAM_READWRITE);
+                       CLUTTER_PARAM_READWRITE |
+                       G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:content-box:
@@ -7204,6 +7267,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         CLUTTER_TYPE_ACTOR_BOX,
                         G_PARAM_READABLE |
                         G_PARAM_STATIC_STRINGS |
+                        G_PARAM_EXPLICIT_NOTIFY |
                         CLUTTER_PARAM_ANIMATABLE);
 
   obj_props[PROP_MINIFICATION_FILTER] =
@@ -7212,7 +7276,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                        P_("The filter used when reducing the size of the content"),
                        CLUTTER_TYPE_SCALING_FILTER,
                        CLUTTER_SCALING_FILTER_LINEAR,
-                       CLUTTER_PARAM_READWRITE);
+                       CLUTTER_PARAM_READWRITE |
+                       G_PARAM_EXPLICIT_NOTIFY);
 
   obj_props[PROP_MAGNIFICATION_FILTER] =
     g_param_spec_enum ("magnification-filter",
@@ -7220,7 +7285,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                        P_("The filter used when increasing the size of the content"),
                        CLUTTER_TYPE_SCALING_FILTER,
                        CLUTTER_SCALING_FILTER_LINEAR,
-                       CLUTTER_PARAM_READWRITE);
+                       CLUTTER_PARAM_READWRITE |
+                       G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterActor:content-repeat:
@@ -7236,7 +7302,8 @@ clutter_actor_class_init (ClutterActorClass *klass)
                         CLUTTER_TYPE_CONTENT_REPEAT,
                         CLUTTER_REPEAT_NONE,
                         G_PARAM_READWRITE |
-                        G_PARAM_STATIC_STRINGS);
+                        G_PARAM_STATIC_STRINGS |
+                        G_PARAM_EXPLICIT_NOTIFY);
 
   g_object_class_install_properties (object_class, PROP_LAST, obj_props);
 
diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c
index 3c1980b5a0..868881fa3c 100644
--- a/clutter/clutter/clutter-stage.c
+++ b/clutter/clutter/clutter-stage.c
@@ -1359,7 +1359,8 @@ clutter_stage_class_init (ClutterStageClass *klass)
                           P_("Perspective"),
                           P_("Perspective projection parameters"),
                           CLUTTER_TYPE_PERSPECTIVE,
-                          CLUTTER_PARAM_READABLE);
+                          CLUTTER_PARAM_READABLE |
+                          G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterStage:title:
@@ -1373,7 +1374,8 @@ clutter_stage_class_init (ClutterStageClass *klass)
                            P_("Title"),
                            P_("Stage Title"),
                            NULL,
-                           CLUTTER_PARAM_READWRITE);
+                           CLUTTER_PARAM_READWRITE |
+                           G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * ClutterStage:key-focus:
@@ -1390,7 +1392,8 @@ clutter_stage_class_init (ClutterStageClass *klass)
                            P_("Key Focus"),
                            P_("The currently key focused actor"),
                            CLUTTER_TYPE_ACTOR,
-                           CLUTTER_PARAM_READWRITE);
+                           CLUTTER_PARAM_READWRITE |
+                           G_PARAM_EXPLICIT_NOTIFY);
 
   g_object_class_install_properties (gobject_class, PROP_LAST, obj_props);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]