dnd: Don't override fixed position if actor had no fixed position before

Properly handle drag actors which are not allocated using a fixed
position and disable the fixed position we were using to move the actor
around before we reparent it again to its original parent.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1310
This commit is contained in:
Jonas Dreßler 2020-06-09 18:29:02 +02:00
parent 0db41a3773
commit b2eeda9b46

View File

@ -375,8 +375,9 @@ var _Draggable = class _Draggable {
this._dragActorSource = undefined; this._dragActorSource = undefined;
this._dragOrigParent = this.actor.get_parent(); this._dragOrigParent = this.actor.get_parent();
this._dragOrigX = this._dragActor.x; this._dragActorHadFixedPos = this._dragActor.fixed_position_set;
this._dragOrigY = this._dragActor.y; this._dragOrigX = this._dragActor.allocation.x1;
this._dragOrigY = this._dragActor.allocation.y1;
this._dragOrigScale = this._dragActor.scale_x; this._dragOrigScale = this._dragActor.scale_x;
// Set the actor's scale such that it will keep the same // Set the actor's scale such that it will keep the same
@ -718,7 +719,10 @@ var _Draggable = class _Draggable {
Main.uiGroup.remove_child(this._dragActor); Main.uiGroup.remove_child(this._dragActor);
this._dragOrigParent.add_actor(this._dragActor); this._dragOrigParent.add_actor(this._dragActor);
dragActor.set_scale(this._dragOrigScale, this._dragOrigScale); dragActor.set_scale(this._dragOrigScale, this._dragOrigScale);
if (this._dragActorHadFixedPos)
dragActor.set_position(this._dragOrigX, this._dragOrigY); dragActor.set_position(this._dragOrigX, this._dragOrigY);
else
dragActor.fixed_position_set = false;
} else { } else {
dragActor.destroy(); dragActor.destroy();
} }