diff --git a/src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs b/src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs index 108226d670..32d76fc767 100644 --- a/src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs +++ b/src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs @@ -136,6 +136,8 @@ namespace ICSharpCode.SharpDevelop.Gui #region label editing + string labelEditOldLabel; + public void StartLabelEdit(ExtTreeNode node) { if (node == null) { @@ -148,6 +150,10 @@ namespace ICSharpCode.SharpDevelop.Gui LabelEdit = true; node.BeforeLabelEdit(); node.BeginEdit(); + // remove node's label so that it doesn't get rendered behind the label editing textbox + // (if the user deletes some characters so that the text box shrinks) + labelEditOldLabel = node.Text; + node.Text = ""; } } @@ -173,10 +179,15 @@ namespace ICSharpCode.SharpDevelop.Gui e.CancelEdit = true; ExtTreeNode node = e.Node as ExtTreeNode; - if (node != null && e.Label != null) { - node.AfterLabelEdit(e.Label); + if (node != null) { + node.Text = labelEditOldLabel; + labelEditOldLabel = null; + if (e.Label != null) { + node.AfterLabelEdit(e.Label); + } } SortParentNodes(e.Node); + SelectedNode = e.Node; } private void SortParentNodes(TreeNode treeNode) diff --git a/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs b/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs index 17cf0bc676..f3fe644ffc 100644 --- a/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs +++ b/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs @@ -322,10 +322,13 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates StringParser.Parse(projectItem.Include) ); foreach (string metadataName in projectItem.MetadataNames) { - newProjectItem.SetEvaluatedMetadata( - StringParser.Parse(metadataName), - StringParser.Parse(projectItem.GetMetadata(metadataName)) - ); + string metadataValue = projectItem.GetMetadata(metadataName); + // if the input contains any special MSBuild sequences, don't escape the value + // we want to escape only when the special characters are introduced by the StringParser.Parse replacement + if (metadataValue.Contains("$(") || metadataValue.Contains("%")) + newProjectItem.SetMetadata(StringParser.Parse(metadataName), StringParser.Parse(metadataValue)); + else + newProjectItem.SetEvaluatedMetadata(StringParser.Parse(metadataName), StringParser.Parse(metadataValue)); } ((IProjectItemListProvider)project).AddProjectItem(newProjectItem); }