From 2fd120162fe49bc85d7773435ac1412c512c5af4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Thu, 13 Jun 2019 18:57:38 +0200 Subject: [PATCH] boxpointer: Unset the sourceActor on destruction A boxpointer sourceActor could be destroyed before the boxpointer itself. In such case, unset the sourceActor reference, connecting to 'destroy' signal. Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/1295 https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/576 --- js/ui/boxpointer.js | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/js/ui/boxpointer.js b/js/ui/boxpointer.js index 188e8386f..5615614e1 100644 --- a/js/ui/boxpointer.js +++ b/js/ui/boxpointer.js @@ -48,6 +48,15 @@ var BoxPointer = GObject.registerClass({ this._sourceAlignment = 0.5; this._capturedEventId = 0; this._muteInput(); + + this.connect('destroy', this._onDestroy.bind(this)); + } + + _onDestroy() { + if (this._sourceActorDestroyId) { + this._sourceActor.disconnect(this._sourceActorDestroyId); + delete this._sourceActorDestroyId; + } } get arrowSide() { @@ -452,9 +461,26 @@ var BoxPointer = GObject.registerClass({ // so that we can query the correct size. this.show(); - this._sourceActor = sourceActor; + if (!this._sourceActor || sourceActor != this._sourceActor) { + if (this._sourceActorDestroyId) { + this._sourceActor.disconnect(this._sourceActorDestroyId); + delete this._sourceActorDestroyId; + } + + this._sourceActor = sourceActor; + + if (this._sourceActor) { + this._sourceActorDestroyId = this._sourceActor.connect('destroy', () => { + this._sourceActor = null; + delete this._sourceActorDestroyId; + }) + } + } this._arrowAlignment = alignment; + if (!this._sourceActor) + return; + this._reposition(); this._updateFlip(); }