Browse Source

DynamicList: prevent recursive OnPaint calls, which could happen if a control was added/removed from the list. This could result in an unusable textbox control when trying to edit a value in a debugger tooltip.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2951 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 18 years ago
parent
commit
7ffbf02529
  1. 25
      src/Main/ICSharpCode.SharpDevelop.Widgets/Project/TreeGrid/DynamicList.cs

25
src/Main/ICSharpCode.SharpDevelop.Widgets/Project/TreeGrid/DynamicList.cs

@ -254,9 +254,27 @@ namespace ICSharpCode.SharpDevelop.Widgets.TreeGrid @@ -254,9 +254,27 @@ namespace ICSharpCode.SharpDevelop.Widgets.TreeGrid
}
}
bool inOnPaint;
protected override void OnPaint(PaintEventArgs e)
{
//Debug.WriteLine("OnPaint");
if (inOnPaint) {
Debug.WriteLine("Prevent nested OnPaint call");
base.OnPaint(e);
return;
}
inOnPaint = true;
try {
DoPaint(e);
base.OnPaint(e);
} finally {
inOnPaint = false;
}
}
void DoPaint(PaintEventArgs e)
{
Debug.WriteLine("DynamicList.DoPaint");
Graphics g = e.Graphics;
allowedControls.Clear();
@ -337,13 +355,12 @@ namespace ICSharpCode.SharpDevelop.Widgets.TreeGrid @@ -337,13 +355,12 @@ namespace ICSharpCode.SharpDevelop.Widgets.TreeGrid
removedControls.Add(ctl);
}
foreach (Control ctl in removedControls) {
Debug.WriteLine("Removing control");
Debug.WriteLine("DynamicList Removing control");
Controls.Remove(ctl);
Debug.WriteLine("Control removed");
Debug.WriteLine("DynamicList Control removed");
}
allowedControls.Clear();
removedControls.Clear();
base.OnPaint(e);
}
/// <summary>

Loading…
Cancel
Save