mirror of
https://github.com/brl/mutter.git
synced 2024-11-24 09:00:42 -05:00
wayland/surface: Add API to cache frame callbacks
Sometimes it may be useful for roles to put callbacks in the generic
surface frame callback queue. The surface frame callback queue will
either eventually be processed on the next surface role assignment that
places the frame callbacks in a role specific queue, processed at some
other point in time by a role, or cleaned up on surface destruction.
https://gitlab.gnome.org/GNOME/mutter/issues/240
(cherry picked from commit 0ace58d05f
)
This commit is contained in:
parent
b9f5f93956
commit
ad2e9282dc
@ -602,6 +602,15 @@ parent_surface_state_applied (gpointer data,
|
|||||||
meta_wayland_subsurface_parent_state_applied (subsurface);
|
meta_wayland_subsurface_parent_state_applied (subsurface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
meta_wayland_surface_cache_pending_frame_callbacks (MetaWaylandSurface *surface,
|
||||||
|
MetaWaylandPendingState *pending)
|
||||||
|
{
|
||||||
|
wl_list_insert_list (&surface->pending_frame_callback_list,
|
||||||
|
&pending->frame_callback_list);
|
||||||
|
wl_list_init (&pending->frame_callback_list);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
meta_wayland_surface_apply_pending_state (MetaWaylandSurface *surface,
|
meta_wayland_surface_apply_pending_state (MetaWaylandSurface *surface,
|
||||||
MetaWaylandPendingState *pending)
|
MetaWaylandPendingState *pending)
|
||||||
@ -722,13 +731,7 @@ meta_wayland_surface_apply_pending_state (MetaWaylandSurface *surface,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Since there is no role assigned to the surface yet, keep frame
|
meta_wayland_surface_cache_pending_frame_callbacks (surface, pending);
|
||||||
* callbacks queued until a role is assigned and we know how
|
|
||||||
* the surface will be drawn.
|
|
||||||
*/
|
|
||||||
wl_list_insert_list (&surface->pending_frame_callback_list,
|
|
||||||
&pending->frame_callback_list);
|
|
||||||
wl_list_init (&pending->frame_callback_list);
|
|
||||||
|
|
||||||
if (pending->newly_attached)
|
if (pending->newly_attached)
|
||||||
{
|
{
|
||||||
|
@ -261,6 +261,9 @@ MetaWaylandSurface *meta_wayland_surface_get_toplevel (MetaWaylandSurface *surfa
|
|||||||
|
|
||||||
MetaWindow * meta_wayland_surface_get_toplevel_window (MetaWaylandSurface *surface);
|
MetaWindow * meta_wayland_surface_get_toplevel_window (MetaWaylandSurface *surface);
|
||||||
|
|
||||||
|
void meta_wayland_surface_cache_pending_frame_callbacks (MetaWaylandSurface *surface,
|
||||||
|
MetaWaylandPendingState *pending);
|
||||||
|
|
||||||
void meta_wayland_surface_queue_pending_frame_callbacks (MetaWaylandSurface *surface);
|
void meta_wayland_surface_queue_pending_frame_callbacks (MetaWaylandSurface *surface);
|
||||||
|
|
||||||
void meta_wayland_surface_queue_pending_state_frame_callbacks (MetaWaylandSurface *surface,
|
void meta_wayland_surface_queue_pending_state_frame_callbacks (MetaWaylandSurface *surface,
|
||||||
|
Loading…
Reference in New Issue
Block a user