grabHelper: Track the grab before trying to set key focus
If we don't this for a nested grabFocus grab, the notify::key-focus will be called, not think that the new key focus is part of the grab, and cancel the full grab. This leaves the grab helper in an inconsistent and confused state, as the grab is pushed onto the grab stack after. https://bugzilla.gnome.org/show_bug.cgi?id=693975
This commit is contained in:
parent
5f995c64d4
commit
180000a531
@ -167,6 +167,8 @@ const GrabHelper = new Lang.Class({
|
|||||||
if (params.grabFocus && !this._takeFocusGrab(hadFocus))
|
if (params.grabFocus && !this._takeFocusGrab(hadFocus))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
this._grabStack.push(params);
|
||||||
|
|
||||||
if (params.focus) {
|
if (params.focus) {
|
||||||
params.focus.grab_key_focus();
|
params.focus.grab_key_focus();
|
||||||
} else if (newFocus && (hadFocus || params.grabFocus)) {
|
} else if (newFocus && (hadFocus || params.grabFocus)) {
|
||||||
@ -177,7 +179,6 @@ const GrabHelper = new Lang.Class({
|
|||||||
if ((params.grabFocus || params.modal) && !this._capturedEventId)
|
if ((params.grabFocus || params.modal) && !this._capturedEventId)
|
||||||
this._capturedEventId = global.stage.connect('captured-event', Lang.bind(this, this._onCapturedEvent));
|
this._capturedEventId = global.stage.connect('captured-event', Lang.bind(this, this._onCapturedEvent));
|
||||||
|
|
||||||
this._grabStack.push(params);
|
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user