diff --git a/src/AddIns/Misc/HighlightingEditor/Project/Src/EditHighlightingPanel.cs b/src/AddIns/Misc/HighlightingEditor/Project/Src/EditHighlightingPanel.cs index 025a9a3f2f..98cc83ff9c 100644 --- a/src/AddIns/Misc/HighlightingEditor/Project/Src/EditHighlightingPanel.cs +++ b/src/AddIns/Misc/HighlightingEditor/Project/Src/EditHighlightingPanel.cs @@ -190,8 +190,13 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels DialogResult res = dlg.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainForm); if (res == DialogResult.OK) { - using (StreamWriter sw = new StreamWriter(item.FileName, false)) { - sw.WriteLine(item.Node.ToXml().Replace("\n", "\r\n")); + using (XmlTextWriter writer = new XmlTextWriter(item.FileName, Encoding.UTF8)) { + writer.Formatting = Formatting.Indented; + writer.IndentChar = '\t'; + writer.Indentation = 1; + writer.WriteStartDocument(); + item.Node.WriteXml(writer); + writer.WriteEndDocument(); } // refresh item text userList.Items.RemoveAt(userList.SelectedIndex); diff --git a/src/AddIns/Misc/HighlightingEditor/Project/Src/EditorHighlightColor.cs b/src/AddIns/Misc/HighlightingEditor/Project/Src/EditorHighlightColor.cs index 7221675bde..239ff26417 100644 --- a/src/AddIns/Misc/HighlightingEditor/Project/Src/EditorHighlightColor.cs +++ b/src/AddIns/Misc/HighlightingEditor/Project/Src/EditorHighlightColor.cs @@ -22,7 +22,7 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes { bool hasForeColor = false; bool hasBackColor = false; - + Color foreColor; bool sysForeColor = false; string sysForeColorName = ""; @@ -105,7 +105,7 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes el.Attributes["color"] == null && el.Attributes["bgcolor"] == null) { - noColor = true; + noColor = true; return; } @@ -146,6 +146,11 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes } } + public static EditorHighlightColor FromTextEditor(ICSharpCode.TextEditor.Document.HighlightColor color) + { + return new EditorHighlightColor(color.HasForgeground, color.Color, color.HasBackground, color.BackgroundColor, color.Bold, color.Italic); + } + public EditorHighlightColor(bool hascolor, Color Color, bool hasbackcolor, Color BackColor, bool bold, bool italic) { hasForeColor = hascolor; @@ -209,38 +214,30 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes return Color.FromArgb(a, r, g, b); } - public string ToXml() + public void WriteXmlAttributes(XmlWriter writer) { - string str = ""; - str += "bold=\"" + bold.ToString().ToLowerInvariant() + "\" "; - str += "italic=\"" + italic.ToString().ToLowerInvariant() + "\" "; + writer.WriteAttributeString("bold", bold.ToString().ToLowerInvariant()); + writer.WriteAttributeString("italic", italic.ToString().ToLowerInvariant()); if (hasForeColor) { - str += "color=\""; if (sysForeColor) { - str += "SystemColors." + sysForeColorName; + writer.WriteAttributeString("color", "SystemColors." + sysForeColorName); } else { - str += ReplaceColorName("#" + (foreColor.A != 255 ? foreColor.A.ToString("X2") : "") + - foreColor.R.ToString("X2") + - foreColor.G.ToString("X2") + - foreColor.B.ToString("X2")); + writer.WriteAttributeString("color", ReplaceColorName("#" + (foreColor.A != 255 ? foreColor.A.ToString("X2") : "") + + foreColor.R.ToString("X2") + + foreColor.G.ToString("X2") + + foreColor.B.ToString("X2"))); } - - str += "\" "; } if (hasBackColor) { - str += "bgcolor=\""; if (sysBackColor) { - str += "SystemColors." + sysBackColorName; + writer.WriteAttributeString("bgcolor", "SystemColors." + sysBackColorName); } else { - str += ReplaceColorName("#" + (backColor.A != 255 ? backColor.A.ToString("X2") : "") + - backColor.R.ToString("X2") + - backColor.G.ToString("X2") + - backColor.B.ToString("X2")); + writer.WriteAttributeString("bgcolor", ReplaceColorName("#" + (backColor.A != 255 ? backColor.A.ToString("X2") : "") + + backColor.R.ToString("X2") + + backColor.G.ToString("X2") + + backColor.B.ToString("X2"))); } - - str += "\" "; } - return str; } Color ParseSysColor(string colorName) diff --git a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/AbstractNode.cs b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/AbstractNode.cs index 6ad7a8f25f..a6e0e8c443 100644 --- a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/AbstractNode.cs +++ b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/AbstractNode.cs @@ -36,11 +36,6 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes public abstract void UpdateNodeText(); // should be made abstract when implementing ToXml() - public virtual string ToXml() { return ""; } - - public static string ReplaceXmlChars(string str) - { - return str.Replace("&", "&").Replace("<", "<").Replace(">", ">"); - } + public abstract void WriteXml(XmlWriter writer); } } diff --git a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/DigitsNode.cs b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/DigitsNode.cs index 6adc8452ee..d2eeae3d96 100644 --- a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/DigitsNode.cs +++ b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/DigitsNode.cs @@ -45,9 +45,12 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes { } - public override string ToXml() + public override void WriteXml(XmlWriter writer) { - return "\t\n\n"; + writer.WriteStartElement("Digits"); + writer.WriteAttributeString("name", "Digits"); + color.WriteXmlAttributes(writer); + writer.WriteEndElement(); } } diff --git a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/EnvironmentNode.cs b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/EnvironmentNode.cs index bd91669436..6b1f1e600c 100644 --- a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/EnvironmentNode.cs +++ b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/EnvironmentNode.cs @@ -7,6 +7,7 @@ using System; using System.Collections; +using System.Collections.Generic; using System.Windows.Forms; using System.Drawing; using System.Xml; @@ -26,8 +27,6 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes public EnvironmentNode(XmlElement el) { - - ArrayList envColors = new ArrayList(); ArrayList envColorNames = new ArrayList(); ArrayList envColorDescriptions = new ArrayList(); @@ -40,13 +39,22 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes } } } + + foreach (KeyValuePair pair in new DefaultHighlightingStrategy().EnvironmentColors) { + if (!envColorNames.Contains(pair.Key)) { + envColorNames.Add(pair.Key); + envColorDescriptions.Add("${res:Dialog.HighlightingEditor.EnvColors." + pair.Key + "}"); + envColors.Add(EditorHighlightColor.FromTextEditor(pair.Value)); + } + } + EnvironmentNode.ColorNames = (string[])envColorNames.ToArray(typeof(string)); this.ColorDescs = (string[])envColorDescriptions.ToArray(typeof(string)); this.Colors = (EditorHighlightColor[])envColors.ToArray(typeof(EditorHighlightColor)); StringParser.Parse(ColorDescs); Text = ResNodeName("EnvironmentColors"); - + panel = new EnvironmentOptionPanel(this); } @@ -54,14 +62,15 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes { } - public override string ToXml() + public override void WriteXml(XmlWriter writer) { - string str = "\t\n"; - for (int i = 0; i <= ColorNames.GetUpperBound(0); ++i) { - str += "\t\t<" + ColorNames[i] + " " + Colors[i].ToXml() + "/>\n"; + writer.WriteStartElement("Environment"); + for (int i = 0; i < ColorNames.Length; i++) { + writer.WriteStartElement(ColorNames[i]); + Colors[i].WriteXmlAttributes(writer); + writer.WriteEndElement(); } - str += "\t\n\n"; - return str; + writer.WriteEndElement(); } } diff --git a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/KeywordListNode.cs b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/KeywordListNode.cs index 4fd34fb144..4fea82c578 100644 --- a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/KeywordListNode.cs +++ b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/KeywordListNode.cs @@ -57,7 +57,7 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes { Text = ResNodeName("KeywordList"); panel = new KeywordListOptionPanel(this); - + if (el == null) return; color = new EditorHighlightColor(el); @@ -88,23 +88,17 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes if (name != "") Text = name; } - public override string ToXml() + public override void WriteXml(XmlWriter writer) { - StringBuilder ret = new StringBuilder("\t\t\t\n"; - ret.Append(color.ToXml()); - ret.Append(">\n"); + writer.WriteStartElement("KeyWords"); + writer.WriteAttributeString("name", name); + color.WriteXmlAttributes(writer); foreach(string str in words) { - ////ret += "\t\t\t\t\n"; - ret.Append("\t\t\t\t\n"); + writer.WriteStartElement("Key"); + writer.WriteAttributeString("word", str); + writer.WriteEndElement(); } - ////ret += "\t\t\t\n\n"; - ret.Append("\t\t\t\n\n"); - return ret.ToString(); + writer.WriteEndElement(); } } diff --git a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/KeywordListsNode.cs b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/KeywordListsNode.cs index ad07218879..6fe0fbe4d3 100644 --- a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/KeywordListsNode.cs +++ b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/KeywordListsNode.cs @@ -37,13 +37,11 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes { } - public override string ToXml() + public override void WriteXml(XmlWriter writer) { - string ret = ""; foreach (KeywordListNode node in Nodes) { - ret += node.ToXml(); + node.WriteXml(writer); } - return ret; } } diff --git a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/MarkerNode.cs b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/MarkerNode.cs index c724b23ffa..431cb84ce0 100644 --- a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/MarkerNode.cs +++ b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/MarkerNode.cs @@ -54,13 +54,13 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes Text = what; } - public override string ToXml() + public override void WriteXml(XmlWriter writer) { - string ret = "\t\t\t\n\n"; - return ret; + writer.WriteStartElement("Mark" + (previous ? "Previous" : "Following")); + color.WriteXmlAttributes(writer); + if (markMarker) writer.WriteAttributeString("markmarker", "true"); + writer.WriteString(what); + writer.WriteEndElement(); } public string What { diff --git a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/MarkersNode.cs b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/MarkersNode.cs index c2fd039309..9a9a19306f 100644 --- a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/MarkersNode.cs +++ b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/MarkersNode.cs @@ -36,13 +36,11 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes { } - public override string ToXml() + public override void WriteXml(XmlWriter writer) { - string ret = ""; foreach (MarkerNode node in Nodes) { - ret += node.ToXml(); + node.WriteXml(writer); } - return ret; } } diff --git a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/PropertiesNode.cs b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/PropertiesNode.cs index 2bebf70ac1..0cd1559b3f 100644 --- a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/PropertiesNode.cs +++ b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/PropertiesNode.cs @@ -33,20 +33,21 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes } } - + public override void UpdateNodeText() { } - public override string ToXml() + public override void WriteXml(XmlWriter writer) { - string ret = "\t\n"; + writer.WriteStartElement("Properties"); foreach (DictionaryEntry de in Properties) { - ret += "\t\t\n"; + writer.WriteStartElement("Property"); + writer.WriteAttributeString("name", (string)de.Key); + writer.WriteAttributeString("value", (string)de.Value); + writer.WriteEndElement(); } - ret += "\t\n\n"; - return ret; + writer.WriteEndElement(); } } @@ -55,7 +56,7 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes private System.Windows.Forms.Button addBtn; private System.Windows.Forms.Button editBtn; private System.Windows.Forms.Button removeBtn; - private System.Windows.Forms.ListView listView; + private System.Windows.Forms.ListView listView; public PropertiesOptionPanel(PropertiesNode parent) : base(parent) { @@ -70,7 +71,7 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes listView = (ListView)ControlDictionary["listView"]; } - + public override void StoreSettings() { PropertiesNode node = (PropertiesNode)parent; diff --git a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/RuleSetNode.cs b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/RuleSetNode.cs index 05f211b785..b81729b349 100644 --- a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/RuleSetNode.cs +++ b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/RuleSetNode.cs @@ -69,8 +69,8 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes Nodes.Add(keywordNode); Nodes.Add(spansNode); Nodes.Add(prevMarkerNode); - Nodes.Add(nextMarkerNode); - + Nodes.Add(nextMarkerNode); + } public RuleSetNode(string Name, string Delim, string Ref, bool noEsc, bool noCase) @@ -89,7 +89,7 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes Nodes.Add(keywordNode); Nodes.Add(spansNode); Nodes.Add(prevMarkerNode); - Nodes.Add(nextMarkerNode); + Nodes.Add(nextMarkerNode); panel = new RuleSetOptionPanel(this); } @@ -101,25 +101,25 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes } } - public override string ToXml() + public override void WriteXml(XmlWriter writer) { - if (reference != "") return "\t\t\n\n"; - - string ret = "\t\t\n\n"; - - ret += spansNode.ToXml(); - ret += prevMarkerNode.ToXml(); - ret += nextMarkerNode.ToXml(); - ret += keywordNode.ToXml(); - - ret += "\t\t\n\n"; - - return ret; + writer.WriteStartElement("RuleSet"); + if (!isRoot) + writer.WriteAttributeString("name", name); + if (reference != "") { + writer.WriteAttributeString("reference", reference); + } else { + writer.WriteAttributeString("ignorecase", ignoreCase.ToString().ToLowerInvariant()); + if (noEscapeSequences) + writer.WriteAttributeString("noescapesequences", "true"); + if (delimiters != "") + writer.WriteElementString("Delimiters", delimiters); + spansNode.WriteXml(writer); + prevMarkerNode.WriteXml(writer); + nextMarkerNode.WriteXml(writer); + keywordNode.WriteXml(writer); + } + writer.WriteEndElement(); } public string Delimiters { diff --git a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/RuleSetsNode.cs b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/RuleSetsNode.cs index 70778f6941..8530c34a30 100644 --- a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/RuleSetsNode.cs +++ b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/RuleSetsNode.cs @@ -35,14 +35,13 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes { } - public override string ToXml() + public override void WriteXml(XmlWriter writer) { - string ret = "\t\n"; + writer.WriteStartElement("RuleSets"); foreach (RuleSetNode node in Nodes) { - ret += node.ToXml(); + node.WriteXml(writer); } - ret += "\t\n\n"; - return ret; + writer.WriteEndElement(); } } diff --git a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/SchemeNode.cs b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/SchemeNode.cs index 31b8c8169c..4755c30986 100644 --- a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/SchemeNode.cs +++ b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/SchemeNode.cs @@ -18,11 +18,21 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes { string name; string[] extensions; + string extends; + + public string Extends { + get { + return extends; + } + set { + extends = value; + } + } public string[] Extensions { get { return extensions; - } + } set { extensions = value; } @@ -60,6 +70,8 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes extensions = el.Attributes["extensions"].InnerText.Split('|'); } + extends = el.GetAttribute("extends"); + UpdateNodeText(); panel = new SchemeOptionPanel(this); @@ -82,23 +94,23 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes Text = name; } - public override string ToXml() + public override void WriteXml(XmlWriter writer) { - string str = - "\n" + - "\n\n" + - "\n\n"; + writer.WriteComment("This file was autogenerated by the #Develop highlighting editor."); + writer.WriteStartElement("SyntaxDefinition"); - str += envNode.ToXml(); - str += propNode.ToXml(); - str += digitsNode.ToXml(); - str += rulesetsNode.ToXml(); - - str += - "\n"; + writer.WriteAttributeString("name", name); + writer.WriteAttributeString("extensions", String.Join(";", extensions)); + if (extends != "") { + writer.WriteAttributeString("extends", extends); + } - return str; - + envNode.WriteXml(writer); + propNode.WriteXml(writer); + digitsNode.WriteXml(writer); + rulesetsNode.WriteXml(writer); + + writer.WriteEndElement(); } } diff --git a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/SpanNode.cs b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/SpanNode.cs index d701af5ad4..50a338f793 100644 --- a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/SpanNode.cs +++ b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/SpanNode.cs @@ -59,27 +59,32 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes } - public override string ToXml() + public override void WriteXml(XmlWriter writer) { - string ret = ""; - ret = "\t\t\t\n"; + writer.WriteStartElement("Begin"); + if (beginColor != null && !beginColor.NoColor) + beginColor.WriteXmlAttributes(writer); + writer.WriteString(begin); + writer.WriteEndElement(); if (end != "") { - ret += "\t\t\t\t\n"; + writer.WriteStartElement("End"); + if (endColor != null && !endColor.NoColor) + endColor.WriteXmlAttributes(writer); + writer.WriteString(end); + writer.WriteEndElement(); } - ret += "\t\t\t\n\n"; - return ret; + + writer.WriteEndElement(); } public SpanNode(string Name) @@ -91,6 +96,7 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes panel = new SpanOptionPanel(this); } + public override void UpdateNodeText() { if (name != "") { Text = name; return; } @@ -121,7 +127,7 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes } public EditorHighlightColor BeginColor { - get { + get { return beginColor; } set { diff --git a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/SpansNode.cs b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/SpansNode.cs index 0bdc0b816e..c167ae1a5b 100644 --- a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/SpansNode.cs +++ b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/SpansNode.cs @@ -35,13 +35,11 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes { } - public override string ToXml() + public override void WriteXml(XmlWriter writer) { - string ret = ""; foreach (SpanNode node in Nodes) { - ret += node.ToXml(); + node.WriteXml(writer); } - return ret; } } diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/DefaultHighlightingStrategy.cs b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/DefaultHighlightingStrategy.cs index 9f3027a1dc..6aefaf96b0 100644 --- a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/DefaultHighlightingStrategy.cs +++ b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/DefaultHighlightingStrategy.cs @@ -24,6 +24,14 @@ namespace ICSharpCode.TextEditor.Document List rules = new List(); Dictionary environmentColors = new Dictionary(); + + public IEnumerable> EnvironmentColors { + get { + return environmentColors; + } + } + + Dictionary properties = new Dictionary(); string[] extensions; diff --git a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceWindow.cs b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceWindow.cs index 0a508fbba3..6aecd4c068 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceWindow.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceWindow.cs @@ -386,6 +386,10 @@ namespace ICSharpCode.SharpDevelop.Gui public virtual void OnWindowSelected(EventArgs e) { + if (viewTabControl != null) { + TabPage page = viewTabControl.TabPages[viewTabControl.TabIndex]; + if (page.Controls.Count == 1 && !page.ContainsFocus) page.Controls[0].Focus(); + } if (WindowSelected != null) { WindowSelected(this, e); }