[gnome-shell/workspace-thumbnails: 14/14] Handle changes in window position for workspace thumbnails



commit 87ce301faaeaf04ba254a6a2a3026b3135118fac
Author: Owen W. Taylor <otaylor fishsoup net>
Date:   Wed Feb 2 22:54:33 2011 -0500

    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 files changed, 17 insertions(+), 5 deletions(-)
---
diff --git a/js/ui/workspaceThumbnail.js b/js/ui/workspaceThumbnail.js
index 3d21d2c..47460fa 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;
         }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]