[gnome-shell] Handle changes in window position for workspace thumbnails
- From: Owen Taylor <otaylor src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] Handle changes in window position for workspace thumbnails
- Date: Wed, 9 Feb 2011 01:01:37 +0000 (UTC)
commit 7496a7ff3ba8e5a9c26c23db91dadb014981b77c
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.
https://bugzilla.gnome.org/show_bug.cgi?id=640996
js/ui/workspaceThumbnail.js | 29 ++++++++++++++++++++++++++---
1 files changed, 26 insertions(+), 3 deletions(-)
---
diff --git a/js/ui/workspaceThumbnail.js b/js/ui/workspaceThumbnail.js
index e4bd6bb..7e46a28 100644
--- a/js/ui/workspaceThumbnail.js
+++ b/js/ui/workspaceThumbnail.js
@@ -21,13 +21,17 @@ function WindowClone(realWindow) {
WindowClone.prototype = {
_init : function(realWindow) {
this.actor = new Clutter.Clone({ source: realWindow.get_texture(),
- reactive: true,
- x: realWindow.x,
- y: realWindow.y });
+ reactive: true });
this.actor._delegate = this;
this.realWindow = realWindow;
this.metaWindow = realWindow.meta_window;
+ this._positionChangedId = this.realWindow.connect('position-changed',
+ Lang.bind(this, this._onPositionChanged));
+ this._realWindowDestroyedId = this.realWindow.connect('destroy',
+ Lang.bind(this, this._disconnectRealWindowSignals));
+ this._onPositionChanged();
+
this.actor.connect('button-release-event',
Lang.bind(this, this._onButtonRelease));
@@ -56,7 +60,26 @@ WindowClone.prototype = {
this.actor.destroy();
},
+ _onPositionChanged: function() {
+ let rect = this.metaWindow.get_outer_rect();
+ this.actor.set_position(this.realWindow.x, this.realWindow.y);
+ },
+
+ _disconnectRealWindowSignals: function() {
+ if (this._positionChangedId != 0) {
+ this.realWindow.disconnect(this._positionChangedId);
+ this._positionChangedId = 0;
+ }
+
+ if (this._realWindowDestroyedId != 0) {
+ this.realWindow.disconnect(this._realWindowDestroyedId);
+ this._realWindowDestroyedId = 0;
+ }
+ },
+
_onDestroy: function() {
+ this._disconnectRealWindowSignals();
+
this.actor._delegate = null;
if (this.inDrag) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]