diff options
Diffstat (limited to 'src/wayland/meta-wayland.c')
-rw-r--r-- | src/wayland/meta-wayland.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/wayland/meta-wayland.c b/src/wayland/meta-wayland.c index 731e24727..b032a8bfc 100644 --- a/src/wayland/meta-wayland.c +++ b/src/wayland/meta-wayland.c @@ -230,6 +230,52 @@ on_after_update (ClutterStage *stage, } } +static MetaWaylandOutput * +get_output_for_stage_view (MetaWaylandCompositor *compositor, + ClutterStageView *stage_view) +{ + MetaCrtc *crtc; + MetaOutput *output; + MetaMonitor *monitor; + MetaLogicalMonitor *logical_monitor; + + crtc = meta_renderer_view_get_crtc (META_RENDERER_VIEW (stage_view)); + + /* + * All outputs occupy the same region of the screen, as their contents are + * the same, so pick the first one. + */ + output = meta_crtc_get_outputs (crtc)->data; + + monitor = meta_output_get_monitor (output); + logical_monitor = meta_monitor_get_logical_monitor (monitor); + return g_hash_table_lookup (compositor->outputs, &logical_monitor->winsys_id); +} + +static void +on_presented (ClutterStage *stage, + ClutterStageView *stage_view, + ClutterFrameInfo *frame_info, + MetaWaylandCompositor *compositor) +{ + MetaWaylandPresentationFeedback *feedback, *next; + struct wl_list *feedbacks; + MetaWaylandOutput *output; + + feedbacks = + meta_wayland_presentation_time_ensure_feedbacks (&compositor->presentation_time, + stage_view); + + output = get_output_for_stage_view (compositor, stage_view); + + wl_list_for_each_safe (feedback, next, feedbacks, link) + { + meta_wayland_presentation_feedback_present (feedback, + frame_info, + output); + } +} + /** * meta_wayland_compositor_handle_event: * @compositor: the #MetaWaylandCompositor instance @@ -438,6 +484,8 @@ meta_wayland_compositor_setup (MetaWaylandCompositor *compositor) g_signal_connect (stage, "after-update", G_CALLBACK (on_after_update), compositor); + g_signal_connect (stage, "presented", + G_CALLBACK (on_presented), compositor); if (!wl_global_create (compositor->wayland_display, &wl_compositor_interface, |