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