| Index: runtime/observatory/lib/src/app/view_model.dart
|
| diff --git a/runtime/observatory/lib/src/app/view_model.dart b/runtime/observatory/lib/src/app/view_model.dart
|
| index 43e4d50b793281ac89fb1fd805b40439e69e9c5f..659091b5baf8737209fc9e6a1620c7f9fe9fc04a 100644
|
| --- a/runtime/observatory/lib/src/app/view_model.dart
|
| +++ b/runtime/observatory/lib/src/app/view_model.dart
|
| @@ -21,6 +21,8 @@ abstract class TableTreeRow extends Observable {
|
| final List<TableTreeRow> children = new List<TableTreeRow>();
|
| final List<TableCellElement> _tableColumns = new List<TableCellElement>();
|
| final List<DivElement> flexColumns = new List<DivElement>();
|
| + final List<StreamSubscription> listeners = new List<StreamSubscription>();
|
| +
|
| SpanElement _expander;
|
| TableRowElement _tr;
|
| TableRowElement get tr => _tr;
|
| @@ -67,10 +69,17 @@ abstract class TableTreeRow extends Observable {
|
| HtmlElement _makeExpander() {
|
| var expander = new SpanElement();
|
| expander.style.minWidth = '1.5em';
|
| - expander.onClick.listen(onClick);
|
| + listeners.add(expander.onClick.listen(onClick));
|
| return expander;
|
| }
|
|
|
| + void _cleanUpListeners() {
|
| + for (var i = 0; i < listeners.length; i++) {
|
| + listeners[i].cancel();
|
| + }
|
| + listeners.clear();
|
| + }
|
| +
|
| void onClick(Event e) {
|
| e.stopPropagation();
|
| tree.toggle(this);
|
| @@ -112,7 +121,7 @@ abstract class TableTreeRow extends Observable {
|
| _expander = _makeExpander();
|
| firstColumn.children.add(_expander);
|
| // Enable expansion by clicking anywhere on the first column.
|
| - firstColumn.onClick.listen(onClick);
|
| + listeners.add(firstColumn.onClick.listen(onClick));
|
| _updateExpanderView();
|
| }
|
|
|
| @@ -153,6 +162,7 @@ abstract class TableTreeRow extends Observable {
|
| if (flexColumns != null) {
|
| flexColumns.clear();
|
| }
|
| + _cleanUpListeners();
|
| }
|
| }
|
|
|
| @@ -166,6 +176,9 @@ class TableTree extends Observable {
|
|
|
| void clear() {
|
| tableBody.children.clear();
|
| + for (var i = 0; i < rows.length; i++) {
|
| + rows[i]._cleanUpListeners();
|
| + }
|
| rows.clear();
|
| }
|
|
|
|
|