From 477f28a6bd3e44c070eb470ed1d6800ea073a292 Mon Sep 17 00:00:00 2001 From: Giovanni Campagna Date: Sat, 8 Feb 2014 21:44:58 +0100 Subject: [PATCH] LayoutManager: untrack actors that are destroyed If an actor is destroyed, calling get_transformed_size()/position() can return bogus values and trigger JS exceptions. This can happen if a tracked actor comes from an extension (such as classic mode's window-list) and that extension is deactivated. https://bugzilla.gnome.org/show_bug.cgi?id=723661 --- js/ui/layout.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/js/ui/layout.js b/js/ui/layout.js index 0609ff2e0..6f7bcebc5 100644 --- a/js/ui/layout.js +++ b/js/ui/layout.js @@ -834,6 +834,8 @@ const LayoutManager = new Lang.Class({ Lang.bind(this, this._queueUpdateRegions)); actorData.allocationId = actor.connect('notify::allocation', Lang.bind(this, this._queueUpdateRegions)); + actorData.destroyId = actor.connect('destroy', + Lang.bind(this, this._untrackActor)); // Note that destroying actor will unset its parent, so we don't // need to connect to 'destroy' too. @@ -852,6 +854,7 @@ const LayoutManager = new Lang.Class({ actor.disconnect(actorData.visibleId); actor.disconnect(actorData.allocationId); actor.disconnect(actorData.parentSetId); + actor.disconnect(actorData.destroyId); this._queueUpdateRegions(); },