Require both mouse and keyboard grabs for some grabs to be successful
Commit 7419674b changed some grabs from requiring both mouse and keyboard grabs to be considered successful to only requiring either of them. Due to this it was possible for example to open the overview or the screenshot UI with a client (such as Chrome when opening a menu) holding the mouse grab. This then made it impossible to interact with the UI using the mouse (or keyboard) and if attempted could result in an unresponsive UI. Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5414 Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2287>
This commit is contained in:
parent
3e8164cc36
commit
23b4eb459e
@ -154,7 +154,7 @@ var GrabHelper = class GrabHelper {
|
||||
let firstGrab = this._modalCount == 0;
|
||||
if (firstGrab) {
|
||||
let grab = Main.pushModal(this._owner, this._modalParams);
|
||||
if (grab.get_seat_state() === Clutter.GrabState.NONE) {
|
||||
if (grab.get_seat_state() !== Clutter.GrabState.ALL) {
|
||||
Main.popModal(grab);
|
||||
return false;
|
||||
}
|
||||
|
@ -453,7 +453,7 @@ class ObjInspector extends St.ScrollView {
|
||||
return;
|
||||
|
||||
const grab = Main.pushModal(this, { actionMode: Shell.ActionMode.LOOKING_GLASS });
|
||||
if (grab.get_seat_state() === Clutter.GrabState.NONE) {
|
||||
if (grab.get_seat_state() !== Clutter.GrabState.ALL) {
|
||||
Main.popModal(grab);
|
||||
return;
|
||||
}
|
||||
@ -1612,7 +1612,7 @@ class LookingGlass extends St.BoxLayout {
|
||||
return;
|
||||
|
||||
let grab = Main.pushModal(this, { actionMode: Shell.ActionMode.LOOKING_GLASS });
|
||||
if (grab.get_seat_state() === Clutter.GrabState.NONE) {
|
||||
if (grab.get_seat_state() !== Clutter.GrabState.ALL) {
|
||||
Main.popModal(grab);
|
||||
return;
|
||||
}
|
||||
|
@ -237,7 +237,7 @@ var ModalDialog = GObject.registerClass({
|
||||
if (timestamp)
|
||||
params['timestamp'] = timestamp;
|
||||
let grab = Main.pushModal(this, params);
|
||||
if (grab.get_seat_state() === Clutter.GrabState.NONE) {
|
||||
if (grab.get_seat_state() !== Clutter.GrabState.ALL) {
|
||||
Main.popModal(grab);
|
||||
return false;
|
||||
}
|
||||
|
@ -456,14 +456,14 @@ var Overview = class {
|
||||
const grab = Main.pushModal(global.stage, {
|
||||
actionMode: Shell.ActionMode.OVERVIEW,
|
||||
});
|
||||
if (grab.get_seat_state() !== Clutter.GrabState.NONE) {
|
||||
this._grab = grab;
|
||||
this._modal = true;
|
||||
} else {
|
||||
if (grab.get_seat_state() !== Clutter.GrabState.ALL) {
|
||||
Main.popModal(grab);
|
||||
this.hide();
|
||||
return false;
|
||||
}
|
||||
|
||||
this._grab = grab;
|
||||
this._modal = true;
|
||||
}
|
||||
} else {
|
||||
// eslint-disable-next-line no-lonely-if
|
||||
|
Loading…
x
Reference in New Issue
Block a user