fix: clamp tiling windows with their working rects #1043
+61
−29
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.


If a window is on the edge of the monitor and has a large shadow border, the computed rectangle can exceed it ancestor monitor's the working rectangle, which places it on a neighbor monitor instead. The DWM will render the window either too long or too wide in a dual monitor setting where two monitors of different sizes are not perfectly aligned.
To fix this, a new function
clamp_strictlyis added to restrict all computed rectangles in tiling mode to the working rectangle of the ancestor monitor. The existingclampfunction cannot guarantee this. Consider rectangles in(x, y, w, h):(0, 0, 3, 3)and(1, 1, 3, 3)where the latter is the outer. The intersection of those 2 rectangles needs to have width and height 2 instead of 3.