[gnome-shell] workspacesDisplay: Disconnect MetaLater and parent signals on destroy
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] workspacesDisplay: Disconnect MetaLater and parent signals on destroy
- Date: Mon, 9 Sep 2019 19:38:20 +0000 (UTC)
commit 8656102182da8f8d52c0cea7495aff1b43c3bf21
Author: Marco Trevisan (Treviño) <mail 3v1n0 net>
Date: Mon Aug 12 16:25:48 2019 +0200
workspacesDisplay: Disconnect MetaLater and parent signals on destroy
When the WorkspacesDisplay actor is destroyed we should remove the
ongoing later and parent widget connections to avoid accessing an
invalid object on callback.
https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/700
js/ui/workspacesView.js | 22 +++++++++++++++++++++-
1 file changed, 21 insertions(+), 1 deletion(-)
---
diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js
index af490e94aa..8c1ba81a6d 100644
--- a/js/ui/workspacesView.js
+++ b/js/ui/workspacesView.js
@@ -524,6 +524,22 @@ var WorkspacesDisplay = class {
this._keyPressEventId = 0;
this._fullGeometry = null;
+
+ this.actor.connect('destroy', this._onDestroy.bind(this));
+ }
+
+ _onDestroy() {
+ if (this._notifyOpacityId) {
+ let parent = this.actor.get_parent();
+ if (parent)
+ parent.disconnect(this._notifyOpacityId);
+ this._notifyOpacityId = 0;
+ }
+
+ if (this._parentSetLater) {
+ Meta.later_remove(this._parentSetLater);
+ this._parentSetLater = 0;
+ }
}
_onPan(action) {
@@ -717,7 +733,11 @@ var WorkspacesDisplay = class {
oldParent.disconnect(this._notifyOpacityId);
this._notifyOpacityId = 0;
- Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => {
+ if (this._parentSetLater)
+ return;
+
+ this._parentSetLater = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => {
+ this._parentSetLater = 0;
let newParent = this.actor.get_parent();
if (!newParent)
return;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]