Index: /CKEditor/trunk/CHANGES.html
===================================================================
--- /CKEditor/trunk/CHANGES.html	(revision 7363)
+++ /CKEditor/trunk/CHANGES.html	(revision 7364)
@@ -47,4 +47,5 @@
 		<li><a href="http://dev.ckeditor.com/ticket/8333">#8333</a> : Allow to close the dialogs with Esc key even if there's no Cancel button.</li>
 		<li><a href="http://dev.ckeditor.com/ticket/8644">#8644</a> : Missing variable declaration in the dialog plugin.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/8699">#8699</a> : Now focus is moved to clicked button in all browsers and back to colorpicker dialog opener (button) after dialog is closed.</li>
 	</ul>
 	<h3>
Index: /CKEditor/trunk/_source/plugins/clipboard/dialogs/paste.js
===================================================================
--- /CKEditor/trunk/_source/plugins/clipboard/dialogs/paste.js	(revision 7363)
+++ /CKEditor/trunk/_source/plugins/clipboard/dialogs/paste.js	(revision 7364)
@@ -46,5 +46,5 @@
 				case 9 :
 				case CKEDITOR.SHIFT + 9 :
-					this.changeFocus( true );
+					this.changeFocus( 1 );
 					processed = 1;
 			}
Index: /CKEditor/trunk/_source/plugins/dialog/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/dialog/plugin.js	(revision 7363)
+++ /CKEditor/trunk/_source/plugins/dialog/plugin.js	(revision 7364)
@@ -361,8 +361,9 @@
 		}
 
-		function changeFocus( forward )
-		{
-			var focusList = me._.focusList,
-				offset = forward ? 1 : -1;
+		function changeFocus( offset )
+		{
+			var focusList = me._.focusList;
+			offset = offset || 0;
+
 			if ( focusList.length < 1 )
 				return;
@@ -377,8 +378,8 @@
 			}
 			catch( e ){}
-
+		
 			var startIndex = ( current + offset + focusList.length ) % focusList.length,
 				currentIndex = startIndex;
-			while ( !focusList[ currentIndex ].isFocusable() )
+			while ( offset && !focusList[ currentIndex ].isFocusable() )
 			{
 				currentIndex = ( currentIndex + offset + focusList.length ) % focusList.length;
@@ -386,4 +387,5 @@
 					break;
 			}
+			
 			focusList[ currentIndex ].focus();
 
@@ -421,5 +423,5 @@
 				{
 					// Change the focus of inputs.
-					changeFocus( !shiftPressed );
+					changeFocus( shiftPressed ? -1 : 1 );
 				}
 
@@ -446,5 +448,5 @@
 				this._.tabBarMode = false;
 				this._.currentFocusIndex = -1;
-				changeFocus( true );
+				changeFocus( 1 );
 				processed = 1;
 			}
@@ -514,5 +516,5 @@
 					// Focus the first field in layout order.
 					else
-						changeFocus( true );
+						changeFocus( 1 );
 
 					/*
@@ -580,5 +582,5 @@
 							this._.tabBarMode = false;
 							this._.currentFocusIndex = -1;
-							changeFocus( true );
+							changeFocus( 1 );
 						}
 						evt.data.preventDefault();
Index: /CKEditor/trunk/_source/plugins/dialogui/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/dialogui/plugin.js	(revision 7363)
+++ /CKEditor/trunk/_source/plugins/dialogui/plugin.js	(revision 7364)
@@ -971,6 +971,12 @@
 						/** @ignore */
 						onClick : function( dialog, func )
-						{
-							this.on( 'click', func );
+						{	
+							this.on( 'click', function()
+								{
+									// Some browsers (Chrome, IE8, IE7 compat mode) don't move
+									// focus to clicked button. Force this.
+									this.getElement().focus();
+									func.apply( this, arguments );
+								});
 						}
 					}, true ),
Index: /CKEditor/trunk/_source/plugins/tabletools/dialogs/tableCell.js
===================================================================
--- /CKEditor/trunk/_source/plugins/tabletools/dialogs/tableCell.js	(revision 7363)
+++ /CKEditor/trunk/_source/plugins/tabletools/dialogs/tableCell.js	(revision 7364)
@@ -27,5 +27,5 @@
 				releaseHandlers( this );
 				callback( this, this._.parentDialog );
-				this._.parentDialog.changeFocus( true );
+				this._.parentDialog.changeFocus();
 			};
 			var onCancel = function()
