From 3a8b279e43bcf8b49dad11ff7af81cc7dfa91848 Mon Sep 17 00:00:00 2001 From: nightwing Date: Wed, 12 Nov 2014 18:40:22 +0400 Subject: [PATCH] update fold widgets in mixed modes when tokenizer state changes --- lib/ace/edit_session/folding.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/lib/ace/edit_session/folding.js b/lib/ace/edit_session/folding.js index 0274cd58..a86c27ce 100644 --- a/lib/ace/edit_session/folding.js +++ b/lib/ace/edit_session/folding.js @@ -696,7 +696,8 @@ function Folding() { this.$foldMode = foldMode; - this.removeListener('change', this.$updateFoldWidgets); + this.off('change', this.$updateFoldWidgets); + this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets); this._emit("changeAnnotation"); if (!foldMode || this.$foldStyle == "manual") { @@ -709,8 +710,9 @@ function Folding() { this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle); this.$updateFoldWidgets = this.updateFoldWidgets.bind(this); + this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this); this.on('change', this.$updateFoldWidgets); - + this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets); }; this.getParentFoldRangeData = function (row, ignoreCurrent) { @@ -843,7 +845,13 @@ function Folding() { this.foldWidgets.splice.apply(this.foldWidgets, args); } }; - + this.tokenizerUpdateFoldWidgets = function(e) { + var rows = e.data; + if (rows.first != rows.last) { + if (this.foldWidgets.length > rows.first) + this.foldWidgets.splice(rows.first, this.foldWidgets.length); + } + } } exports.Folding = Folding;