@ -2837,7 +2837,7 @@ static int
weston_output_repaint ( struct weston_output * output , void * repaint_data )
weston_output_repaint ( struct weston_output * output , void * repaint_data )
{
{
struct weston_compositor * ec = output - > compositor ;
struct weston_compositor * ec = output - > compositor ;
struct weston_view * ev ;
struct weston_paint_node * pnode ;
struct weston_animation * animation , * next ;
struct weston_animation * animation , * next ;
struct weston_frame_callback * cb , * cnext ;
struct weston_frame_callback * cb , * cnext ;
struct wl_list frame_callback_list ;
struct wl_list frame_callback_list ;
@ -2855,18 +2855,20 @@ weston_output_repaint(struct weston_output *output, void *repaint_data)
weston_compositor_build_view_list ( ec , output ) ;
weston_compositor_build_view_list ( ec , output ) ;
/* Find the highest protection desired for an output */
/* Find the highest protection desired for an output */
wl_list_for_each ( ev , & ec - > view_list , link ) {
wl_list_for_each ( pnode , & output - > paint_node_z_order_list ,
if ( ev - > surface - > output_mask & ( 1u < < output - > id ) ) {
z_order_link ) {
/* TODO: turn this into assert once z_order_list is pruned. */
if ( ( pnode - > surface - > output_mask & ( 1u < < output - > id ) ) = = 0 )
continue ;
/*
/*
* The desired_protection of the output should be the
* The desired_protection of the output should be the
* maximum of the desired_protection of the surfaces ,
* maximum of the desired_protection of the surfaces ,
* that are displayed on that output , to avoid
* that are displayed on that output , to avoid
* reducing the protection for existing surfaces .
* reducing the protection for existing surfaces .
*/
*/
if ( ev - > surface - > desired_protection > highest_requested )
if ( pnode - > surface - > desired_protection > highest_requested )
highest_requested =
highest_requested = pnode - > surface - > desired_protection ;
ev - > surface - > desired_protection ;
}
}
}
output - > desired_protection = highest_requested ;
output - > desired_protection = highest_requested ;
@ -2874,23 +2876,25 @@ weston_output_repaint(struct weston_output *output, void *repaint_data)
if ( output - > assign_planes & & ! output - > disable_planes ) {
if ( output - > assign_planes & & ! output - > disable_planes ) {
output - > assign_planes ( output , repaint_data ) ;
output - > assign_planes ( output , repaint_data ) ;
} else {
} else {
wl_list_for_each ( ev , & ec - > view_list , link ) {
wl_list_for_each ( pnode , & output - > paint_node_z_order_list ,
weston_view_move_to_plane ( ev , & ec - > primary_plane ) ;
z_order_link ) {
ev - > psf_flags = 0 ;
weston_view_move_to_plane ( pnode - > view , & ec - > primary_plane ) ;
pnode - > view - > psf_flags = 0 ;
}
}
}
}
wl_list_init ( & frame_callback_list ) ;
wl_list_init ( & frame_callback_list ) ;
wl_list_for_each ( ev , & ec - > view_list , link ) {
wl_list_for_each ( pnode , & output - > paint_node_z_order_list ,
z_order_link ) {
/* Note: This operation is safe to do multiple times on the
/* Note: This operation is safe to do multiple times on the
* same surface .
* same surface .
*/
*/
if ( ev - > surface - > output = = output ) {
if ( pnod e- > surface - > output = = output ) {
wl_list_insert_list ( & frame_callback_list ,
wl_list_insert_list ( & frame_callback_list ,
& ev - > surface - > frame_callback_list ) ;
& pnod e- > surface - > frame_callback_list ) ;
wl_list_init ( & ev - > surface - > frame_callback_list ) ;
wl_list_init ( & pnod e- > surface - > frame_callback_list ) ;
weston_output_take_feedback_list ( output , ev - > surface ) ;
weston_output_take_feedback_list ( output , pnod e- > surface ) ;
}
}
}
}