From 87ce301faaeaf04ba254a6a2a3026b3135118fac Mon Sep 17 00:00:00 2001 From: "Owen W. Taylor" Date: Wed, 2 Feb 2011 22:54:33 -0500 Subject: [PATCH] Handle changes in window position for workspace thumbnails Connect to the 'position-set' signal of MetaWindowActor and move actors when the source windows move. --- js/ui/workspaceThumbnail.js | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/js/ui/workspaceThumbnail.js b/js/ui/workspaceThumbnail.js index 3d21d2ca2..47460fa94 100644 --- a/js/ui/workspaceThumbnail.js +++ b/js/ui/workspaceThumbnail.js @@ -22,14 +22,16 @@ WindowClone.prototype = { _init : function(realWindow) { this.actor = new Clutter.Clone({ source: realWindow.get_texture(), clip_to_allocation: true, - reactive: true, - x: realWindow.x, - y: realWindow.y }); + reactive: true }); this.actor._delegate = this; this.realWindow = realWindow; this.metaWindow = realWindow.meta_window; this.metaWindow._delegate = this; + this._positionChangedId = this.realWindow.connect('position-changed', + Lang.bind(this, this._onPositionChanged)); + this._onPositionChanged(); + this.actor.connect('button-release-event', Lang.bind(this, this._onButtonRelease)); @@ -58,10 +60,20 @@ WindowClone.prototype = { this.actor.destroy(); }, + _onPositionChanged: function() { + let rect = this.metaWindow.get_outer_rect(); + this.actor.set_position(this.realWindow.x, this.realWindow.y); + }, + _onDestroy: function() { this.metaWindow._delegate = null; this.actor._delegate = null; + if (this._positionChangedId != 0) { + this.realWindow.disconnect(this._positionChangedId); + this._positionChangedId = 0; + } + if (this.inDrag) { this.emit('drag-end'); this.inDrag = false; @@ -286,8 +298,8 @@ WorkspaceThumbnail.prototype = { time); return true; } else if (source.shellWorkspaceLaunch) { - this.metaWorkspace.activate(time); - source.shellWorkspaceLaunch(); + source.shellWorkspaceLaunch({ workspace: this.metaWorkspace, + timestamp: time }); return true; }