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 2fd120162f)
This commit is contained in:
Marco Trevisan (Treviño) 2019-06-13 16:57:38 +00:00
parent 7a6ed76a20
commit d416691896

View File

@ -61,6 +61,15 @@ var BoxPointer = new Lang.Class({
this._sourceAlignment = 0.5; this._sourceAlignment = 0.5;
this._capturedEventId = 0; this._capturedEventId = 0;
this._muteInput(); this._muteInput();
this.actor.connect('destroy', this._onDestroy.bind(this));
},
_onDestroy() {
if (this._sourceActorDestroyId) {
this._sourceActor.disconnect(this._sourceActorDestroyId);
delete this._sourceActorDestroyId;
}
}, },
get arrowSide() { get arrowSide() {
@ -424,9 +433,26 @@ var BoxPointer = new Lang.Class({
// so that we can query the correct size. // so that we can query the correct size.
this.actor.show(); this.actor.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; this._arrowAlignment = alignment;
if (!this._sourceActor)
return;
this._reposition(); this._reposition();
this._updateFlip(); this._updateFlip();
}, },