public boolean startDragComponent(Point p) {
		// disable DnD for some cases : 
		// - child of a compound dockable, in hidden state
		// - child of a maximized compund dockable
		// - maximized dockable
		DockableState.Location targetLocation = target.getDockKey().getLocation();
		if(targetLocation == DockableState.Location.HIDDEN) {
			if(DockingUtilities.isChildOfCompoundDockable(target)) {
				// nested hidden dockables cannot be drag and dropped
				return false;
			}
		} else if(targetLocation == DockableState.Location.DOCKED) {
			boolean isChildOfMaximizedContainer = false;
			if(desktop != null) {
				Dockable max = desktop.getMaximizedDockable();
				if(max != null && max.getComponent().getParent().isAncestorOf(this)) {
					isChildOfMaximizedContainer = true;
				}
			}
			if(isChildOfMaximizedContainer) {
				return false;
			}
		} else if(targetLocation == DockableState.Location.MAXIMIZED) {
			return false;
		}

		// notify our listeners that drag has begun
		firePropertyChange(PROPERTY_DRAGGED, false, true);
		return true;
	}