screen-cast/monitor-stream-src: Copy content before cursor is drawn

To get a consistent behaviour no matter whether HW cursors are in use or
not, make sure to copy the framebuffer content before the stage overlays
(cursor sprite textures) are painted.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/357
This commit is contained in:
Jonas Ådahl 2018-12-12 15:29:21 +01:00 committed by Ray Strode
parent c5f0fc1276
commit fcd55e6f59

View File

@ -35,7 +35,7 @@ struct _MetaScreenCastMonitorStreamSrc
{ {
MetaScreenCastStreamSrc parent; MetaScreenCastStreamSrc parent;
gulong stage_painted_handler_id; gulong actors_painted_handler_id;
}; };
G_DEFINE_TYPE (MetaScreenCastMonitorStreamSrc, G_DEFINE_TYPE (MetaScreenCastMonitorStreamSrc,
@ -110,8 +110,8 @@ meta_screen_cast_monitor_stream_src_enable (MetaScreenCastStreamSrc *src)
ClutterStage *stage; ClutterStage *stage;
stage = get_stage (monitor_src); stage = get_stage (monitor_src);
monitor_src->stage_painted_handler_id = monitor_src->actors_painted_handler_id =
g_signal_connect_after (stage, "paint", g_signal_connect_after (stage, "actors-painted",
G_CALLBACK (stage_painted), G_CALLBACK (stage_painted),
monitor_src); monitor_src);
clutter_actor_queue_redraw (CLUTTER_ACTOR (stage)); clutter_actor_queue_redraw (CLUTTER_ACTOR (stage));
@ -125,8 +125,8 @@ meta_screen_cast_monitor_stream_src_disable (MetaScreenCastStreamSrc *src)
ClutterStage *stage; ClutterStage *stage;
stage = get_stage (monitor_src); stage = get_stage (monitor_src);
g_signal_handler_disconnect (stage, monitor_src->stage_painted_handler_id); g_signal_handler_disconnect (stage, monitor_src->actors_painted_handler_id);
monitor_src->stage_painted_handler_id = 0; monitor_src->actors_painted_handler_id = 0;
} }
static void static void