overview: Sync grabs after running startup animation

In the nested session the startup animation sometimes fails, weirdly
that always happens to me when running a freshly built gnome-shell the
first time. The reason it fails is that mutter fails to aquire a pointer
grab from the xserver, XIGrabDevice() is unsuccessful.

A simple workaround for this race condition in the xserver is to just
grab the devices a bit later, that is after the startups animation
instead of before it.

This was also tested with disabled animations, and seems to work just as
well in that case.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1812>
This commit is contained in:
Jonas Dreßler 2021-04-15 16:58:17 +02:00 committed by Marge Bot
parent e7780623fe
commit 954131c1c8

View File

@ -649,13 +649,20 @@ var Overview = class {
this._visible = true; this._visible = true;
this._visibleTarget = true; this._visibleTarget = true;
Main.layoutManager.showOverview(); Main.layoutManager.showOverview();
this._syncGrab(); // We should call this._syncGrab() here, but moved it to happen after
// the animation because of a race in the xserver where the grab
// fails when requested very early during startup.
Meta.disable_unredirect_for_display(global.display); Meta.disable_unredirect_for_display(global.display);
this.emit('showing'); this.emit('showing');
this._overview.runStartupAnimation(() => { this._overview.runStartupAnimation(() => {
if (!this._syncGrab()) {
callback();
return;
}
Main.panel.style = null; Main.panel.style = null;
this.emit('shown'); this.emit('shown');
callback(); callback();