From a1042e0d949f234c4f62cac8b46e8ee3d945ea16 Mon Sep 17 00:00:00 2001 From: nightwing Date: Sun, 5 Oct 2014 22:02:14 +0400 Subject: [PATCH] fix reattaching linewidgets to editor --- demo/kitchen-sink/inline_editor.js | 3 --- demo/kitchen-sink/layout.js | 1 - lib/ace/line_widgets.js | 24 ++++++++++++------------ 3 files changed, 12 insertions(+), 16 deletions(-) diff --git a/demo/kitchen-sink/inline_editor.js b/demo/kitchen-sink/inline_editor.js index 0c050aed..3f814c21 100644 --- a/demo/kitchen-sink/inline_editor.js +++ b/demo/kitchen-sink/inline_editor.js @@ -96,9 +96,6 @@ require("ace/commands/default_commands").commands.push({ editor.keyBinding.addKeyboardHandler(kb); inlineEditor.keyBinding.addKeyboardHandler(kb); - editor.on("changeSession", function(e) { - w.el.parentNode && w.el.parentNode.removeChild(w.el); - }); inlineEditor.setTheme("ace/theme/solarized_light"); } }); diff --git a/demo/kitchen-sink/layout.js b/demo/kitchen-sink/layout.js index e43915bb..1332eef3 100644 --- a/demo/kitchen-sink/layout.js +++ b/demo/kitchen-sink/layout.js @@ -116,7 +116,6 @@ exports.singleLineEditor = function(el) { renderer.setStyle("ace_one-line"); var editor = new Editor(renderer); - new MultiSelect(editor); editor.session.setUndoManager(new UndoManager()); editor.setShowPrintMargin(false); diff --git a/lib/ace/line_widgets.js b/lib/ace/line_widgets.js index 9e384e0e..d4080b53 100644 --- a/lib/ace/line_widgets.js +++ b/lib/ace/line_widgets.js @@ -45,9 +45,10 @@ function LineWidgets(session) { this.renderWidgets = this.renderWidgets.bind(this); this.measureWidgets = this.measureWidgets.bind(this); this.session._changedWidgets = []; - this.detach = this.detach.bind(this); + this.$onChangeEditor = this.$onChangeEditor.bind(this); this.session.on("change", this.updateOnChange); + this.session.on("changeEditor", this.$onChangeEditor); } (function() { @@ -73,8 +74,12 @@ function LineWidgets(session) { return screenRows; }; + this.$onChangeEditor = function(e) { + this.attach(e.editor); + }; + this.attach = function(editor) { - if (editor.widgetManager && editor.widgetManager != this) + if (editor && editor.widgetManager && editor.widgetManager != this) editor.widgetManager.detach(); if (this.editor == editor) @@ -83,21 +88,16 @@ function LineWidgets(session) { this.detach(); this.editor = editor; - this.editor.on("changeSession", this.detach); - - editor.widgetManager = this; - - editor.renderer.on("beforeRender", this.measureWidgets); - editor.renderer.on("afterRender", this.renderWidgets); + if (editor) { + editor.widgetManager = this; + editor.renderer.on("beforeRender", this.measureWidgets); + editor.renderer.on("afterRender", this.renderWidgets); + } }; this.detach = function(e) { - if (e && e.session == this.session) - return; // sometimes attach can be called before setSession var editor = this.editor; if (!editor) return; - - editor.off("changeSession", this.detach); this.editor = null; editor.widgetManager = null;