From 10b427cfaffa3a83ac87525f4e214873dacb4ec6 Mon Sep 17 00:00:00 2001
From: Matt Ward <ward.matt@gmail.com>
Date: Sun, 28 Nov 2010 19:09:32 +0000
Subject: [PATCH] Fix SD-1657 - Grid adorner - File no longer marked as dirty
 when just moving the mouse over the column header.

---
 .../Project/Controls/GridAdorner.cs           | 39 ++++++++++---------
 1 file changed, 21 insertions(+), 18 deletions(-)

diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/GridAdorner.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/GridAdorner.cs
index 53aee95b0e..23a5f166ae 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/GridAdorner.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/GridAdorner.cs
@@ -433,34 +433,37 @@ namespace ICSharpCode.WpfDesign.Designer.Controls
 		public void SetGridLengthUnit(GridUnitType unit)
 		{
 			DesignItem item = unitSelector.SelectedItem;
-			GridLength value;
-			
 			grid.UpdateLayout();
 			
 			Debug.Assert(item != null);
 			
 			if (orientation == Orientation.Vertical) {
-				value = (GridLength)item.Properties[RowDefinition.HeightProperty].ValueOnInstance;
-
-				if (unit == GridUnitType.Auto)
-					value = GridLength.Auto;
-				else
-					value = new GridLength(value.Value, unit);
-
-				item.Properties[RowDefinition.HeightProperty].SetValue(value);
+				SetGridLengthUnit(unit, item, RowDefinition.HeightProperty);
 			} else {
-				value = (GridLength)item.Properties[ColumnDefinition.WidthProperty].ValueOnInstance;
-
-				if (unit == GridUnitType.Auto)
-					value = GridLength.Auto;
-				else
-					value = new GridLength(value.Value, unit);
-
-				item.Properties[ColumnDefinition.WidthProperty].SetValue(value);
+				SetGridLengthUnit(unit, item, ColumnDefinition.WidthProperty);
 			}
 			grid.UpdateLayout();
 			InvalidateVisual();
 		}
+		
+		void SetGridLengthUnit(GridUnitType unit, DesignItem item, DependencyProperty property)
+		{
+			DesignItemProperty itemProperty = item.Properties[property];
+			GridLength oldValue = (GridLength)itemProperty.ValueOnInstance;
+			GridLength value = GetNewGridLength(unit, oldValue);
+			
+			if (value != oldValue) {
+				itemProperty.SetValue(value);
+			}
+		}
+		
+		GridLength GetNewGridLength(GridUnitType unit, GridLength oldValue)
+		{
+			if (unit == GridUnitType.Auto) {
+				return GridLength.Auto;
+			}
+			return new GridLength(oldValue.Value, unit);
+		}
 	}
 	
 	public abstract class GridSplitterAdorner : Control