/*package protected */boolean fireDockableStateWillChange(DockableStateWillChangeEvent e) {

		DockingDesktop desk = e.getFutureState().getDesktop();

		if(desk.getMaximizedDockable() != null) {
			// veto events coming from autohide and floating components if a component is maximized
			// @todo : this could be improved by disabling the dock and attach properties of
			// the remaining visible dockables to avoid having the user don't understand
			// why a button doesn't react.
			if(desk.getMaximizedDockable() != e.getCurrentState().getDockable()) {
				if(e.getFutureState().isDocked()) {
					if(e.getCurrentState().isHidden()) {
						return false; // refused
					} else if(e.getCurrentState().isFloating()) {
						return false;
					}
				}
			}
		}

		// dispatch events and listen to vetoes

		for(int i = 0; i < dockableStateWillChangeListeners.size(); i++) {
			DockableStateWillChangeListener listener = dockableStateWillChangeListeners.get(i);
			listener.dockableStateWillChange(e);
			if(! e.isAccepted()) { // stop as soon as the operation is cancelled
				return false;
			}
		}
		return true;
	}