grabHelper: Drop to the actor clicked on

This is necessary for child popups in menus, e.g. while in a combo box,
clicking outside of the user menu should drop the entire menu, but
clicking on the user menu itself should only drop the combo box.
This commit is contained in:
Jasper St. Pierre 2012-11-26 14:55:03 -05:00
parent b03f7564e3
commit 50fec9e1f8

View File

@ -76,6 +76,18 @@ const GrabHelper = new Lang.Class({
} }
}, },
_actorInGrabStack: function(actor) {
while (actor) {
for (let i = 0; i < this._grabStack.length; i++) {
let grab = this._grabStack[i];
if (grab.actor == actor)
return i;
}
actor = actor.get_parent();
}
return -1;
},
_isWithinGrabbedActor: function(actor) { _isWithinGrabbedActor: function(actor) {
let currentActor = this.currentGrab.actor; let currentActor = this.currentGrab.actor;
while (actor) { while (actor) {
@ -330,7 +342,8 @@ const GrabHelper = new Lang.Class({
// which should be a release event. // which should be a release event.
if (press) if (press)
this._ignoreRelease = true; this._ignoreRelease = true;
this.ungrab({ actor: this._grabStack[0].actor }); let i = this._actorInGrabStack(event.get_source()) + 1;
this.ungrab({ actor: this._grabStack[i].actor });
} }
return this._modalCount > 0; return this._modalCount > 0;