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:
parent
b03f7564e3
commit
50fec9e1f8
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user