From 135a06388657e4c4aab92a66e100b8a706c63f60 Mon Sep 17 00:00:00 2001 From: Maciej Bukowski Date: Mon, 11 Dec 2017 16:36:22 +0100 Subject: [PATCH] Added a 50ms timeout after focus before rendering. --- src/view/observer/focusobserver.js | 3 ++- tests/view/observer/focusobserver.js | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/view/observer/focusobserver.js b/src/view/observer/focusobserver.js index e2fd03fcb..f985d1d6b 100644 --- a/src/view/observer/focusobserver.js +++ b/src/view/observer/focusobserver.js @@ -35,7 +35,8 @@ export default class FocusObserver extends DomEventObserver { // We need to wait until `SelectionObserver` handle the event and then render. Otherwise rendering will // overwrite new DOM selection with selection from the view. // See https://github.com/ckeditor/ckeditor5-engine/issues/795 for more details. - this._renderTimeoutId = setTimeout( () => document.render(), 0 ); + // Long timeout is needed to solve #676 and https://github.com/ckeditor/ckeditor5-engine/issues/1157 issues. + this._renderTimeoutId = setTimeout( () => document.render(), 50 ); } ); document.on( 'blur', ( evt, data ) => { diff --git a/tests/view/observer/focusobserver.js b/tests/view/observer/focusobserver.js index f452a7533..5289f67fd 100644 --- a/tests/view/observer/focusobserver.js +++ b/tests/view/observer/focusobserver.js @@ -115,13 +115,13 @@ describe( 'FocusObserver', () => { expect( viewDocument.isFocused ).to.be.true; } ); - it( 'should delay rendering to the next iteration of event loop', () => { + it( 'should delay rendering by 50ms', () => { const renderSpy = sinon.spy( viewDocument, 'render' ); const clock = sinon.useFakeTimers(); observer.onDomEvent( { type: 'focus', target: domMain } ); sinon.assert.notCalled( renderSpy ); - clock.tick( 0 ); + clock.tick( 50 ); sinon.assert.called( renderSpy ); clock.restore(); @@ -134,7 +134,7 @@ describe( 'FocusObserver', () => { observer.onDomEvent( { type: 'focus', target: domMain } ); sinon.assert.notCalled( renderSpy ); observer.destroy(); - clock.tick( 0 ); + clock.tick( 50 ); sinon.assert.notCalled( renderSpy ); clock.restore();