Index: /CKEditor/branches/prototype/_source/plugins/image/dialogs/image.js
===================================================================
--- /CKEditor/branches/prototype/_source/plugins/image/dialogs/image.js	(revision 2813)
+++ /CKEditor/branches/prototype/_source/plugins/image/dialogs/image.js	(revision 2814)
@@ -61,4 +61,5 @@
 	{
 		var dialog = input.getDialog();
+		var value = input.getValue();
 
 		//Don't load before onShow.
@@ -66,5 +67,15 @@
 			return 0;
 
-		// Only if ratio locked
+		// Check value
+		var aMatch  =  value.match( regexSize );
+		if ( aMatch )
+		{
+			// % is allowed - > unlock ratio.
+			if ( aMatch[2] == '%' )
+				switchLockRatio( dialog, false );	// Unlock.
+			value = aMatch[1];
+		}
+
+		// Only if ratio is locked
 		if ( dialog.imageLockRatio )
 		{
@@ -72,5 +83,4 @@
 			if ( oImageOriginal && oImageOriginal.getCustomData( 'isReady' ) == 'true' )
 			{
-				var value = input.getValue();
 				if ( input.id == 'txtHeight' ){
 					dialog.allowOnChange = false;
@@ -194,7 +204,17 @@
 	}
 
-	var switchLockRatio = function( dialog )
+	var switchLockRatio = function( dialog, value )
 	{
-		dialog.imageLockRatio = !dialog.imageLockRatio;
+ 		if ( value != undefined )
+			dialog.imageLockRatio = value
+		else
+			dialog.imageLockRatio = !dialog.imageLockRatio;
+
+		var ratioButton = CKEDITOR.document.getById( 'btnLockSizes' );
+		if ( dialog.imageLockRatio )
+			ratioButton.removeClass( 'BtnUnlocked' );
+		else
+			ratioButton.addClass( 'BtnUnlocked' );
+
 		return dialog.imageLockRatio;
 	}
@@ -547,8 +567,5 @@
 					{
 						var btnLockSizes = CKEDITOR.document.getById( 'btnLockSizes' );
-						if ( switchLockRatio( this ) )
-							btnLockSizes.removeClass( 'BtnUnlocked' );
-						else
-							btnLockSizes.addClass( 'BtnUnlocked' );
+						switchLockRatio( this );
 					}, this );
 				ratioButton.on( 'mouseover', function()
