@ -137,6 +137,7 @@ static void render_wl_shell_surface(struct wlr_wl_shell_surface *surface,
}
}
}
}
# ifdef WLR_HAS_XWAYLAND
static void render_xwayland_children ( struct wlr_xwayland_surface * surface ,
static void render_xwayland_children ( struct wlr_xwayland_surface * surface ,
struct roots_desktop * desktop , struct wlr_output * wlr_output ,
struct roots_desktop * desktop , struct wlr_output * wlr_output ,
struct timespec * when ) {
struct timespec * when ) {
@ -149,6 +150,7 @@ static void render_xwayland_children(struct wlr_xwayland_surface *surface,
render_xwayland_children ( child , desktop , wlr_output , when ) ;
render_xwayland_children ( child , desktop , wlr_output , when ) ;
}
}
}
}
# endif
static void render_decorations ( struct roots_view * view ,
static void render_decorations ( struct roots_view * view ,
struct roots_desktop * desktop , struct wlr_output * output ) {
struct roots_desktop * desktop , struct wlr_output * output ) {
@ -198,10 +200,12 @@ static void render_view(struct roots_view *view, struct roots_desktop *desktop,
render_wl_shell_surface ( view - > wl_shell_surface , desktop , wlr_output ,
render_wl_shell_surface ( view - > wl_shell_surface , desktop , wlr_output ,
when , view - > x , view - > y , view - > rotation , false ) ;
when , view - > x , view - > y , view - > rotation , false ) ;
break ;
break ;
# ifdef WLR_HAS_XWAYLAND
case ROOTS_XWAYLAND_VIEW :
case ROOTS_XWAYLAND_VIEW :
render_surface ( view - > wlr_surface , desktop , wlr_output , when ,
render_surface ( view - > wlr_surface , desktop , wlr_output , when ,
view - > x , view - > y , view - > rotation ) ;
view - > x , view - > y , view - > rotation ) ;
break ;
break ;
# endif
}
}
}
}
@ -215,8 +219,10 @@ static bool has_standalone_surface(struct roots_view *view) {
return wl_list_empty ( & view - > xdg_surface_v6 - > popups ) ;
return wl_list_empty ( & view - > xdg_surface_v6 - > popups ) ;
case ROOTS_WL_SHELL_VIEW :
case ROOTS_WL_SHELL_VIEW :
return wl_list_empty ( & view - > wl_shell_surface - > popups ) ;
return wl_list_empty ( & view - > wl_shell_surface - > popups ) ;
# ifdef WLR_HAS_XWAYLAND
case ROOTS_XWAYLAND_VIEW :
case ROOTS_XWAYLAND_VIEW :
return wl_list_empty ( & view - > xwayland_surface - > children ) ;
return wl_list_empty ( & view - > xwayland_surface - > children ) ;
# endif
}
}
return true ;
return true ;
}
}
@ -264,10 +270,12 @@ static void output_frame_notify(struct wl_listener *listener, void *data) {
// During normal rendering the xwayland window tree isn't traversed
// During normal rendering the xwayland window tree isn't traversed
// because all windows are rendered. Here we only want to render
// because all windows are rendered. Here we only want to render
// the fullscreen window's children so we have to traverse the tree.
// the fullscreen window's children so we have to traverse the tree.
# ifdef WLR_HAS_XWAYLAND
if ( view - > type = = ROOTS_XWAYLAND_VIEW ) {
if ( view - > type = = ROOTS_XWAYLAND_VIEW ) {
render_xwayland_children ( view - > xwayland_surface , desktop ,
render_xwayland_children ( view - > xwayland_surface , desktop ,
wlr_output , & now ) ;
wlr_output , & now ) ;
}
}
# endif
}
}
wlr_renderer_end ( server - > renderer ) ;
wlr_renderer_end ( server - > renderer ) ;
wlr_output_swap_buffers ( wlr_output ) ;
wlr_output_swap_buffers ( wlr_output ) ;