[204969] XML Schema Editor: UI not properly updated when creating a sequence within a complexType in the top-level Design pane and then drilling down
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt/org/eclipse/wst/xsd/ui/internal/adt/design/DesignViewGraphicalViewer.java b/bundles/org.eclipse.wst.xsd.ui/src-adt/org/eclipse/wst/xsd/ui/internal/adt/design/DesignViewGraphicalViewer.java
index f102eff..879104c 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt/org/eclipse/wst/xsd/ui/internal/adt/design/DesignViewGraphicalViewer.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt/org/eclipse/wst/xsd/ui/internal/adt/design/DesignViewGraphicalViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2007 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -90,11 +90,37 @@
         {
           setInput((IADTObject)selectedObject);              
         }
-        else if (!((IGraphElement)selectedObject).isFocusAllowed() && (event.getSource() instanceof ADTContentOutlinePage))
+        else if (!((IGraphElement)selectedObject).isFocusAllowed())
         {
+          // We encountered an object that is not a valid input to the graph viewer
+          // Now find the top container that can be a valid input
           IADTObject obj = ((IGraphElement)selectedObject).getTopContainer();
-          if (obj != null)
-            setInput (obj);
+          if (event.getSource() instanceof ADTContentOutlinePage)
+          {
+            // In this case, if the selection is originated from the outline, we should 
+            // change the inputs
+            if (obj != null)
+              setInput (obj);
+          }
+          else if (event.getSource() instanceof CommonSelectionManager)
+          {
+            // In this case, if the selection is originated from some action, ie. adding
+            // a new element, we should change the input only if the current input is the model
+            // otherwise, inputs will change unexpectedly!!
+            if (getInput() instanceof IModel) 
+            {
+              if (obj != null)
+                setInput (obj);
+            }
+          }
+          else if (event.getSource() instanceof org.eclipse.jface.viewers.IPostSelectionProvider )
+          {
+            // In this case, if the selection is originated from the source viewer
+            // we should change the input regardless.  Test is for multiple levels
+            // of anonymous types
+            if (obj != null)
+              setInput (obj);
+          }
         }
         if (selectedObject instanceof IField) 
         {