Skip to content

Commit b19c5a7

Browse files
author
Chris K
committed
DFL-3415 Exception on disconnect after using the event listeners panel
1 parent 8bd24b6 commit b19c5a7

File tree

5 files changed

+38
-23
lines changed

5 files changed

+38
-23
lines changed

src/build-application/build_application.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ window.app.profiles[window.app.profiles.HTTP_PROFILER].is_enabled = false;
8686

8787
window.app.build_application = function(on_services_created, on_services_enabled)
8888
{
89-
9089
var _find_compatible_version = function(version, version_list)
9190
{
9291
var
@@ -147,6 +146,8 @@ window.app.build_application = function(on_services_created, on_services_enabled
147146
builder = null,
148147
numbers = null;
149148

149+
window.messages.clear_session_listeners();
150+
150151
for (service_name in service_descriptions)
151152
{
152153
service = service_descriptions[service_name];
@@ -221,7 +222,7 @@ window.app.build_application = function(on_services_created, on_services_enabled
221222
new cls.ServiceBase();
222223
new ActionBroker();
223224

224-
window.messages.addListener("application-setup", report_usage);
225+
window.messages.addListener("application-setup", report_usage, true);
225226

226227
// global objects
227228
window.tagManager = window.tag_manager = new window.cls.TagManager();

src/scripts/messages.js

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -147,25 +147,29 @@
147147
*/
148148
var messages = new function()
149149
{
150-
var __listeners = {};
150+
var _listeners = {};
151+
var _permanent_listeners = {};
151152

152153
/**
153154
* Add a message listener
154155
* @param key {String} The name of the message to listen for
155156
* @param cb {function} The callback to call when message is received
156157
*/
157-
this.addListener = function(key, cb)
158+
this.addListener = function(key, cb, is_permanent_listener)
158159
{
159-
if (__listeners[key])
160+
var lists = [_listeners];
161+
if (is_permanent_listener)
162+
lists.push(_permanent_listeners);
163+
164+
for (var i = 0, listeners; listeners = lists[i]; i++)
160165
{
161-
if (__listeners[key].indexOf(cb) == -1)
166+
if (listeners[key])
162167
{
163-
__listeners[key].push(cb);
168+
if (listeners[key].indexOf(cb) == -1)
169+
listeners[key].push(cb);
164170
}
165-
}
166-
else
167-
{
168-
__listeners[key] = [cb];
171+
else
172+
listeners[key] = [cb];
169173
}
170174
};
171175

@@ -178,15 +182,16 @@ var messages = new function()
178182
*/
179183
this.removeListener = function(key, cb)
180184
{
181-
var cur = null, listeners = __listeners[key], i = 0;
182-
if (listeners)
185+
var lists = [_listeners, _permanent_listeners];
186+
for (var i = 0, listeners; listeners = lists[i]; i++)
183187
{
184-
for (; cur = listeners[i]; i++)
188+
var listeners_type = listeners[key];
189+
if (listeners_type)
185190
{
186-
if (cur == cb)
191+
for (var j = listeners_type.length - 1, cur; cur = listeners_type[j]; j--)
187192
{
188-
listeners.splice(i, 1);
189-
i--;
193+
if (cur == cb)
194+
listeners_type.splice(j, 1);
190195
}
191196
}
192197
}
@@ -203,7 +208,7 @@ var messages = new function()
203208
this.post = function(key, msg)
204209
{
205210
msg || (msg = {});
206-
var listeners = __listeners[key];
211+
var listeners = _listeners[key];
207212
msg.type = key;
208213
if (listeners)
209214
{
@@ -213,4 +218,13 @@ var messages = new function()
213218
}
214219
}
215220
}
221+
222+
this.clear_session_listeners = function()
223+
{
224+
_listeners = {};
225+
for (var key in _permanent_listeners)
226+
{
227+
_listeners[key] = _permanent_listeners[key].slice();
228+
}
229+
};
216230
}

src/ui-scripts/Switches.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ var SwitchesBase = function()
3939
}
4040
}.bind(this);
4141

42-
window.messages.addListener("setting-changed", this._on_setting_changed_bound);
42+
window.messages.addListener("setting-changed", this._on_setting_changed_bound, true);
4343
}
4444

4545

src/ui-scripts/actions/globalactionhandler.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@
400400
UIWindowBase.closeWindow('command_line');
401401
}
402402
}
403-
});
403+
}, true);
404404

405405
};
406406

src/ui-scripts/view.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ var ViewBase = new function()
257257
}
258258
}
259259

260-
window.messages.addListener("hide-view", onHideView);
260+
window.messages.addListener("hide-view", onHideView, true);
261261
window.messages.addListener("profile-enabled", function(msg)
262262
{
263263
_ignore_updates = false;
@@ -278,7 +278,7 @@ var ViewBase = new function()
278278
}
279279
}
280280
}
281-
});
281+
}, true);
282282

283283
window.messages.addListener("profile-disabled", function(msg)
284284
{
@@ -289,7 +289,7 @@ var ViewBase = new function()
289289
});
290290
// Updating the views will be done in the following "profile-enabled"
291291
// message.
292-
});
292+
}, true);
293293

294294
}
295295

0 commit comments

Comments
 (0)