boolean traverseItem(boolean next) {
		Control[] children = parent._getChildren();
		int length = children.length;
		int index = 0;
		while (index < length) {
			if (children[index] == this)
				break;
			index++;
		}
		/*
		 * It is possible (but unlikely), that application code could have
		 * disposed the widget in focus in or out events. Ensure that a disposed
		 * widget is not accessed.
		 */
		if (index == length)
			return false;
		int start = index, offset = (next) ? 1 : -1;
		while ((index = (index + offset + length) % length) != start) {
			Control child = children[index];
			if (!child.isDisposed() && child.isTabItem()) {
				if (child.setTabItemFocus(next))
					return true;
			}
		}
		return false;
	}