diff --git a/src/wayland/meta-wayland-surface.c b/src/wayland/meta-wayland-surface.c index 7481d87e8..863a3baef 100644 --- a/src/wayland/meta-wayland-surface.c +++ b/src/wayland/meta-wayland-surface.c @@ -541,11 +541,21 @@ apply_pending_state (MetaWaylandSurface *surface, } /* wl_surface.frame */ - if (surface->surface_actor) - meta_surface_actor_wayland_add_frame_callbacks (META_SURFACE_ACTOR_WAYLAND (surface->surface_actor), - &pending->frame_callback_list); - else - wl_list_insert_list (&compositor->frame_callbacks, &pending->frame_callback_list); + switch (surface->role) + { + case META_WAYLAND_SURFACE_ROLE_NONE: + case META_WAYLAND_SURFACE_ROLE_CURSOR: + case META_WAYLAND_SURFACE_ROLE_DND: + wl_list_insert_list (&compositor->frame_callbacks, &pending->frame_callback_list); + break; + case META_WAYLAND_SURFACE_ROLE_XDG_SURFACE: + case META_WAYLAND_SURFACE_ROLE_XDG_POPUP: + case META_WAYLAND_SURFACE_ROLE_WL_SHELL_SURFACE: + case META_WAYLAND_SURFACE_ROLE_SUBSURFACE: + meta_surface_actor_wayland_add_frame_callbacks (META_SURFACE_ACTOR_WAYLAND (surface->surface_actor), + &pending->frame_callback_list); + break; + } wl_list_init (&pending->frame_callback_list); switch (surface->role)