dnd: Add drag actors to the stage before querying their sizes

Drag actors may be St widgets, which require that they're added
to the stage before they have a size.

https://bugzilla.gnome.org/show_bug.cgi?id=684888
This commit is contained in:
Jasper St. Pierre 2012-09-26 12:42:56 -03:00
parent 9fb6510135
commit e6fd2bed4d

View File

@ -235,6 +235,10 @@ const _Draggable = new Lang.Class({
if (this.actor._delegate && this.actor._delegate.getDragActor) { if (this.actor._delegate && this.actor._delegate.getDragActor) {
this._dragActor = this.actor._delegate.getDragActor(this._dragStartX, this._dragStartY); this._dragActor = this.actor._delegate.getDragActor(this._dragStartX, this._dragStartY);
this._dragActor.reparent(Main.uiGroup);
this._dragActor.raise_top();
Shell.util_set_hidden_from_pick(this._dragActor, true);
// Drag actor does not always have to be the same as actor. For example drag actor // Drag actor does not always have to be the same as actor. For example drag actor
// can be an image that's part of the actor. So to perform "snap back" correctly we need // can be an image that's part of the actor. So to perform "snap back" correctly we need
// to know what was the drag actor source. // to know what was the drag actor source.
@ -263,6 +267,10 @@ const _Draggable = new Lang.Class({
this._dragOffsetY = this._dragActor.y - this._dragStartY; this._dragOffsetY = this._dragActor.y - this._dragStartY;
} else { } else {
this._dragActor = this.actor; this._dragActor = this.actor;
this._dragActor.reparent(Main.uiGroup);
this._dragActor.raise_top();
Shell.util_set_hidden_from_pick(this._dragActor, true);
this._dragActorSource = undefined; this._dragActorSource = undefined;
this._dragOrigParent = this.actor.get_parent(); this._dragOrigParent = this.actor.get_parent();
this._dragOrigX = this._dragActor.x; this._dragOrigX = this._dragActor.x;
@ -280,10 +288,6 @@ const _Draggable = new Lang.Class({
scaledHeight / this.actor.height); scaledHeight / this.actor.height);
} }
this._dragActor.reparent(Main.uiGroup);
this._dragActor.raise_top();
Shell.util_set_hidden_from_pick(this._dragActor, true);
this._dragOrigOpacity = this._dragActor.opacity; this._dragOrigOpacity = this._dragActor.opacity;
if (this._dragActorOpacity != undefined) if (this._dragActorOpacity != undefined)
this._dragActor.opacity = this._dragActorOpacity; this._dragActor.opacity = this._dragActorOpacity;