workspace: don't use multiple later calls to propagate actualGeometry calls

Meta laters are invoked in reverse order of registration, so
having multiple laters propagating the geometry cause all but the
first one in the frame (which is usually wrong) to be ignored.
Instead, queue at most one later call, and use the last set geometry
in the callback.

https://bugzilla.gnome.org/show_bug.cgi?id=700853
This commit is contained in:
Giovanni Campagna 2013-05-22 19:27:17 +02:00
parent 6ce470b9b2
commit 727e4c0b37

View File

@ -989,10 +989,17 @@ const Workspace = new Lang.Class({
setActualGeometry: function(geom) { setActualGeometry: function(geom) {
this._actualGeometry = geom; this._actualGeometry = geom;
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function() { if (this._actualGeometryLater)
return;
this._actualGeometryLater = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function() {
let geom = this._actualGeometry;
this._dropRect.set_position(geom.x, geom.y); this._dropRect.set_position(geom.x, geom.y);
this._dropRect.set_size(geom.width, geom.height); this._dropRect.set_size(geom.width, geom.height);
this._updateWindowPositions(WindowPositionFlags.NONE); this._updateWindowPositions(WindowPositionFlags.NONE);
this._actualGeometryLater = 0;
return false; return false;
})); }));
}, },