Merge pull request #2916 from ludovic-henry/fix-40306
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / MenuItemCollection.cs
index 85fd3c882b9a52e2e6bb103c5f42b418d25a8992..1bcb60e5ccc44964d48e59b7a5d158825ae64511 100644 (file)
@@ -28,7 +28,6 @@
 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
 //
 
-#if NET_2_0
 
 using System;
 using System.Web.UI;
@@ -77,8 +76,7 @@ namespace System.Web.UI.WebControls
                        child.SetParent (parent);
                        if (marked) {
                                ((IStateManager)child).TrackViewState ();
-                               child.SetDirty ();
-                               dirty = true;
+                               SetDirty ();
                        }
                }
 
@@ -98,8 +96,7 @@ namespace System.Web.UI.WebControls
                                ((MenuItem)items[n]).Index = n;
                        if (marked) {
                                ((IStateManager)child).TrackViewState ();
-                               child.SetDirty ();
-                               dirty = true;
+                               SetDirty ();
                        }
                }
                
@@ -112,7 +109,9 @@ namespace System.Web.UI.WebControls
                                }
                        }
                        items.Clear ();
-                       dirty = true;
+                       if (marked) {
+                               SetDirty ();
+                       }
                }
                
                public bool Contains (MenuItem child)
@@ -147,7 +146,9 @@ namespace System.Web.UI.WebControls
                        items.RemoveAt (i);
                        if (menu != null)
                                item.Menu = null;
-                       dirty = true;
+                       if (marked) {
+                               SetDirty ();
+                       }
                }
                
                public void RemoveAt (int index)
@@ -156,7 +157,9 @@ namespace System.Web.UI.WebControls
                        items.RemoveAt (index);
                        if (menu != null)
                                item.Menu = null;
-                       dirty = true;
+                       if (marked) {
+                               SetDirty ();
+                       }
                }
                
                public int Count {
@@ -194,6 +197,14 @@ namespace System.Web.UI.WebControls
                                                ((IStateManager) item).LoadViewState (ns);
                                }
                        }
+                       else {
+                               for (int n = 1; n < its.Length; n++) {
+                                       Pair pair = (Pair) its [n];
+                                       int oi = (int) pair.First;
+                                       MenuItem node = (MenuItem) items [oi];
+                                       ((IStateManager) node).LoadViewState (pair.Second);
+                               }
+                       }
                }
                
                object IStateManager.SaveViewState ()
@@ -202,13 +213,13 @@ namespace System.Web.UI.WebControls
                        bool hasData = false;
                        
                        if (dirty) {
-                               state = new object [items.Count + 1];
-                               state [0] = true;
-                               for (int n=0; n<items.Count; n++) {
-                                       MenuItem item = items[n] as MenuItem;
-                                       object ns = ((IStateManager)item).SaveViewState ();
-                                       if (ns != null) {
-                                               hasData = true;
+                               if (items.Count > 0) {
+                                       hasData = true;
+                                       state = new object [items.Count + 1];
+                                       state [0] = true;
+                                       for (int n = 0; n < items.Count; n++) {
+                                               MenuItem item = items [n] as MenuItem;
+                                               object ns = ((IStateManager) item).SaveViewState ();
                                                state [n + 1] = ns;
                                        }
                                }
@@ -247,4 +258,3 @@ namespace System.Web.UI.WebControls
        }
 }
 
-#endif