Index: dojo-release-1.3.2-src/dijit/Tree.js =================================================================== --- dojo-release-1.3.2-src.orig/dijit/Tree.js 2009-11-10 02:35:32.000000000 -0800 +++ dojo-release-1.3.2-src/dijit/Tree.js 2009-11-10 02:35:37.000000000 -0800 @@ -367,6 +367,17 @@ this.selected = selected; }, + + _setContextMenuOpenedAttr: function(/*Boolean*/ open){ + // summary: + // Mark the label as ContextMenuOpened + var labelNode = this.labelNode; + //dijit.setWaiState(labelNode, "focused", open); + dojo.toggleClass(this.labelNode, "dijitTreeLabelContextMenuOpened", open); + + this.contextMenuOpened = open; + }, + _onMouseEnter: function(evt){ // summary: // Handler for onmouseenter event on a node @@ -1035,7 +1046,18 @@ // tags: // callback }, - + onContextMenu: function(/* dojo.data */ item, /*TreeNode*/ node){ + // summary: + // Callback when context menu is triggered (right click) + // tags: + // callback + }, + onContextMenuClose: function(/* dojo.data */ item, /*TreeNode*/ node){ + // summary: + // Convenience callback that fires when any item is blurred or selected. + // tags: + // callback + }, _getNextNode: function(node){ // summary: // Get next visible node @@ -1157,6 +1179,33 @@ } }, + _onContextMenu: function(/* Event */ e){ + // summary: + // User right clicks + dojo.stopEvent(e); + + var domElement = e.target; + var nodeWidget = dijit.getEnclosingWidget(domElement); + if(!nodeWidget || !nodeWidget.isTreeNode){ + return; + } + + nodeWidget.attr('contextMenuOpened', true); + this.onContextMenu(nodeWidget.item, nodeWidget); + + var _handles = []; + _handles.push(dojo.connect(nodeWidget, 'onClick', this, function(){ + dojo.forEach(_handles, dojo.disconnect); + this.onContextMenuClose(nodeWidget.item, nodeWidget); + nodeWidget.attr('contextMenuOpened', false); + })); + _handles.push(dojo.connect(nodeWidget, 'onBlur', this, function(){ + dojo.forEach(_handles, dojo.disconnect); + this.onContextMenuClose(nodeWidget.item, nodeWidget); + nodeWidget.attr('contextMenuOpened', false); + })); + }, + ////////////////// Miscellaneous functions //////////////// focusNode: function(/* _tree.Node */ node){ Index: dojo-release-1.3.2-src/dijit/templates/Tree.html =================================================================== --- dojo-release-1.3.2-src.orig/dijit/templates/Tree.html 2009-11-10 02:34:00.000000000 -0800 +++ dojo-release-1.3.2-src/dijit/templates/Tree.html 2009-11-10 02:35:37.000000000 -0800 @@ -1,3 +1,3 @@