stage: Only invoke paint phase callbacks when painting views

These phase callbacks are not intended to be inovked when something
secondary is painting the stage, such as a screen cast stream, or
similar. Thus, only invoke the callbacks when there is a view associated
with the paint context, which will not be the case for offscreen
painting.

https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1207
This commit is contained in:
Jonas Ådahl 2020-04-20 22:39:08 +02:00
parent b7bf42e778
commit 90c4b6492f

View File

@ -198,17 +198,22 @@ meta_stage_paint (ClutterActor *actor,
CLUTTER_ACTOR_CLASS (meta_stage_parent_class)->paint (actor, paint_context); CLUTTER_ACTOR_CLASS (meta_stage_parent_class)->paint (actor, paint_context);
view = clutter_paint_context_get_stage_view (paint_context); view = clutter_paint_context_get_stage_view (paint_context);
if (view)
notify_watchers_for_mode (stage, view, paint_context, {
META_STAGE_WATCH_AFTER_ACTOR_PAINT); notify_watchers_for_mode (stage, view, paint_context,
META_STAGE_WATCH_AFTER_ACTOR_PAINT);
}
g_signal_emit (stage, signals[ACTORS_PAINTED], 0); g_signal_emit (stage, signals[ACTORS_PAINTED], 0);
for (l = stage->overlays; l; l = l->next) for (l = stage->overlays; l; l = l->next)
meta_overlay_paint (l->data, paint_context); meta_overlay_paint (l->data, paint_context);
notify_watchers_for_mode (stage, view, paint_context, if (view)
META_STAGE_WATCH_AFTER_OVERLAY_PAINT); {
notify_watchers_for_mode (stage, view, paint_context,
META_STAGE_WATCH_AFTER_OVERLAY_PAINT);
}
} }
static void static void