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:
@ -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;
|
||||||
|
Reference in New Issue
Block a user