Index: _source/plugins/selection/plugin.js =================================================================== --- _source/plugins/selection/plugin.js (revision 3770) +++ _source/plugins/selection/plugin.js Thu Jun 25 19:12:08 CST 2009 @@ -537,6 +537,19 @@ boundaryInfo = getBoundaryInformation( nativeRange ); range.setEnd( new CKEDITOR.dom.node( boundaryInfo.container ), boundaryInfo.offset ); + // Prevent caret anchor at the end edge of paragraph followed by a text node, + // because the cursor will be 'visually' at next line of text.(#3807) + var endBlock, nextTextNode; + if ( ( ( endBlock = range.endContainer ) && endBlock.is && endBlock.isBlockBoundary() ) + && range.endOffset == endBlock.getChildren().count() + && ( ( nextTextNode = endBlock.getNext() ) && nextTextNode.type == CKEDITOR.NODE_TEXT ) ) + { + // Cheat IE to have the cursor anchored inside next text node. + var dummy = range.document.createText( '\ufeff' ); + dummy.insertBefore( nextTextNode ); + setTimeout( function(){ dummy.remove(); }, 0 ); + } + return ( cache.ranges = [ range ] ); } else if ( type == CKEDITOR.SELECTION_ELEMENT ) Index: CHANGES.html =================================================================== --- CHANGES.html (revision 3773) +++ CHANGES.html Thu Jun 25 19:17:06 CST 2009 @@ -55,6 +55,9 @@