refs #33

adding conditional feature to pause CSS/Layout for PartStack children

Change-Id: I44199344e062fe9b58a25be7d99b6e8b8f2fe005
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/widget/WLayoutedWidgetImpl.java b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/widget/WLayoutedWidgetImpl.java
index 6febb05..7e0fd49 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/widget/WLayoutedWidgetImpl.java
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/widget/WLayoutedWidgetImpl.java
@@ -12,24 +12,21 @@
 
 import java.util.List;
 
-import javafx.scene.Node;
-import javafx.scene.input.DragEvent;
-import javafx.scene.input.MouseDragEvent;
-import javafx.scene.layout.Pane;
-import javafx.scene.layout.StackPane;
-
 import javax.inject.Inject;
 import javax.inject.Named;
 
 import org.eclipse.e4.core.di.annotations.Optional;
 import org.eclipse.e4.ui.model.application.ui.MUIElement;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.e4.ui.model.application.ui.basic.MPartStack;
 import org.eclipse.e4.ui.workbench.UIEvents;
 import org.eclipse.e4.ui.workbench.modeling.EModelService;
 import org.eclipse.fx.core.log.Log;
 import org.eclipse.fx.core.log.Logger;
 import org.eclipse.fx.ui.controls.dnd.EFXDragEvent;
-import org.eclipse.fx.ui.workbench.renderers.base.services.DnDService;
+import org.eclipse.fx.ui.panes.LazyStackPane;
 import org.eclipse.fx.ui.workbench.renderers.base.services.DnDFeedbackService;
+import org.eclipse.fx.ui.workbench.renderers.base.services.DnDService;
 import org.eclipse.fx.ui.workbench.renderers.base.widget.WCallback;
 import org.eclipse.fx.ui.workbench.renderers.base.widget.WLayoutedWidget;
 import org.eclipse.fx.ui.workbench.renderers.fx.internal.DnDSupport;
@@ -38,6 +35,11 @@
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 
+import javafx.scene.Node;
+import javafx.scene.input.DragEvent;
+import javafx.scene.input.MouseDragEvent;
+import javafx.scene.layout.Pane;
+
 /**
  * Base implementation for all {@link WLayoutedWidget} implementations
  *
@@ -54,6 +56,8 @@
 	private double weight = 10;
 	private WCallback<@NonNull DropData, @Nullable Void> dropCallback;
 
+	private static final boolean OPTIMIZED_STACK_LAYOUT = Boolean.getBoolean("efxclipse.experimental.optstack"); //$NON-NLS-1$
+
 	@Inject
 	@NonNull
 	DnDFeedbackService feedbackService;
@@ -144,15 +148,35 @@
 		return this.dropCallback;
 	}
 
+	private boolean stateCheck(LazyStackPane.CheckType type) {
+		if( ! OPTIMIZED_STACK_LAYOUT ) {
+			return true;
+		}
+
+		if( getDomElement() instanceof MPart ) {
+			MPart p = (MPart) getDomElement();
+			if( p != null && ((MUIElement)p.getParent()) instanceof MPartStack ) {
+				if( p.getParent().getSelectedElement() == p ) {
+					return true;
+				} else {
+					return false;
+				}
+			} else {
+				return true;
+			}
+		} else {
+			return true;
+		}
+	}
+
 	/**
 	 * Create the static layout pane
 	 *
 	 * @return the layout pane
 	 */
-	@SuppressWarnings("static-method")
 	@NonNull
 	protected Pane createStaticPane() {
-		return new StackPane();
+		return new LazyStackPane(this::stateCheck);
 	}
 
 	@Override