i got same issue and fixed it. i don't think this could help you, it's too late. but i like to share it with all of you guys.
the whole idea is based on :
when drag target is dropped on overlapped drop zones, the e argument contains the drop zone div(or it's child div at any depth)
1.set an unique id for each drop target. i name it dropId, you can name it as you wish, just don't conflict with existing property.
first drop zone
Code:
var sdGrid = Ext.getCmp('sdGridSdPanel');
// set this unique id dropId = courseDDGroupSdPanel
sdGrid.body.dom.dropId = 'courseDDGroupSdPanel';
new Ext.dd.DropTarget(sdGrid.body.dom,{
ddGroup : 'courseDDGroup',
notifyDrop : function(ddSource, e, data){
//check if this is the dropzone on top
//this id must match sdGrid.body.dom.dropId
if(isDropTarget(e.target,'courseDDGroupSdPanel')){
//do things u need to do
return true;
}
}
});
second drop zone
Code:
var courseTab = Ext.getCmp('courseTab');
courseTab.body.dom.dropId = 'courseDDGroupCoursePanel';
new Ext.dd.DropTarget(courseTab.body.dom,{
ddGroup : 'courseDDGroup',
notifyDrop : function(ddSource, e, data){
if(isDropTarget(e.target, 'courseDDGroupCoursePanel')){
// implement your logic here
}
}
});
notice: these two drop zones have same ddGroup name.
of course, you have to set your drap target with same ddGroup name as well.
2. check if this is the top drop zone
when a drop zone is assigned to a root element, all of this element's childs(at any depth) can listen notifyDrop.
so usually, the target element is a child element of the root element, rather than the root element. u have to check target element's parent, and parent's parent, and...so on. until it's null, or dropId doesn't match.
Code:
function isDropTarget(node, dropId){
if(!node){
return false;
}
if(node.dropId == dropId){
return true;
}else{
return isDropTarget(node.parentElement, dropId);
}
}
3. most important thing:
find this line in ext-all-debug.js : var target = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(id);
in 3.2.1 which is line 20419.
change it to: var target = Ext.dd.DragDropMgr.getDDById(id);
the reason is the cachedTarget might give you same target twice. i enforce it find target every time.
hope this can help.