[gnome-shell] window-clone: Fix signal connections when the window is closed



commit 00df20c6184b6ebf912151607c7503f9bf60326e
Author: Florian Müllner <fmuellner gnome org>
Date:   Thu Feb 3 19:25:59 2011 +0100

    window-clone: Fix signal connections when the window is closed
    
    Commit 91d8a32f25 let WindowClone forward the size-changed signal
    of the "real" window, disconnecting the signal handler when the
    clone is destroyed. In case the clone was destroyed due to the
    MetaWindowActor being closed, this results in a warning
    (gsignal.c:2392: instance `0x2a3fac0' has no handler with id `2955').
    
    Handle the case where the original window is destroyed before its
    clone.

 js/ui/workspace.js |   15 +++++++++++++--
 1 files changed, 13 insertions(+), 2 deletions(-)
---
diff --git a/js/ui/workspace.js b/js/ui/workspace.js
index cf3feb5..ebb3f1e 100644
--- a/js/ui/workspace.js
+++ b/js/ui/workspace.js
@@ -107,6 +107,8 @@ WindowClone.prototype = {
         this._sizeChangedId = this.realWindow.connect('size-changed', Lang.bind(this, function() {
             this.emit('size-changed');
         }));
+        this._realWindowDestroyId = this.realWindow.connect('destroy',
+            Lang.bind(this, this._disconnectRealWindowSignals));
 
         this.actor.connect('button-release-event',
                            Lang.bind(this, this._onButtonRelease));
@@ -160,10 +162,19 @@ WindowClone.prototype = {
         }
     },
 
-    _onDestroy: function() {
-        this.realWindow.disconnect(this._sizeChangedId);
+    _disconnectRealWindowSignals: function() {
+        if (this._sizeChangedId > 0)
+            this.realWindow.disconnect(this._sizeChangedId);
         this._sizeChangedId = 0;
 
+        if (this._realWindowDestroyId > 0)
+            this.realWindow.disconnect(this._realWindowDestroyId);
+        this._realWindowDestroyId = 0;
+    },
+
+    _onDestroy: function() {
+        this._disconnectRealWindowSignals();
+
         this.metaWindow._delegate = null;
         this.actor._delegate = null;
         if (this._zoomLightbox)



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