Index: _source/plugins/richcombo/plugin.js =================================================================== --- _source/plugins/richcombo/plugin.js (revision 3712) +++ _source/plugins/richcombo/plugin.js Thu Jul 23 16:01:40 CST 2009 @@ -49,7 +49,8 @@ { panelDefinition : panelDefinition, items : {}, - state : CKEDITOR.TRISTATE_OFF + state : CKEDITOR.TRISTATE_OFF, + value : '' }; }, @@ -279,18 +280,30 @@ setValue : function( value, text ) { - this._.value = value; - + if ( this._.value != value ) + { - var textElement = this.document.getById( 'cke_' + this.id + '_text' ); + var textElement = this.document.getById( 'cke_' + this.id + '_text' ); - if ( !value ) - { - text = this.label; - textElement.addClass( 'cke_inline_label' ); - } - else - textElement.removeClass( 'cke_inline_label' ); + if ( !value ) + { + text = this.label; + textElement.addClass( 'cke_inline_label' ); + } + else + textElement.removeClass( 'cke_inline_label' ); + // IE8 fluctuates the rendering layout when update inner HTML, + // do it off the DOM.(#4032) + if ( CKEDITOR.env.ie8 ) + { + var parent = textElement.getParent(); + textElement.remove(); + } - textElement.setHtml( typeof text != 'undefined' ? text : value ); + textElement.setHtml( typeof text != 'undefined' ? text : value ); + if ( CKEDITOR.env.ie8 ) + parent.append( textElement ); + } + + this._.value = value; }, getValue : function() Index: _source/plugins/button/plugin.js =================================================================== --- _source/plugins/button/plugin.js (revision 3788) +++ _source/plugins/button/plugin.js Thu Jul 23 16:01:40 CST 2009 @@ -199,15 +199,25 @@ { element.setState( state ); + if ( this._.state == CKEDITOR.TRISTATE_DISABLED + || state == CKEDITOR.TRISTATE_DISABLED ) + { - var htmlTitle = this.title, - unavailable = this._.editor.lang.common.unavailable, - labelElement = element.getChild( 1 ); + var htmlTitle = this.title, + unavailable = this._.editor.lang.common.unavailable, + labelElement = element.getChild( 1 ); - if ( state == CKEDITOR.TRISTATE_DISABLED ) - htmlTitle = unavailable.replace( '%1', this.title ); + if ( state == CKEDITOR.TRISTATE_DISABLED ) + htmlTitle = unavailable.replace( '%1', this.title ); + // IE8 fluctuates the rendering layout when update inner HTML, + // do it off the DOM.(#4032) + if ( CKEDITOR.env.ie8 ) + labelElement.remove(); - labelElement.setHtml( htmlTitle ); + labelElement.setHtml( htmlTitle ); + if ( CKEDITOR.env.ie8 ) + element.append( labelElement ); - } + } + } this._.state = state; } Index: CHANGES.html =================================================================== --- CHANGES.html (revision 3946) +++ CHANGES.html Thu Jul 23 16:04:00 CST 2009 @@ -162,6 +162,7 @@ ckeditor2.html test case.