diff --git a/dockinginfonode/src/main/java/fr/soleil/docking/infonode/view/InfoNodeView.java b/dockinginfonode/src/main/java/fr/soleil/docking/infonode/view/InfoNodeView.java index 998b6c4c1346f806d0abf8562a82a83249f3bba9..6a4cabda37c346db47c5112ba86cf0f48d806578 100644 --- a/dockinginfonode/src/main/java/fr/soleil/docking/infonode/view/InfoNodeView.java +++ b/dockinginfonode/src/main/java/fr/soleil/docking/infonode/view/InfoNodeView.java @@ -17,6 +17,7 @@ import net.infonode.docking.AbstractTabWindow; import net.infonode.docking.DockingWindow; import net.infonode.docking.DockingWindowListener; import net.infonode.docking.OperationAbortedException; +import net.infonode.docking.RootWindow; import net.infonode.docking.View; import fr.soleil.docking.view.IView; import fr.soleil.docking.view.IViewListener; @@ -29,7 +30,7 @@ import fr.soleil.docking.view.IViewListener; */ public class InfoNodeView extends View implements IView { - private static final long serialVersionUID = 7028633985357675678L; + private static final long serialVersionUID = 1934485690520898657L; protected Object id; @@ -194,12 +195,34 @@ public class InfoNodeView extends View implements IView { @Override public void setClosable(boolean closable) { - if (getWindowProperties() != null) { - getWindowProperties().getTabProperties().getNormalButtonProperties().getCloseButtonProperties() + setClosable(this, closable, true); + } + + /** + * Methods that allow or not a {@link DockingWindow} to be closable. If the {@link DockingWindow} is set as not + * closable, all its ancestors will be set as unclosable too. + * + * @param window The {@link DockingWindow} to set closable/unclosable + * @param closable Whether the {@link DockingWindow} should be closable + * @param updateRootWindowToo Whether to update root window properties too. Will have effect only if + * <code>closable</code> is <code>false</code>. + */ + protected static void setClosable(DockingWindow window, boolean closable, boolean updateRootWindowToo) { + if ((window != null) && (window.getWindowProperties() != null)) { + window.getWindowProperties().getTabProperties().getNormalButtonProperties().getCloseButtonProperties() .setVisible(closable); - getWindowProperties().getTabProperties().getHighlightedButtonProperties().getCloseButtonProperties() + window.getWindowProperties().getTabProperties().getHighlightedButtonProperties().getCloseButtonProperties() .setVisible(closable); - getWindowProperties().setCloseEnabled(closable); + window.getWindowProperties().setCloseEnabled(closable); + if (!closable) { + if (updateRootWindowToo) { + RootWindow rootWindow = window.getRootWindow(); + if ((rootWindow != null) && (rootWindow.getRootWindowProperties() != null)) { + rootWindow.getRootWindowProperties().getDockingWindowProperties().setCloseEnabled(closable); + } + } + setClosable(window.getWindowParent(), closable, false); + } } }