fix(wayland): skip fully off-surface blur regions - #4173
Open
meleeislandbot wants to merge 1 commit into
Open
Conversation
Treat a blur region with no surface intersection as empty before publishing it. This avoids full-surface flashes on compositors that misinterpret a fully clipped region while leaving partially visible regions unchanged.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
Motivation
During auto-hide transitions, a bar blur region can move completely outside its layer surface for one frame. Hyprland can interpret that fully clipped region as unbounded and render blur across the whole surface, producing a visible flash.
Sending a null region in that case is equivalent to the empty result required after compositor clipping, while preserving normal blur as soon as any part of the region intersects the surface.
Type of Change
Related Issue
No Noctalia issue. User-authored report and sanitized baseline frames: hyprwm/Hyprland#16076
Testing
just formatwith clang-format 22.1.8just buildmeson test -C build-debug surface_blur_region --print-errorlogsjust test debug --print-errorlogs— 97/97 tests passedjust lint— 571 source files checked with warnings treated as errorsjust build releaseManual Coverage
Screenshots / Videos
Sanitized 120 fps baseline frames are included in the linked Hyprland discussion. The fix removes a one-frame artifact, so the candidate was validated through repeated live transitions rather than a static after screenshot.
Checklist
CONTRIBUTING.md.just formatwith clang-format v22+ installed, or this PR has no code changes.docs/user/when this PR changes documented behavior or configuration, or this PR does not require documentation changes.assets/translations/en.json, or this PR adds no new user-facing strings.Additional Notes
ext-background-effect-v1requires the compositor to clip regions to the surface. This is a defensive client-side guard for compositors that misinterpret a non-empty region whose clipped result is empty. Partially visible regions and normal blur behavior are unchanged.