code: function checkSelectionChange()
  	{
  		try
  		{
  			// In IE, the "selectionchange" event may still get thrown when
  			// releasing the WYSIWYG mode, so we need to check it first.
  			var sel = this.getSelection();
  			if ( !sel || !sel.document.getWindow().$ )
  				return;
  
  			var firstElement = sel.getStartElement();
  			var currentPath = new CKEDITOR.dom.elementPath( firstElement );
  
  			if ( !currentPath.compare( this._.selectionPreviousPath ) )
  			{
  				this._.selectionPreviousPath = currentPath;
  				this.fire( 'selectionChange', { selection : sel, path : currentPath, element : firstElement } );
  			}
  		}
  		catch (e)
  		{}
  	}
docs: The selection change check basically saves the element parent tree of the current node and check it on successive requests. If there is any change on the tree, then the selectionChange event gets fired.