@ -1134,15 +1134,7 @@ void seat_set_raw_focus(struct sway_seat *seat, struct sway_node *node) {
}
}
void seat_set_focus ( struct sway_seat * seat , struct sway_node * node ) {
if ( seat - > focused_layer ) {
struct wlr_layer_surface_v1 * layer = seat - > focused_layer ;
seat_set_focus_layer ( seat , NULL ) ;
seat_set_focus ( seat , node ) ;
seat_set_focus_layer ( seat , layer ) ;
return ;
}
static void seat_set_workspace_focus ( struct sway_seat * seat , struct sway_node * node ) {
struct sway_node * last_focus = seat_get_focus ( seat ) ;
if ( last_focus = = node ) {
return ;
@ -1176,11 +1168,6 @@ void seat_set_focus(struct sway_seat *seat, struct sway_node *node) {
return ;
}
// Deny setting focus when an input grab or lockscreen is active
if ( container & & container - > view & & ! seat_is_input_allowed ( seat , container - > view - > surface ) ) {
return ;
}
struct sway_output * new_output =
new_workspace ? new_workspace - > output : NULL ;
@ -1280,6 +1267,20 @@ void seat_set_focus(struct sway_seat *seat, struct sway_node *node) {
}
}
void seat_set_focus ( struct sway_seat * seat , struct sway_node * node ) {
if ( seat - > focused_layer ) {
struct wlr_layer_surface_v1 * layer = seat - > focused_layer ;
seat_set_focus_layer ( seat , NULL ) ;
seat_set_workspace_focus ( seat , node ) ;
seat_set_focus_layer ( seat , layer ) ;
} else {
seat_set_workspace_focus ( seat , node ) ;
}
if ( server . session_lock . locked ) {
seat_set_focus_surface ( seat , server . session_lock . focused , false ) ;
}
}
void seat_set_focus_container ( struct sway_seat * seat ,
struct sway_container * con ) {
seat_set_focus ( seat , con ? & con - > node : NULL ) ;