From ac132a2ce5d82aca5688e04f0ff3e4cd6f7b0863 Mon Sep 17 00:00:00 2001
From: ThorstenB <brehmt@gmail.com>
Date: Sat, 24 Mar 2012 10:45:42 +0100
Subject: [PATCH] Remove property listener when deleting dialog.

---
 Nasal/gui.nas | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/Nasal/gui.nas b/Nasal/gui.nas
index 06ff9708f..292f873c6 100644
--- a/Nasal/gui.nas
+++ b/Nasal/gui.nas
@@ -295,6 +295,7 @@ var Dialog = {
     new: func(prop, path = nil, name = nil) {
         var m = { parents: [Dialog] };
         m.state = 0;
+        m.listener = nil;
         if (path == nil) { # global dialog in $FG_ROOT/gui/dialogs/
             m.name = prop;
             m.prop = props.Node.new({ "dialog-name" : prop });
@@ -309,6 +310,11 @@ var Dialog = {
         }
         return Dialog.instance[m.name] = m;
     },
+    del: func
+    {
+        if (me.listener != nil)
+            removelistener(me.listener);
+    },
     # doesn't need to be called explicitly, but can be used to force a reload
     load: func {
         var state = me.state;
@@ -433,6 +439,9 @@ var OverlaySelector = {
     del: func {
         removelistener(me.listener);
         removelistener(me.reinit_listener);
+        # call inherited 'del'
+        me.parents = subvec(me.parents,1);
+        me.del();
     },
     rescan: func {
         me.data = [];
@@ -548,6 +557,9 @@ var FileSelector = {
         delete(me.instance, me.name);
         removelistener(me.cblistener);
         me.data.remove();
+        # call inherited 'del'
+        me.parents = subvec(me.parents,1);
+        me.del();
     },
 };
 
@@ -981,8 +993,8 @@ var showWeightDialog = func {
 
             # Simple code we'd like to use:
             #foreach(opt; w.getChildren("opt")) {
-            #	var ent = combo.addChild("value");
-            #	ent.prop().setValue(opt.getNode("name", 1).getValue());
+            #    var ent = combo.addChild("value");
+            #    ent.prop().setValue(opt.getNode("name", 1).getValue());
             #}
 
             # More complicated workaround to move the "current" item
@@ -1335,7 +1347,7 @@ var update_shader_settings = func() {
         setprop("/sim/rendering/shaders/urban",qualityLvl);
         setprop("/sim/rendering/shaders/water",qualityLvl);
         if (qualityLvl >= 3.0){
-	        qualityLvl = 3.0;
+            qualityLvl = 3.0;
         }
         setprop("/sim/rendering/shaders/model",qualityLvl);
         if (qualityLvl >= 1.0){