Index: /CKEditor/branches/features/adobeair/_source/plugins/adobeair/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/adobeair/plugin.js	(revision 4403)
+++ /CKEditor/branches/features/adobeair/_source/plugins/adobeair/plugin.js	(revision 4404)
@@ -8,56 +8,108 @@
 	init : function( editor )
 	{
+		function convertInlineHandlers( container, eventNameList )
+		{
+			for ( var i = 0; i < eventNameList.length; i++ )
+			{
+				( function( eventName ){
+
+					var targetList =
+						 container.eachChildWithAttribute( 'on'+ eventName, function( item )
+					{
+						item.on( eventName, function( evt )
+						{
+							var inlineEventHandler = item.getAttribute( 'on' + eventName ),
+								callFunc = /callFunction\(([^)]+)\)/.exec( inlineEventHandler ),
+								callFuncArgs = callFunc &&  callFunc[ 1 ].split( ',' ),
+								preventDefault = /return false;/.test( inlineEventHandler );
+
+
+							if ( callFuncArgs )
+							{
+								var nums = callFuncArgs.length,
+									argName;
+								for ( var i = 0; i < nums; i++ )
+								{
+									callFuncArgs[ i ] = argName
+										= CKEDITOR.tools.trim( callFuncArgs[ i ] );
+
+									// String form param.
+									var strPattern = argName.match( /^(["'])([^"']*?)\1$/ );
+									if ( strPattern )
+									{
+										callFuncArgs[ i ] = strPattern[ 2 ];
+										continue;
+									}
+
+									// Integer form param.
+									if ( argName.match( /\d+/ ) )
+									{
+										callFuncArgs[ i ] = parseInt( argName );
+										continue;
+									}
+
+									switch( argName )
+									{
+										case 'this' :
+											callFuncArgs[ i ] = item.$;
+											break;
+										case 'event' :
+											callFuncArgs[ i ] = evt.data.$;
+											break;
+										case 'null' :
+											callFuncArgs [ i ] = null;
+											break;
+									}
+								}
+								CKEDITOR.tools.callFunction.apply( window, callFuncArgs );
+							}
+
+							if( preventDefault )
+								evt.data.preventDefault();
+
+						} );
+					} );
+
+				} )( eventNameList[ i ] );
+			}
+		}
+
 		if( CKEDITOR.env.air )
+		{
 			editor.on( 'uiReady', function()
 			{
-				( function ( container, eventNameList )
-				{
-					for ( var i = 0; i < eventNameList.length; i++ )
+				convertInlineHandlers( editor.container, [ 'click', 'keydown', 'mousedown', 'keypress' ] );
+			} );
+
+			var richCombo = CKEDITOR.ui.richCombo,
+				panelButton = CKEDITOR.ui.panelButton,
+				menu = CKEDITOR.menu,
+				pane;
+
+			function onPanelUIReady( evt )
+			{
+				var floatPanel = evt.data._.panel,
+					panel = floatPanel._.panel,
+					holder;
+
+				( function(){
+
+					// Off-line dom event is not supported in AIR, waiting for
+					// panel iframe loaded.
+					if ( !panel.isLoaded )
 					{
-						( function( eventName ){
+						setTimeout( arguments.callee, 30 );
+						return;
+					}
+					holder = panel._.holder;
+					convertInlineHandlers( holder, [ 'click', 'keydown', 'mousedown', 'keypress' ] );
+				})();
 
-							var targetList =
-								 container.eachChildWithAttribute( 'on'+ eventName, function( item )
-							{
-								item.on( eventName, function( evt )
-								{
-									var inlineEventHandler = item.getAttribute( 'on' + eventName ),
-										callFunc = /callFunction\(([^)]+)\)/.exec( inlineEventHandler ),
-										callFuncArgs = callFunc && callFunc[ 1 ].split( ',' ),
-										preventDefault = /return false;/.test( inlineEventHandler );
+			}
 
-									if ( callFuncArgs )
-									{
-										var nums = callFuncArgs.length,
-											argName;
-										for ( var i = 0; i < nums; i++ )
-										{
-											switch( argName = CKEDITOR.tools.trim( callFuncArgs[ i ] ) )
-											{
-												case 'this' :
-													callFuncArgs[ i ] = item.$;
-													break;
-												case 'event' :
-													callFuncArgs[ i ] = evt.data.$;
-													break;
-												case 'null' :
-													callFuncArgs [ i ] = null;
-													break;
-											}
-										}
-
-										CKEDITOR.tools.callFunction.apply( window, callFuncArgs );
-									}
-
-									if( preventDefault )
-										evt.data.preventDefault();
-
-								} );
-							} );
-
-						} )( eventNameList[ i ] );
-					}
-				} )( editor.container, [ 'click', 'keydown', 'mousedown', 'keypress' ] );
-			} );
+			richCombo && richCombo.on( 'uiReady', onPanelUIReady );
+			panelButton && panelButton.on( 'uiReady', onPanelUIReady );
+			menu && menu.on( 'uiReady', onPanelUIReady );
+		}
 	}
 });
Index: /CKEditor/branches/features/adobeair/_source/plugins/colorbutton/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/colorbutton/plugin.js	(revision 4403)
+++ /CKEditor/branches/features/adobeair/_source/plugins/colorbutton/plugin.js	(revision 4404)
@@ -41,4 +41,6 @@
 						block.element.addClass( 'cke_colorblock' );
 						block.element.setHtml( renderColors( panel, type ) );
+
+						CKEDITOR.ui.panelButton.fire( 'uiReady', this );
 
 						var keys = block.keys;
Index: /CKEditor/branches/features/adobeair/_source/plugins/floatpanel/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/floatpanel/plugin.js	(revision 4403)
+++ /CKEditor/branches/features/adobeair/_source/plugins/floatpanel/plugin.js	(revision 4404)
@@ -203,7 +203,10 @@
 							});
 
-						if ( block.autoSize )
+						var panelLoad = CKEDITOR.tools.bind( function ()
 						{
-							function setHeight()
+							if ( this.onShow )
+								this.onShow.call( this );
+
+							if ( block.autoSize )
 							{
 								var target = element.getFirst();
@@ -221,13 +224,11 @@
 								panel._.currentBlock.element.setStyle( 'display', 'none' ).removeStyle( 'display' );
 							}
-
-							if ( panel.isLoaded )
-								setHeight();
 							else
-								panel.onLoad = setHeight;
-						}
-						else
-							element.getFirst().removeStyle( 'height' );
-
+								element.getFirst().removeStyle( 'height' );
+
+							isShowing = false;
+						} , this );
+
+						panel.isLoaded ? panelLoad() : panel.onLoad = panelLoad;
 						// Set the IFrame focus, so the blur event gets fired.
 						CKEDITOR.tools.setTimeout( function()
@@ -256,8 +257,4 @@
 				this.visible = 1;
 
-				if ( this.onShow )
-					this.onShow.call( this );
-
-				isShowing = false;
 			},
 
Index: /CKEditor/branches/features/adobeair/_source/plugins/font/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/font/plugin.js	(revision 4403)
+++ /CKEditor/branches/features/adobeair/_source/plugins/font/plugin.js	(revision 4404)
@@ -52,4 +52,5 @@
 						this.add( name, '<span style="font-' + styleType + ':' + values[ i ] + '">' + name + '</span>', name );
 					}
+					this.commit();
 				},
 
Index: /CKEditor/branches/features/adobeair/_source/plugins/format/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/format/plugin.js	(revision 4403)
+++ /CKEditor/branches/features/adobeair/_source/plugins/format/plugin.js	(revision 4404)
@@ -49,4 +49,5 @@
 						this.add( tag, '<' + tag + '>' + label + '</' + tag + '>', label );
 					}
+					this.commit();
 				},
 
Index: /CKEditor/branches/features/adobeair/_source/plugins/listblock/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/listblock/plugin.js	(revision 4403)
+++ /CKEditor/branches/features/adobeair/_source/plugins/listblock/plugin.js	(revision 4404)
@@ -1,3 +1,3 @@
-﻿/*
+/*
 Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
Index: /CKEditor/branches/features/adobeair/_source/plugins/menu/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/menu/plugin.js	(revision 4403)
+++ /CKEditor/branches/features/adobeair/_source/plugins/menu/plugin.js	(revision 4404)
@@ -152,7 +152,17 @@
 					this );
 
+					panel.onShow = function ()
+					{
+						var panelDoc = element.getDocument();
+						panelDoc.getBody().setStyle( 'overflow', 'hidden' );
+						panelDoc.getElementsByTag( 'html' ).getItem( 0 ).setStyle( 'overflow', 'hidden' );
+						editor.fire( 'menuShow', [ panel ] );
+					}
+
 					// Create an autosize block inside the panel.
 					var block = panel.addBlock( this.id );
 					block.autoSize = true;
+					element = this._.element = block.element;
+					element.addClass( editor.skinClass );
 
 					var keys = block.keys;
@@ -164,10 +174,4 @@
 					keys[ 39 ]	= 'click';					// ARROW-RIGHT
 
-					element = this._.element = block.element;
-					element.addClass( editor.skinClass );
-
-					var elementDoc = element.getDocument();
-					elementDoc.getBody().setStyle( 'overflow', 'hidden' );
-					elementDoc.getElementsByTag( 'html' ).getItem( 0 ).setStyle( 'overflow', 'hidden' );
 
 					this._.itemOverFn = CKEDITOR.tools.addFunction( function( index )
@@ -228,4 +232,6 @@
 				element.setHtml( output.join( '' ) );
 
+				CKEDITOR.menu.fire( 'uiReady', this );
+
 				// Show the panel.
 				if ( this.parent )
@@ -233,6 +239,4 @@
 				else
 					panel.showBlock( this.id, offsetParent, corner, offsetX, offsetY );
-				
-				editor.fire( 'menuShow', [ panel ] );
 			},
 
@@ -243,4 +247,5 @@
 		}
 	});
+	CKEDITOR.event.implementOn( CKEDITOR.menu, true );
 
 	function sortItems( items )
Index: /CKEditor/branches/features/adobeair/_source/plugins/panelbutton/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/panelbutton/plugin.js	(revision 4403)
+++ /CKEditor/branches/features/adobeair/_source/plugins/panelbutton/plugin.js	(revision 4404)
@@ -137,4 +137,4 @@
 		}
 	});
-
+	CKEDITOR.event.implementOn( CKEDITOR.ui.panelButton, true );
 })();
Index: /CKEditor/branches/features/adobeair/_source/plugins/richcombo/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/richcombo/plugin.js	(revision 4403)
+++ /CKEditor/branches/features/adobeair/_source/plugins/richcombo/plugin.js	(revision 4404)
@@ -1,3 +1,3 @@
-﻿/*
+/*
 Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -99,16 +99,4 @@
 						return;
 					}
-
-					if ( !_.committed )
-					{
-						_.list.commit();
-						_.committed = 1;
-					}
-
-					var value = this.getValue();
-					if ( value )
-						_.list.mark( value );
-					else
-						_.list.unmarkAll();
 
 					_.panel.showBlock( this.id, new CKEDITOR.dom.element( $element ), 4 );
@@ -215,4 +203,10 @@
 			panel.onShow = function()
 				{
+					var value = me.getValue();
+					if ( value )
+						me._.list.mark( value );
+					else
+						me._.list.unmarkAll();
+
 					if ( me.className )
 						this.element.getFirst().addClass( me.className + '_panel' );
@@ -265,20 +259,13 @@
 				};
 
+			panel.getBlock( this.id ).onHide = function()
+				{
+					me._.on = 0;
+					me.setState( CKEDITOR.TRISTATE_OFF );
+				};
+
 			this._.panel = panel;
 			this._.list = list;
-
-			panel.getBlock( this.id ).onHide = function()
-				{
-					me._.on = 0;
-					me.setState( CKEDITOR.TRISTATE_OFF );
-				};
-
-			if ( this.init )
-			{
-				var innerPanel = panel._.panel;
-				innerPanel.isLoaded ?
-				 this.init()
-				 : innerPanel.onLoad = CKEDITOR.tools.bind( this.init, this );
-			}
+			this.init && this.init();
 		},
 
@@ -343,4 +330,5 @@
 		{
 			this._.list.commit();
+			CKEDITOR.ui.richCombo.fire( 'uiReady', this );
 		},
 
@@ -356,4 +344,5 @@
 	}
 });
+CKEDITOR.event.implementOn( CKEDITOR.ui.richCombo, true );
 
 CKEDITOR.ui.prototype.addRichCombo = function( name, definition )
Index: /CKEditor/branches/features/adobeair/_source/plugins/stylescombo/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/stylescombo/plugin.js	(revision 4403)
+++ /CKEditor/branches/features/adobeair/_source/plugins/stylescombo/plugin.js	(revision 4404)
@@ -88,5 +88,4 @@
 								combo.commit();
 
-								combo.onOpen();
 							});
 					},
