@ -715,16 +715,6 @@ struct roots_seat_view *roots_seat_view_from_view(
return seat_view ;
}
static void release_fullscreen ( struct roots_output * output ) {
if ( output - > fullscreen_view ) {
if ( output - > fullscreen_view - > set_fullscreen ) {
output - > fullscreen_view - > set_fullscreen (
output - > fullscreen_view , false ) ;
}
view_set_fullscreen ( output - > fullscreen_view , false , output - > wlr_output ) ;
}
}
void roots_seat_set_focus ( struct roots_seat * seat , struct roots_view * view ) {
// Make sure the view will be rendered on top of others, even if it's
// already focused in this seat
@ -733,14 +723,30 @@ void roots_seat_set_focus(struct roots_seat *seat, struct roots_view *view) {
wl_list_insert ( & seat - > input - > server - > desktop - > views , & view - > link ) ;
}
struct roots_desktop * desktop = view - > desktop ;
struct roots_output * output ;
struct wlr_box box ;
view_get_box ( view , & box ) ;
wl_list_for_each ( output , & desktop - > outputs , link ) {
if ( wlr_output_layout_intersects ( desktop - > layout ,
output - > wlr_output , & box ) ) {
release_fullscreen ( output ) ;
bool unfullscreen = true ;
# ifdef WLR_HAS_XWAYLAND
if ( view & & view - > type = = ROOTS_XWAYLAND_VIEW & &
view - > xwayland_surface - > override_redirect ) {
unfullscreen = false ;
}
# endif
if ( unfullscreen ) {
struct roots_desktop * desktop = view - > desktop ;
struct roots_output * output ;
struct wlr_box box ;
view_get_box ( view , & box ) ;
wl_list_for_each ( output , & desktop - > outputs , link ) {
if ( output - > fullscreen_view & &
output - > fullscreen_view ! = view & &
wlr_output_layout_intersects (
desktop - > layout ,
output - > wlr_output , & box ) ) {
view_set_fullscreen ( output - > fullscreen_view ,
false , NULL ) ;
}
}
}