lockScreen: Extend modal grab to entire uiGroup

Main.pushModal() used to ensure a compositor grab, but didn't
take an input grab. That changed when porting to ClutterGrab,
so by limiting the grab to the shield/dialog, it is no longer
possible to access top bar menus when the screen is locked.

To fix that, take the grab on the whole uiGroup so that the top
bar is included.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5470

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2298>
This commit is contained in:
Florian Müllner 2022-05-13 14:30:00 +02:00
parent 3290ef4eb6
commit 3e7ce18dcf
2 changed files with 2 additions and 2 deletions

View File

@ -196,7 +196,7 @@ var ScreenShield = class {
if (this._isModal)
return true;
let grab = Main.pushModal(this.actor, { actionMode: Shell.ActionMode.LOCK_SCREEN });
let grab = Main.pushModal(Main.uiGroup, { actionMode: Shell.ActionMode.LOCK_SCREEN });
// We expect at least a keyboard grab here
this._isModal = (grab.get_seat_state() & Clutter.GrabState.KEYBOARD) !== 0;

View File

@ -873,7 +873,7 @@ var UnlockDialog = GObject.registerClass({
timestamp,
actionMode: Shell.ActionMode.UNLOCK_SCREEN,
};
let grab = Main.pushModal(this, modalParams);
let grab = Main.pushModal(Main.uiGroup, modalParams);
if (grab.get_seat_state() !== Clutter.GrabState.ALL) {
Main.popModal(grab);
return false;