Author: gert
Date: 2007-01-05 15:05:57 -0500 (Fri, 05 Jan 2007)
New Revision: 70555

Modified:
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Control.cs
   trunk/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ChangeLog
   
trunk/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ControlTest.cs
Log:
* Control.cs: Lazy init layout engine. Do not directly use
layout_engine since LayoutEngine may be overridden (on 2.0 profile).
* ControlTest.cs: Added test for bug #80456.


Modified: trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog        
2007-01-05 19:51:42 UTC (rev 70554)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog        
2007-01-05 20:05:57 UTC (rev 70555)
@@ -1,3 +1,8 @@
+2007-01-05  Gert Driesen  <[EMAIL PROTECTED]>
+
+       * Control.cs: Lazy init layout engine. Do not directly use 
+       layout_engine since LayoutEngine may be overridden (on 2.0 profile).
+
 2007-01-05  Chris Toshok  <[EMAIL PROTECTED]>
 
        * DataGrid.cs: don't forceably rebind columns in SetDataSource

Modified: trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Control.cs
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Control.cs       
2007-01-05 19:51:42 UTC (rev 70554)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Control.cs       
2007-01-05 20:05:57 UTC (rev 70555)
@@ -872,9 +872,6 @@
                        tab_stop = true;
                        ime_mode = ImeMode.Inherit;
 
-                       layout_engine = this.LayoutEngine;
-                       if (layout_engine == null)
-                               layout_engine = new Layout.DefaultLayout ();
 #if NET_2_0
                        backgroundimage_layout = ImageLayout.Tile;
                        use_compatible_text_rendering = 
Application.use_compatible_text_rendering;
@@ -2510,8 +2507,12 @@
                public virtual
 #endif
                Layout.LayoutEngine LayoutEngine {
-                       get { return new Layout.DefaultLayout (); }
-               } 
+                       get {
+                               if (layout_engine == null)
+                                       layout_engine = new 
Layout.DefaultLayout ();
+                               return layout_engine;
+                       }
+               }
 
                [EditorBrowsable(EditorBrowsableState.Always)]
                [Browsable(false)]
@@ -4927,7 +4928,7 @@
                        if (eh != null)
                                eh (this, levent);
 
-                       layout_engine.Layout (this, levent);
+                       LayoutEngine.Layout (this, levent);
                }
 
                [EditorBrowsable(EditorBrowsableState.Advanced)]

Modified: 
trunk/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ChangeLog
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ChangeLog   
2007-01-05 19:51:42 UTC (rev 70554)
+++ trunk/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ChangeLog   
2007-01-05 20:05:57 UTC (rev 70555)
@@ -1,3 +1,7 @@
+2007-01-05  Gert Driesen  <[EMAIL PROTECTED]>
+
+       * ControlTest.cs: Added test for bug #80456.
+
 2007-01-05  Jonathan Pobst  <[EMAIL PROTECTED]>
 
        * ControlPropertyEventsTest.cs: Added.  These test property getters and

Modified: 
trunk/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ControlTest.cs
===================================================================
--- 
trunk/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ControlTest.cs  
    2007-01-05 19:51:42 UTC (rev 70554)
+++ 
trunk/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ControlTest.cs  
    2007-01-05 20:05:57 UTC (rev 70555)
@@ -13,6 +13,9 @@
 using System.Runtime.Remoting;
 using System.Threading;
 using System.Windows.Forms;
+#if NET_2_0
+using System.Windows.Forms.Layout;
+#endif
 
 using NUnit.Framework;
 
@@ -1806,4 +1809,94 @@
                        }
                }
        }
+
+#if NET_2_0
+       [TestFixture]
+       public class ControlLayoutTest
+       {
+               [Test]
+               public void SetUp ()
+               {
+                       _layoutCount = 0;
+               }
+
+               [Test] // bug #80456
+               public void LayoutTest ()
+               {
+                       MockLayoutEngine layoutEngine = new MockLayoutEngine ();
+                       MockControl c = new MockControl (layoutEngine);
+                       c.Layout += new LayoutEventHandler (LayoutEvent);
+                       Assert.IsFalse (layoutEngine.LayoutInvoked, "#A1");
+                       Assert.AreEqual (0, _layoutCount, "#A2");
+                       c.PerformLayout ();
+                       Assert.IsTrue (layoutEngine.LayoutInvoked, "#A3");
+                       Assert.AreEqual (1, _layoutCount, "#A4");
+
+                       layoutEngine.Reset ();
+                       c.OverrideOnLayout = true;
+                       Assert.IsFalse (layoutEngine.LayoutInvoked, "#B1");
+                       c.PerformLayout ();
+                       Assert.IsFalse (layoutEngine.LayoutInvoked, "#B2");
+                       Assert.AreEqual (1, _layoutCount, "#B3");
+               }
+
+               void LayoutEvent (object sender, LayoutEventArgs e)
+               {
+                       _layoutCount++;
+               }
+
+               private int _layoutCount;
+
+               class MockControl : Control
+               {
+                       public MockControl (LayoutEngine layoutEngine)
+                       {
+                               _layoutEngine = layoutEngine;
+                       }
+
+                       public bool OverrideOnLayout
+                       {
+                               get { return _overrideOnLayout; }
+                               set { _overrideOnLayout = value; }
+                       }
+
+                       protected override void OnLayout (LayoutEventArgs 
levent)
+                       {
+                               if (!OverrideOnLayout)
+                                       base.OnLayout (levent);
+                       }
+
+                       public override LayoutEngine LayoutEngine {
+                               get {
+                                       if (_layoutEngine == null)
+                                               return base.LayoutEngine;
+                                       return _layoutEngine;
+                               }
+                       }
+
+                       private bool _overrideOnLayout;
+                       private LayoutEngine _layoutEngine;
+               }
+
+               class MockLayoutEngine : LayoutEngine
+               {
+                       public bool LayoutInvoked {
+                               get { return _layoutInvoked; }
+                       }
+
+                       public void Reset ()
+                       {
+                               _layoutInvoked = false;
+                       }
+
+                       public override bool Layout (object container, 
LayoutEventArgs args)
+                       {
+                               _layoutInvoked = true;
+                               return true;
+                       }
+
+                       private bool _layoutInvoked;
+               }
+       }
+#endif
 }

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to