From e546c8e4fffe67b918761617291e15ccae23544a Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke <marijnh@gmail.com> Date: Wed, 16 Apr 2014 12:34:44 +0200 Subject: [PATCH] Be more accurate about which handlers to fire change events for I.e. don't fire for a handler that wasn't registered when the change happened. --- lib/codemirror.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/codemirror.js b/lib/codemirror.js index 9a47f3aa4..33b981159 100644 --- a/lib/codemirror.js +++ b/lib/codemirror.js @@ -1955,11 +1955,8 @@ delayedCallbacks = null; } // Fire change events, and delayed event handlers - if (op.changeObjs) { - for (var i = 0; i < op.changeObjs.length; i++) - signal(cm, "change", cm, op.changeObjs[i]); + if (op.changeObjs) signal(cm, "changes", cm, op.changeObjs); - } if (op.cursorActivity) signal(cm, "cursorActivity", cm, op.origin); if (delayed) for (var i = 0; i < delayed.length; ++i) delayed[i](); } @@ -3481,13 +3478,17 @@ else regChange(cm, from.line, to.line + 1, lendiff); - if (hasHandler(cm, "change") || hasHandler(cm, "changes")) - (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push({ + var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change"); + if (changeHandler || changesHandler) { + var obj = { from: from, to: to, text: change.text, removed: change.removed, origin: change.origin - }); + }; + if (changeHandler) signalLater(cm, "change", cm, obj); + if (changesHandler) (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); + } } function replaceRange(doc, code, from, to, origin) { -- GitLab