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.
This commit is contained in:
Florian Müllner 2011-02-03 19:25:59 +01:00
parent 7637afe7dc
commit 00df20c618

View File

@ -107,6 +107,8 @@ WindowClone.prototype = {
this._sizeChangedId = this.realWindow.connect('size-changed', Lang.bind(this, function() { this._sizeChangedId = this.realWindow.connect('size-changed', Lang.bind(this, function() {
this.emit('size-changed'); this.emit('size-changed');
})); }));
this._realWindowDestroyId = this.realWindow.connect('destroy',
Lang.bind(this, this._disconnectRealWindowSignals));
this.actor.connect('button-release-event', this.actor.connect('button-release-event',
Lang.bind(this, this._onButtonRelease)); Lang.bind(this, this._onButtonRelease));
@ -160,10 +162,19 @@ WindowClone.prototype = {
} }
}, },
_onDestroy: function() { _disconnectRealWindowSignals: function() {
this.realWindow.disconnect(this._sizeChangedId); if (this._sizeChangedId > 0)
this.realWindow.disconnect(this._sizeChangedId);
this._sizeChangedId = 0; this._sizeChangedId = 0;
if (this._realWindowDestroyId > 0)
this.realWindow.disconnect(this._realWindowDestroyId);
this._realWindowDestroyId = 0;
},
_onDestroy: function() {
this._disconnectRealWindowSignals();
this.metaWindow._delegate = null; this.metaWindow._delegate = null;
this.actor._delegate = null; this.actor._delegate = null;
if (this._zoomLightbox) if (this._zoomLightbox)