Repository navigation
Conversation
Mutter can directly scan out any window covering the whole output, not only fullscreen ones, so once the dock show animation completed it was not painted anymore, causing it to flicker. Inhibit unredirection while the dock is shown and the top window of its monitor covers it, and re-evaluate it when windows are restacked, resized or moved. Also ignore spurious leave events received while the pointer is still over the dock during its animations, tracking the pointer until it actually leaves the dock area. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Dev-Kroz
marked this pull request as ready for review
October 18, 2026 02:07
|
+1 I am also experiencing flickering with Intelligent autohide |
This branch has not been deployed
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
Fixes the dock flickering on Wayland when it is shown over a fullscreen window, or over a window that covers its whole monitor (for example a maximized window when no panel reserves space there, such as with Hide Top Bar or on a secondary monitor). Unredirection stays enabled.
Related: #2749, #2714, #1381 (and #2753, which takes a compositor-wide approach instead).
1. Keep composition while the dock is shown over a window covering its monitor
Mutter can directly scan out any window that covers the whole output, not only fullscreen ones, and it doesn't take shell actors stacked above the window into account. GNOME Shell's
ease()wrapper inhibits unredirection only while an animation runs, so the dock is painted while it slides in. Once the animation completed, the dock was only holding its own inhibition whenmonitor.inFullscreenwas true. Otherwise Mutter went back to direct scanout and the dock disappeared, which made it flicker.inhibitsUnredirectionnow uses a new helper,_monitorMayBeScannedOut(). It returns true when the dock monitor is in fullscreen, or when the topmost visible window of that monitor covers it entirely (based on the window buffer rect).DockManagerre-evaluates the inhibition onrestacked,window-entered-monitor,size-changedandunminimize, besidesin-fullscreen-changed, since a window can start or stop covering a monitor without changing its fullscreen state. The window scan only runs while a dock is visible.2. Ignore spurious leave events while the dock animates
While the dock slides over a window, the pointer pick can briefly hit the surface below it. The dock then receives a leave event even though the pointer didn't move, and autohide hid it.
_hoverChanged()checks the real pointer position against_staticBox(via_isPointerOverDock()) before hiding, and ignores the leave if the pointer is still over the dock._checkPointerLeaveLater()polls the pointer every 100 ms until it really leaves, then re-runs_hoverChanged(). The check is cancelled when hover comes back, and removed on destroy.Trade-offs
While the dock is shown over a window covering its own monitor, unredirection is inhibited compositor-wide, the same cost as the existing fullscreen case.
Testing
GNOME Shell 51.1 / Mutter 51.0, Wayland.