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.

https://bugzilla.gnome.org/show_bug.cgi?id=689109
This commit is contained in:
Jasper St. Pierre 2012-11-26 14:55:03 -05:00
parent 27ffad2148
commit 066e5cddb5

View File

@ -103,6 +103,16 @@ const GrabHelper = new Lang.Class({
return -1; return -1;
}, },
_actorInGrabStack: function(actor) {
while (actor) {
let idx = this._findStackIndex(actor);
if (idx >= 0)
return idx;
actor = actor.get_parent();
}
return -1;
},
isActorGrabbed: function(actor) { isActorGrabbed: function(actor) {
return this._findStackIndex(actor) >= 0; return this._findStackIndex(actor) >= 0;
}, },
@ -323,7 +333,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;