fix: clamp tiling windows with their working rects #1043
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_strictly
is added to restrict all computed rectangles in tiling mode to the working rectangle of the ancestor monitor. The existingclamp
function 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.