[gnome-shell] LayoutManager: untrack actors that are destroyed



commit 477f28a6bd3e44c070eb470ed1d6800ea073a292
Author: Giovanni Campagna <gcampagna src gnome org>
Date:   Sat Feb 8 21:44:58 2014 +0100

    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 files changed, 3 insertions(+), 0 deletions(-)
---
diff --git a/js/ui/layout.js b/js/ui/layout.js
index 0609ff2..6f7bceb 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();
     },


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]