The block operation starts with the touching set containing only the
window being pushed, call it W. The touching set contains all
windows moving together attached due to the block operation. New
windows are added to the touching set as windows in the set hit other
windows on the way. The closest window is determined by examining the
plow set for windows. The algorithm for the PushRect function is
similar to PlowRect in terms of determining the plow set of
windows, however the closest window and its distance are also recorded
for each window in the touching set. The closest distance is then
compared to the distance to the border to see if the border is hit
before the window, in which case the algorithm stops. Otherwise, the
push distance is checked with the distance to the closest window. The
closest window is added to the touching set, if the distance to the
window is shorter. The push distance is then decreased by the distance
to the closest window and the algorithm reenters the loop. Otherwise
windows in the touching set are moved by the push distance and the
algorithm stops. The pseudo-code algorithm of the PushRect
function is listed in Appendix
. In these algorithms the
minimum size constraints are not implemented.