fix(xwm): Defer X11 focus release between same-client transitions#2029
Open
mayakwd wants to merge 1 commit intoSmithay:masterfrom
Open
fix(xwm): Defer X11 focus release between same-client transitions#2029mayakwd wants to merge 1 commit intoSmithay:masterfrom
mayakwd wants to merge 1 commit intoSmithay:masterfrom
Conversation
The synchronous `set_input_focus(NONE, NONE)` in `X11Surface::leave` breaks focus transitions between same-client windows. Defer the focus-out decision to the next event-loop iteration so it can be cancelled out.
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.
Description
X11Wmset_NET_ACTIVE_WINDOW = NONEfor any FocusOut event on a tracked top-level window, ignoringdetailfield. It breaks X11 clients like Unity Editor.Mechanism of the flaw:
_NET_ACTIVE_WINDOWto none, and...FocusIn.But that's not the whole issue.
X11Surfacealso synchronously callsset_input_focus(NONE, NONE), producing the intermediate state "focus is nowhere".Fixes:
Works not only for cosmic-comp but also for other compositors based on Smithay, all of which suffer the same issue.
Symptoms
Symptoms are exactly as described in pop-os/cosmic-comp#2006:
And many other related to input-unresponsiveness and sluggish experience, which cannot always be resolved by clicking other panels/alt-tabbing.
Diagnostics
Instrumentation wired into Smithay showed that:
Meaning that Unity switched focus from the top level to a sub-window, but _NET_ACTIVE_WINDOW became none.
How the fix works
FocusOutnow doesn't touch_NET_ACTIVE_WINDOWX11Wm.What I've checked
Checklist