boxpointer: reposition after a size change
If the BoxPointer changes size (eg, when opening the "More" section of the network menu), reposition it to make sure it's still aligned correctly and still completely on-screen. This is not the right fix for this problem (and causes the menu to be drawn in the wrong position for one frame). The right fix would involve a ClutterConstraint, but that would be more invasive, and can happen post-3.0.0. https://bugzilla.gnome.org/show_bug.cgi?id=645647
This commit is contained in:
parent
31b12635d1
commit
475161f716
@ -2,6 +2,7 @@
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Lang = imports.lang;
|
||||
const Meta = imports.gi.Meta;
|
||||
const St = imports.gi.St;
|
||||
const Shell = imports.gi.Shell;
|
||||
|
||||
@ -176,6 +177,18 @@ BoxPointer.prototype = {
|
||||
break;
|
||||
}
|
||||
this.bin.allocate(childBox, flags);
|
||||
|
||||
if (this._sourceActor) {
|
||||
Meta.later_add (Meta.LaterType.BEFORE_REDRAW, Lang.bind(this,
|
||||
function () {
|
||||
// This won't cause a loop if _allocate() was
|
||||
// called as a result of repositioning, because in
|
||||
// that case _reposition() will set the same
|
||||
// coordinates again, which Clutter will just
|
||||
// ignore.
|
||||
this._reposition(this._sourceActor, this._gap, this._alignment);
|
||||
}));
|
||||
}
|
||||
},
|
||||
|
||||
_drawBorder: function(area) {
|
||||
@ -306,6 +319,14 @@ BoxPointer.prototype = {
|
||||
// so that we can query the correct size.
|
||||
this.actor.show();
|
||||
|
||||
this._sourceActor = sourceActor;
|
||||
this._gap = gap;
|
||||
this._alignment = alignment;
|
||||
|
||||
this._reposition(sourceActor, gap, alignment);
|
||||
},
|
||||
|
||||
_reposition: function(sourceActor, gap, alignment) {
|
||||
// Position correctly relative to the sourceActor
|
||||
let sourceNode = sourceActor.get_theme_node();
|
||||
let sourceContentBox = sourceNode.get_content_box(sourceActor.get_allocation_box());
|
||||
|
Loading…
Reference in New Issue
Block a user