Index: _source/plugins/toolbar/plugin.js =================================================================== --- _source/plugins/toolbar/plugin.js (revision 4166) +++ _source/plugins/toolbar/plugin.js (working copy) @@ -59,12 +59,18 @@ { var itemKeystroke = function( item, keystroke ) { + function isDisabled( item ) + { + return item.id && CKEDITOR.document.getById( item.id ).hasClass( 'cke_disabled' ); + } switch ( keystroke ) { case 39 : // RIGHT-ARROW case 9 : // TAB // Look for the next item in the toolbar. - while ( ( item = item.next || ( item.toolbar.next && item.toolbar.next.items[ 0 ] ) ) && !item.focus ) + // Jump to next toolbar if this one finishes. + // Skip non-focusable items (eg separators) and disabled ones also. + while ( ( item = item.next || ( item.toolbar.next && item.toolbar.next.items[ 0 ] ) ) && ( !item.focus || isDisabled( item ) ) ) { /*jsl:pass*/ } // If available, just focus it, otherwise focus the @@ -79,7 +85,9 @@ case 37 : // LEFT-ARROW case CKEDITOR.SHIFT + 9 : // SHIFT + TAB // Look for the previous item in the toolbar. - while ( ( item = item.previous || ( item.toolbar.previous && item.toolbar.previous.items[ item.toolbar.previous.items.length - 1 ] ) ) && !item.focus ) + // Jump to previous toolbar if this one finishes. + // Skip non-focusable items (eg separators) and disabled ones also. + while ( ( item = item.previous || ( item.toolbar.previous && item.toolbar.previous.items[ item.toolbar.previous.items.length - 1 ] ) ) && ( !item.focus || isDisabled( item ) ) ) { /*jsl:pass*/ } // If available, just focus it, otherwise focus the Index: CHANGES.html =================================================================== --- CHANGES.html (revision 4166) +++ CHANGES.html (working copy) @@ -48,7 +48,8 @@