Index: /CKEditor/branches/features/contenteditable/_source/plugins/specialchar/dialogs/specialchar.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/specialchar/dialogs/specialchar.js	(revision 5597)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/specialchar/dialogs/specialchar.js	(revision 5598)
@@ -1,3 +1,3 @@
-﻿/*
+/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -15,6 +15,9 @@
 	var insertSpecialChar = function ( specialChar )
 	{
-		var selection = editor.getSelection(),
-			ranges = selection.getRanges( true ),
+		var selection = editor.getSelection();
+		if ( selection.getCommonAncestor().isReadOnly())
+				return;
+
+		var ranges = selection.getRanges(),
 			range, textNode;
 
Index: /CKEditor/branches/features/contenteditable/_source/plugins/wysiwygarea/plugin.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/wysiwygarea/plugin.js	(revision 5597)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/wysiwygarea/plugin.js	(revision 5598)
@@ -17,4 +17,9 @@
 	var emptyParagraphRegexp = /\s*<(p|div|address|h\d|center)[^>]*>\s*(?:<br[^>]*>|&nbsp;|\u00A0|&#160;)?\s*(:?<\/\1>)?\s*(?=$|<\/body>)/gi;
 
+	function checkReadOnly( selection )
+	{
+		return selection.getCommonAncestor().isReadOnly();
+	}
+
 	function onInsertHtml( evt )
 	{
@@ -22,8 +27,12 @@
 		{
 			this.focus();
+
+			var selection = this.getSelection();
+			if ( checkReadOnly( selection ) )
+				return;
+
+			var data = evt.data
 			this.fire( 'saveSnapshot' );
 
-			var selection = this.getSelection(),
-				data = evt.data;
 
 			if ( this.dataProcessor )
@@ -60,15 +69,15 @@
 		{
 			this.focus();
+
+			var selection = this.getSelection();
+			if ( checkReadOnly( selection ) )
+				return;
+
 			this.fire( 'saveSnapshot' );
 
-			var element = evt.data,
+			var ranges = selection.getRanges(),
+				element = evt.data,
 				elementName = element.getName(),
 				isBlock = CKEDITOR.dtd.$block[ elementName ];
-
-			var selection = this.getSelection(),
-				ranges = selection.getRanges( true );
-
-			if ( !ranges.length )
-				return;
 
 			var selIsLocked = selection.isLocked;
