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:
parent
27ffad2148
commit
066e5cddb5
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user