diff options
author | Alan McGovern <alan.mcgovern@gmail.com> | 2011-10-19 13:47:59 +0400 |
---|---|---|
committer | Alan McGovern <alan.mcgovern@gmail.com> | 2011-10-19 14:35:56 +0400 |
commit | e743d70ee1b25ea58865bd356a1c827913b8bfd1 (patch) | |
tree | a9a97cb0c7e8a30869bdc3f830b24fa6c339d2dc /main/src/addins/MonoDevelop.MacDev | |
parent | 0b9bf74a3e2f7466120253c724085a4e70a9c1a4 (diff) |
[MacDev] Set and unset PObject.Parent appropriately
Ensure we clear the parent when the object is removed.
Diffstat (limited to 'main/src/addins/MonoDevelop.MacDev')
-rw-r--r-- | main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/CustomPropertiesWidget.cs | 14 | ||||
-rw-r--r-- | main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/PListObject.cs | 25 |
2 files changed, 20 insertions, 19 deletions
diff --git a/main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/CustomPropertiesWidget.cs b/main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/CustomPropertiesWidget.cs index c93e95c4a0..5cef2a7115 100644 --- a/main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/CustomPropertiesWidget.cs +++ b/main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/CustomPropertiesWidget.cs @@ -276,12 +276,7 @@ namespace MonoDevelop.MacDev.PlistEditor var key = scheme.Keys.FirstOrDefault (k => k.Identifier == args.NewText || k.Description == args.NewText); var newKey = key != null ? key.Identifier : args.NewText; - if (!dict.ChangeKey (obj, newKey)) - return; - - treeStore.SetValue (selIter, 0, newKey); - if (key != null) - obj.Replace (CreateNewObject (key.Type)); + dict.ChangeKey (obj, newKey, key == null || obj.TypeString == key.Type ? null : CreateNewObject (key.Type)); }; var col = new TreeViewColumn (); col.Resizable = true; @@ -387,11 +382,8 @@ namespace MonoDevelop.MacDev.PlistEditor return; PObject oldObj = (PObject)treeStore.GetValue (selIter, 1); - if (oldObj == null) - return; - var newObj = CreateNewObject (args.NewText); - - oldObj.Replace (newObj); + if (oldObj != null && oldObj.TypeString != args.NewText) + oldObj.Replace (CreateNewObject (args.NewText)); }; treeview1.AppendColumn (GettextCatalog.GetString ("Type"), comboRenderer, delegate(TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter) { diff --git a/main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/PListObject.cs b/main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/PListObject.cs index 2b27f40b46..6c81aeab13 100644 --- a/main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/PListObject.cs +++ b/main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/PListObject.cs @@ -59,7 +59,7 @@ namespace MonoDevelop.MacDev.PlistEditor return parent; } set { - if (parent != null) + if (parent != null && value != null) throw new NotSupportedException ("Already parented."); this.parent = value; } @@ -250,7 +250,6 @@ namespace MonoDevelop.MacDev.PlistEditor order.Add (key); dict[key] = value; - value.Parent = this; if (exists) OnRemoved (new PObjectEventArgs (existing)); @@ -262,6 +261,7 @@ namespace MonoDevelop.MacDev.PlistEditor protected virtual void OnAdded (PObjectEventArgs e) { + e.PObject.Parent = this; var handler = this.Added; if (handler != null) handler (this, e); @@ -272,7 +272,6 @@ namespace MonoDevelop.MacDev.PlistEditor { dict.Add (key, value); order.Add (key); - value.Parent = this; OnAdded (new PObjectEventArgs (value)); } @@ -280,7 +279,6 @@ namespace MonoDevelop.MacDev.PlistEditor { dict.Add (key, value); order.Insert (order.IndexOf (keyBefore) + 1, key); - value.Parent = this; OnAdded (new PObjectEventArgs (value)); } @@ -320,6 +318,7 @@ namespace MonoDevelop.MacDev.PlistEditor protected virtual void OnRemoved (PObjectEventArgs e) { + e.PObject.Parent = null; var handler = this.Removed; if (handler != null) handler (this, e); @@ -340,14 +339,24 @@ namespace MonoDevelop.MacDev.PlistEditor public bool ChangeKey (PObject obj, string newKey) { + return ChangeKey (obj, newKey, null); + } + + public bool ChangeKey (PObject obj, string newKey, PObject newValue) + { var oldkey = GetKey (obj); if (oldkey == null || dict.ContainsKey (newKey)) return false; dict.Remove (oldkey); - dict.Add (newKey, obj); + dict.Add (newKey, newValue ?? obj); order[order.IndexOf (oldkey)] = newKey; - OnChanged (EventArgs.Empty); + if (newValue != null) { + OnRemoved (new PObjectEventArgs (obj)); + OnAdded (new PObjectEventArgs (newValue)); + } else { + OnChanged (EventArgs.Empty); + } return true; } @@ -567,6 +576,7 @@ namespace MonoDevelop.MacDev.PlistEditor protected virtual void OnAdded (PObjectEventArgs e) { + e.PObject.Parent = this; if (SuppressChangeEvents) return; @@ -611,7 +621,6 @@ namespace MonoDevelop.MacDev.PlistEditor public void Add (PObject obj) { - obj.Parent = this; list.Add (obj); OnAdded (new PObjectEventArgs (obj)); } @@ -620,7 +629,6 @@ namespace MonoDevelop.MacDev.PlistEditor { for (int i = 0; i < Count; i++) { if (list[i] == oldObj) { - newObject.Parent = this; list[i] = newObject; OnRemoved (new PObjectEventArgs (oldObj)); OnAdded (new PObjectEventArgs (newObject)); @@ -633,6 +641,7 @@ namespace MonoDevelop.MacDev.PlistEditor protected virtual void OnRemoved (PObjectEventArgs e) { + e.PObject.Parent = null; if (SuppressChangeEvents) return; |