@ -35,6 +35,15 @@ static struct cmd_results *focus_mode(struct sway_container *con,
struct sway_seat * seat , bool floating ) {
struct sway_container * ws = con - > type = = C_WORKSPACE ?
con : container_parent ( con , C_WORKSPACE ) ;
// If the container is in a floating split container,
// operate on the split container instead of the child.
if ( container_is_floating_or_child ( con ) ) {
while ( con - > parent - > layout ! = L_FLOATING ) {
con = con - > parent ;
}
}
struct sway_container * new_focus = NULL ;
if ( floating ) {
new_focus = seat_get_focus_inactive ( seat , ws - > sway_workspace - > floating ) ;
@ -99,7 +108,7 @@ struct cmd_results *cmd_focus(int argc, char **argv) {
} else if ( strcmp ( argv [ 0 ] , " tiling " ) = = 0 ) {
return focus_mode ( con , seat , false ) ;
} else if ( strcmp ( argv [ 0 ] , " mode_toggle " ) = = 0 ) {
return focus_mode ( con , seat , ! container_is_floating ( con ) ) ;
return focus_mode ( con , seat , ! container_is_floating _or_child ( con ) ) ;
}
if ( strcmp ( argv [ 0 ] , " output " ) = = 0 ) {