public boolean startDragComponent(Point p) {
		clearDragState();

		// which component is dragged ?
		for(int i = 0; i < getTabCount(); i++) {
			Rectangle tabbounds = getBoundsAt(i);
			if(tabbounds != null && tabbounds.contains(p)) {
				draggedDockable = (SingleDockableContainer) getComponentAt(i);
				if(i > 2 && i == getTabCount() - 1) {
					// workaround for a focus problem : when the JTabbedPane has focus on the last tab
					// and we start a drag (and drop outside the tabbedpane, there is a
					// nonblocking stacktrace due to a bad focusIndex in BasicTabbedPaneUI (method focusLost() of the Handler)
					KeyboardFocusManager.getCurrentKeyboardFocusManager().upFocusCycle();
					// by putting the focus up before the drop occurs, we ensure a good focusIndex is set
				}
				return true;
			}
		}
		// search for whole tab drag : look after last tab and in-between tabs
		Rectangle header = getBoundsAt(0);
		if (header == null) {
			return false;
		}
		header.x = 0;
		int lastTab = getTabCount() - 1;
		Rectangle lasttabbounds = getBoundsAt(lastTab);
		if (lasttabbounds == null) {
			return false;
		}
		header = header.union(lasttabbounds);

		Rectangle afterlast = new Rectangle(lasttabbounds.x + lasttabbounds.width, lasttabbounds.y, getX() + getWidth() - (lasttabbounds.x + lasttabbounds.width), lasttabbounds.height);
		if(afterlast.contains(p) || header.contains(p)) { // either after the last tab or between tabs
			this.isMultipleDrag = true;
			return true;
		}

		return false;
	}