From 95e353fdb4067c54b677efcc7f204525f9c7a66d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Thu, 13 Jun 2019 16:57:38 +0000 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 (cherry picked from commit 2fd120162fe49bc85d7773435ac1412c512c5af4) --- 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 c8e5ceda7..64b458aa9 100644 --- a/js/ui/boxpointer.js +++ b/js/ui/boxpointer.js @@ -50,6 +50,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() { @@ -454,9 +463,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(); }