windowManager: Generalize translation values

Currently, the translation values are set with the assumption that
one of the actors represents a fullscreen window. In order to
generalize it for any size change transition, we can simply swap
the monitor rect with the source or target rect as appropriate,
and translate the actor from the target to the source position by
subtracting the former and adding the latter.

https://bugzilla.gnome.org/show_bug.cgi?id=766685
This commit is contained in:
Alessandro Bono 2017-05-20 16:34:35 +02:00
parent 7090592477
commit 0dca5e513b

View File

@ -1331,13 +1331,11 @@ const WindowManager = new Lang.Class({
actorClone.set_size(oldFrameRect.width, oldFrameRect.height);
Main.uiGroup.add_actor(actorClone);
let rect = change == Meta.SizeChange.FULLSCREEN ? oldFrameRect : null;
if (this._clearFullscreenInfo(actor))
this._shellwm.completed_size_change(actor);
actor.__fullscreenInfo = { clone: actorClone,
oldRect: rect };
oldRect: oldFrameRect };
},
_sizeChangedWindow: function(shellwm, actor) {
@ -1365,15 +1363,9 @@ const WindowManager = new Lang.Class({
transition: 'easeOutQuad'
});
let monitor = Main.layoutManager.monitors[actor.meta_window.get_monitor()];
let sourceRect = actor.__fullscreenInfo.oldRect;
if (sourceRect) {
actor.translation_x = sourceRect.x - monitor.x;
actor.translation_y = sourceRect.y - monitor.y;
} else {
actor.translation_x = -(targetRect.x - monitor.x);
actor.translation_y = -(targetRect.y - monitor.y);
}
actor.translation_x = -targetRect.x + sourceRect.x;
actor.translation_y = -targetRect.y + sourceRect.y;
// Now set scale the actor to size it as the clone.
actor.scale_x = 1 / scaleX;