/*\r
-Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.\r
For licensing, see LICENSE.html or http://ckeditor.com/license\r
*/\r
\r
editor.execCommand( commandName );\r
},\r
this);\r
+\r
+ this._.definiton =\r
+ {\r
+ panel:\r
+ {\r
+ className : editor.skinClass + ' cke_contextmenu',\r
+ attributes :\r
+ {\r
+ 'aria-label' : editor.lang.common.options\r
+ }\r
+ }\r
+ };\r
},\r
\r
_ :\r
}\r
else\r
{\r
- menu = this._.menu = new CKEDITOR.menu( editor );\r
+ menu = this._.menu = new CKEDITOR.menu( editor, this._.definiton );\r
menu.onClick = CKEDITOR.tools.bind( function( item )\r
{\r
- var noUnlock = true;\r
menu.hide();\r
\r
- if ( CKEDITOR.env.ie )\r
- menu.onEscape();\r
-\r
if ( item.onClick )\r
item.onClick();\r
else if ( item.command )\r
editor.execCommand( item.command );\r
\r
- noUnlock = false;\r
}, this );\r
\r
- menu.onEscape = function()\r
+ menu.onEscape = function( keystroke )\r
{\r
- editor.focus();\r
-\r
- if ( CKEDITOR.env.ie )\r
- editor.getSelection().unlock( true );\r
+ var parent = this.parent;\r
+ // 1. If it's sub-menu, restore the last focused item\r
+ // of upper level menu.\r
+ // 2. In case of a top-menu, close it.\r
+ if ( parent )\r
+ {\r
+ parent._.panel.hideChild();\r
+ // Restore parent block item focus.\r
+ var parentBlock = parent._.panel._.panel._.currentBlock,\r
+ parentFocusIndex = parentBlock._.focusIndex;\r
+ parentBlock._.markItem( parentFocusIndex );\r
+ }\r
+ else if ( keystroke == 27 )\r
+ {\r
+ this.hide();\r
+ editor.focus();\r
+ }\r
+ return false;\r
};\r
}\r
\r
var selection = this.editor.getSelection(),\r
element = selection && selection.getStartElement();\r
\r
- // Lock the selection in IE, so it can be restored when closing the\r
- // menu.\r
- if ( CKEDITOR.env.ie )\r
- selection.lock();\r
-\r
menu.onHide = CKEDITOR.tools.bind( function()\r
{\r
menu.onHide = null;\r
\r
if ( CKEDITOR.env.ie )\r
- editor.getSelection().unlock();\r
+ {\r
+ var selection = editor.getSelection();\r
+ selection && selection.unlock();\r
+ }\r
\r
this.onHide && this.onHide();\r
},\r
element.on( 'mousedown', function( evt )\r
{\r
evt = evt.data;\r
- if( evt.$.button != 2 )\r
+ if ( evt.$.button != 2 )\r
{\r
if ( evt.getKeystroke() == CKEDITOR.CTRL + 1 )\r
element.fire( 'contextmenu', evt );\r
\r
var target = evt.getTarget();\r
\r
- if( !contextMenuOverrideButton )\r
+ if ( !contextMenuOverrideButton )\r
{\r
var ownerDoc = target.getDocument();\r
contextMenuOverrideButton = ownerDoc.createElement( 'input' ) ;\r
( CKEDITOR.env.webkit ? holdCtrlKey : domEvent.$.ctrlKey || domEvent.$.metaKey ) )\r
return;\r
\r
+ // Selection will be unavailable after context menu shows up\r
+ // in IE, lock it now.\r
+ if ( CKEDITOR.env.ie )\r
+ {\r
+ var selection = this.editor.getSelection();\r
+ selection && selection.lock();\r
+ }\r
+\r
// Cancel the browser context menu.\r
domEvent.preventDefault();\r
\r
\r
CKEDITOR.tools.setTimeout( function()\r
{\r
- this._.onMenu( offsetParent, null, offsetX, offsetY );\r
+ this.show( offsetParent, null, offsetX, offsetY );\r
},\r
0, this );\r
},\r
this );\r
\r
- if( CKEDITOR.env.webkit )\r
+ if ( CKEDITOR.env.webkit )\r
{\r
var holdCtrlKey,\r
onKeyDown = function( event )\r