diff --git a/src/compositor/meta-window-actor-private.h b/src/compositor/meta-window-actor-private.h index 6b52ef5b5..ce5e7eadc 100644 --- a/src/compositor/meta-window-actor-private.h +++ b/src/compositor/meta-window-actor-private.h @@ -58,5 +58,6 @@ void meta_window_actor_effect_completed (MetaWindowActor *actor, MetaSurfaceActor *meta_window_actor_get_surface (MetaWindowActor *self); void meta_window_actor_update_surface (MetaWindowActor *self); +MetaWindowActor *meta_window_actor_from_window (MetaWindow *window); #endif /* META_WINDOW_ACTOR_PRIVATE_H */ diff --git a/src/compositor/meta-window-actor.c b/src/compositor/meta-window-actor.c index c67b2b7b0..5078624cc 100644 --- a/src/compositor/meta-window-actor.c +++ b/src/compositor/meta-window-actor.c @@ -142,6 +142,8 @@ struct _FrameData enum { FIRST_FRAME, + EFFECTS_COMPLETED, + LAST_SIGNAL }; @@ -238,6 +240,21 @@ meta_window_actor_class_init (MetaWindowActorClass *klass) NULL, NULL, NULL, G_TYPE_NONE, 0); + /** + * MetaWindowActor::effects-completed: + * @actor: the #MetaWindowActor instance + * + * The ::effects-completed signal will be emitted once all pending compositor + * effects are completed. + */ + signals[EFFECTS_COMPLETED] = + g_signal_new ("effects-completed", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, NULL, + G_TYPE_NONE, 0); + pspec = g_param_spec_object ("meta-window", "MetaWindow", "The displayed MetaWindow", @@ -1131,6 +1148,7 @@ meta_window_actor_after_effects (MetaWindowActor *self) return; } + g_signal_emit (self, signals[EFFECTS_COMPLETED], 0); meta_window_actor_sync_visibility (self); meta_window_actor_sync_actor_geometry (self, FALSE); } @@ -2157,3 +2175,9 @@ meta_window_actor_sync_updates_frozen (MetaWindowActor *self) meta_window_actor_set_updates_frozen (self, meta_window_updates_are_frozen (window)); } + +MetaWindowActor * +meta_window_actor_from_window (MetaWindow *window) +{ + return META_WINDOW_ACTOR (meta_window_get_compositor_private (window)); +}