grabHelper: Fix regression for dwelling with mouse down

b203a95a78 introduced a regression
where we forgot to bail out if the pushModal didn't succeed properly.

https://bugzilla.gnome.org/show_bug.cgi?id=684344
This commit is contained in:
Jasper St. Pierre 2012-09-18 23:04:57 -03:00
parent 449d116af2
commit 2acb097662

View File

@ -148,31 +148,32 @@ const GrabHelper = new Lang.Class({
return true; return true;
params.savedFocus = focus; params.savedFocus = focus;
this._grabStack.push(params);
if (params.modal) if (params.modal && !this._takeModalGrab())
this._takeModalGrab(); return false;
if (params.grabFocus) if (params.grabFocus && !this._takeFocusGrab(hadFocus))
this._takeFocusGrab(hadFocus); return false;
if (hadFocus || params.grabFocus) if (hadFocus || params.grabFocus)
_navigateActor(newFocus); _navigateActor(newFocus);
this._grabStack.push(params);
return true; return true;
}, },
_takeModalGrab: function() { _takeModalGrab: function() {
let firstGrab = (this._modalCount == 0); let firstGrab = (this._modalCount == 0);
if (firstGrab) {
if (!Main.pushModal(this._owner))
return false;
this._capturedEventId = global.stage.connect('captured-event', Lang.bind(this, this._onCapturedEvent));
this._eventId = global.stage.connect('event', Lang.bind(this, this._onEvent));
}
this._modalCount++; this._modalCount++;
if (!firstGrab) return true;
return;
if (!Main.pushModal(this._owner))
return;
this._capturedEventId = global.stage.connect('captured-event', Lang.bind(this, this._onCapturedEvent));
this._eventId = global.stage.connect('event', Lang.bind(this, this._onEvent));
}, },
_releaseModalGrab: function() { _releaseModalGrab: function() {
@ -196,23 +197,24 @@ const GrabHelper = new Lang.Class({
_takeFocusGrab: function(hadFocus) { _takeFocusGrab: function(hadFocus) {
let firstGrab = (this._grabFocusCount == 0); let firstGrab = (this._grabFocusCount == 0);
this._grabFocusCount++; if (firstGrab) {
if (!firstGrab) let metaDisplay = global.screen.get_display();
return;
let metaDisplay = global.screen.get_display(); this._grabbedFromKeynav = hadFocus;
this._preGrabInputMode = global.stage_input_mode;
this._prevFocusedWindow = metaDisplay.focus_window;
this._grabbedFromKeynav = hadFocus; if (this._preGrabInputMode == Shell.StageInputMode.NONREACTIVE ||
this._preGrabInputMode = global.stage_input_mode; this._preGrabInputMode == Shell.StageInputMode.NORMAL) {
this._prevFocusedWindow = metaDisplay.focus_window; global.set_stage_input_mode(Shell.StageInputMode.FOCUSED);
}
if (this._preGrabInputMode == Shell.StageInputMode.NONREACTIVE || this._keyFocusNotifyId = global.stage.connect('notify::key-focus', Lang.bind(this, this._onKeyFocusChanged));
this._preGrabInputMode == Shell.StageInputMode.NORMAL) { this._focusWindowChangedId = metaDisplay.connect('notify::focus-window', Lang.bind(this, this._focusWindowChanged));
global.set_stage_input_mode(Shell.StageInputMode.FOCUSED);
} }
this._keyFocusNotifyId = global.stage.connect('notify::key-focus', Lang.bind(this, this._onKeyFocusChanged)); this._grabFocusCount++;
this._focusWindowChangedId = metaDisplay.connect('notify::focus-window', Lang.bind(this, this._focusWindowChanged)); return true;
}, },
_releaseFocusGrab: function() { _releaseFocusGrab: function() {