@ -553,6 +553,24 @@ static bool output_commit(struct wlr_output *wlr_output,
if ( wlr_output - > enabled & & ! pending_enabled ) {
if ( wlr_output - > enabled & & ! pending_enabled ) {
wl_surface_attach ( output - > surface , NULL , 0 , 0 ) ;
wl_surface_attach ( output - > surface , NULL , 0 , 0 ) ;
wl_surface_commit ( output - > surface ) ;
wl_surface_commit ( output - > surface ) ;
output - > initialized = false ;
output - > configured = false ;
output - > has_configure_serial = false ;
output - > requested_width = output - > requested_height = 0 ;
} else if ( output - > own_surface & & pending_enabled & & ! output - > initialized ) {
xdg_toplevel_set_title ( output - > xdg_toplevel , output - > title ) ;
xdg_toplevel_set_app_id ( output - > xdg_toplevel , " wlroots " ) ;
wl_surface_commit ( output - > surface ) ;
output - > initialized = true ;
wl_display_flush ( output - > backend - > remote_display ) ;
while ( ! output - > configured ) {
if ( wl_event_loop_dispatch ( output - > backend - > event_loop , - 1 ) = = - 1 ) {
wlr_log ( WLR_ERROR , " wl_event_loop_dispatch() failed " ) ;
return false ;
}
}
}
}
if ( state - > committed & WLR_OUTPUT_STATE_BUFFER ) {
if ( state - > committed & WLR_OUTPUT_STATE_BUFFER ) {
@ -908,25 +926,13 @@ struct wlr_output *wlr_wl_output_create(struct wlr_backend *wlr_backend) {
goto error ;
goto error ;
}
}
xdg_toplevel_set_title ( output - > xdg_toplevel , output - > title ) ;
xdg_toplevel_set_app_id ( output - > xdg_toplevel , " wlroots " ) ;
xdg_surface_add_listener ( output - > xdg_surface ,
xdg_surface_add_listener ( output - > xdg_surface ,
& xdg_surface_listener , output ) ;
& xdg_surface_listener , output ) ;
xdg_toplevel_add_listener ( output - > xdg_toplevel ,
xdg_toplevel_add_listener ( output - > xdg_toplevel ,
& xdg_toplevel_listener , output ) ;
& xdg_toplevel_listener , output ) ;
wl_surface_commit ( output - > surface ) ;
wl_display_flush ( backend - > remote_display ) ;
wl_display_flush ( backend - > remote_display ) ;
while ( ! output - > configured ) {
int ret = wl_event_loop_dispatch ( backend - > event_loop , - 1 ) ;
if ( ret < 0 ) {
wlr_log ( WLR_ERROR , " wl_event_loop_dispatch() failed " ) ;
goto error ;
}
}
output_start ( output ) ;
output_start ( output ) ;
// TODO: let the compositor do this bit
// TODO: let the compositor do this bit
@ -962,7 +968,7 @@ void wlr_wl_output_set_title(struct wlr_output *output, const char *title) {
struct wlr_wl_output * wl_output = get_wl_output_from_output ( output ) ;
struct wlr_wl_output * wl_output = get_wl_output_from_output ( output ) ;
assert ( wl_output - > xdg_toplevel ! = NULL ) ;
assert ( wl_output - > xdg_toplevel ! = NULL ) ;
if ( update_title ( wl_output , title ) ) {
if ( update_title ( wl_output , title ) & & wl_output - > initialized ) {
xdg_toplevel_set_title ( wl_output - > xdg_toplevel , wl_output - > title ) ;
xdg_toplevel_set_title ( wl_output - > xdg_toplevel , wl_output - > title ) ;
wl_display_flush ( wl_output - > backend - > remote_display ) ;
wl_display_flush ( wl_output - > backend - > remote_display ) ;
}
}