[gnome-shell/gnome-3-32] boxpointer: Unset the sourceActor on destruction
- From: Marco Trevisan <marcotrevi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/gnome-3-32] boxpointer: Unset the sourceActor on destruction
- Date: Mon, 17 Jun 2019 23:20:57 +0000 (UTC)
commit 95e353fdb4067c54b677efcc7f204525f9c7a66d
Author: Marco Trevisan (TreviƱo) <mail 3v1n0 net>
Date: Thu Jun 13 16:57:38 2019 +0000
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();
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]