[gnome-shell] grabHelper: Fix ungrabbing properly
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] grabHelper: Fix ungrabbing properly
- Date: Mon, 20 Aug 2012 01:19:04 +0000 (UTC)
commit c3ae4542b2ffff8dd1ab79b6ce0931f9d6740f2b
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Sun Aug 19 21:12:46 2012 -0400
grabHelper: Fix ungrabbing properly
Make sure to account for modalCount properly, rather than just
tracking modalCount for the last actor on the stack. Additionally,
traverse the popped actors in the reverse order so that onUngrabbed
callbacks are called at the proper place in time.
js/ui/grabHelper.js | 31 +++++++++++++++----------------
1 files changed, 15 insertions(+), 16 deletions(-)
---
diff --git a/js/ui/grabHelper.js b/js/ui/grabHelper.js
index 780377f..a12e0ad 100644
--- a/js/ui/grabHelper.js
+++ b/js/ui/grabHelper.js
@@ -206,35 +206,34 @@ const GrabHelper = new Lang.Class({
if (grabStackIndex < 0)
return;
- let poppedGrab = this._grabStack[grabStackIndex];
let poppedGrabs = this._grabStack.slice(grabStackIndex);
- // "Pop" poppedGrab and everything after off by truncating the array.
+ // "Pop" all newly ungrabbed actors off the grab stack
+ // by truncating the array.
this._grabStack.length = grabStackIndex;
- let { modal: modal, actor: actor } = poppedGrab;
+ let wasModal = this._modalCount > 0;
+ for (let i = poppedGrabs.length - 1; i >= 0; i--) {
+ let poppedGrab = poppedGrabs[i];
- if (params.actor && (params.actor != actor))
- return;
+ if (poppedGrab.onUngrab)
+ poppedGrab.onUngrab();
+
+ if (poppedGrab.modal)
+ this._modalCount--;
+ }
let focus = global.stage.key_focus;
let hadFocus = focus && this._isWithinGrabbedActor(focus);
- for (let i = 0; i < poppedGrabs.length; i++) {
- if (poppedGrabs[i].onUngrab)
- poppedGrabs[i].onUngrab();
- }
-
// If we took away the last grab, ungrab ourselves.
if (this._grabStack.length == 0)
- this._fullUngrab();
-
- if (modal)
- this._modalCount--;
+ this._fullUngrab(wasModal);
+ let poppedGrab = poppedGrabs[0];
_navigateActor(poppedGrab.savedFocus, hadFocus);
},
- _fullUngrab: function() {
+ _fullUngrab: function(wasModal) {
global.stage.disconnect(this._capturedEventId);
this._capturedEventId = 0;
global.stage.disconnect(this._eventId);
@@ -247,7 +246,7 @@ const GrabHelper = new Lang.Class({
let prePopInputMode = global.stage_input_mode;
- if (this._modalCount > 0) {
+ if (wasModal) {
Main.popModal(this._owner);
global.sync_pointer();
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]