Browse Source

Fixed SD2-1248: Adding many warnings in the current file to the error drawer takes a long time - do not refresh text editor after each individual error/warning

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.1@2358 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 19 years ago
parent
commit
b74d53be68
  1. 2
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextEditorControlBase.cs
  2. 28
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/ErrorDrawer.cs

2
src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextEditorControlBase.cs

@ -707,7 +707,7 @@ namespace ICSharpCode.TextEditor
} }
/// <remarks> /// <remarks>
/// Overwritten refresh method that locks if the control is in /// Overwritten refresh method that does nothing if the control is in
/// an update cycle. /// an update cycle.
/// </remarks> /// </remarks>
public override void Refresh() public override void Refresh()

28
src/Main/Base/Project/Src/TextEditor/Gui/Editor/ErrorDrawer.cs

@ -49,12 +49,31 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
TaskService.Added += new TaskEventHandler(OnAdded); TaskService.Added += new TaskEventHandler(OnAdded);
TaskService.Removed += new TaskEventHandler(OnRemoved); TaskService.Removed += new TaskEventHandler(OnRemoved);
TaskService.Cleared += new EventHandler(OnCleared); TaskService.Cleared += new EventHandler(OnCleared);
TaskService.InUpdateChanged += OnInUpdateChanged;
textEditor.FileNameChanged += new EventHandler(SetErrors); textEditor.FileNameChanged += new EventHandler(SetErrors);
DebuggerService.DebugStarted += OnDebugStarted; DebuggerService.DebugStarted += OnDebugStarted;
DebuggerService.DebugStopped += OnDebugStopped; DebuggerService.DebugStopped += OnDebugStopped;
} }
bool isDisposed; bool isDisposed;
bool requireTextEditorRefresh;
void RefreshTextEditor()
{
if (TaskService.InUpdate) {
requireTextEditorRefresh = true;
} else {
textEditor.Refresh();
}
}
void OnInUpdateChanged(object sender, EventArgs e)
{
if (requireTextEditorRefresh) {
requireTextEditorRefresh = false;
textEditor.Refresh();
}
}
/// <summary> /// <summary>
/// Deregisters the event handlers so the error drawer (and associated TextEditorControl) /// Deregisters the event handlers so the error drawer (and associated TextEditorControl)
@ -68,6 +87,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
TaskService.Added -= new TaskEventHandler(OnAdded); TaskService.Added -= new TaskEventHandler(OnAdded);
TaskService.Removed -= new TaskEventHandler(OnRemoved); TaskService.Removed -= new TaskEventHandler(OnRemoved);
TaskService.Cleared -= new EventHandler(OnCleared); TaskService.Cleared -= new EventHandler(OnCleared);
TaskService.InUpdateChanged -= OnInUpdateChanged;
textEditor.FileNameChanged -= new EventHandler(SetErrors); textEditor.FileNameChanged -= new EventHandler(SetErrors);
DebuggerService.DebugStarted -= OnDebugStarted; DebuggerService.DebugStarted -= OnDebugStarted;
DebuggerService.DebugStopped -= OnDebugStopped; DebuggerService.DebugStopped -= OnDebugStopped;
@ -99,7 +119,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
VisualError ve = marker as VisualError; VisualError ve = marker as VisualError;
if (ve != null && ve.Task == t) { if (ve != null && ve.Task == t) {
textEditor.Document.MarkerStrategy.RemoveMarker(marker); textEditor.Document.MarkerStrategy.RemoveMarker(marker);
textEditor.Refresh(); RefreshTextEditor();
break; break;
} }
} }
@ -108,7 +128,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
void OnCleared(object sender, EventArgs e) void OnCleared(object sender, EventArgs e)
{ {
if (ClearErrors()) { if (ClearErrors()) {
textEditor.Refresh(); RefreshTextEditor();
} }
} }
@ -158,9 +178,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
length = 2; // use minimum length length = 2; // use minimum length
} }
textEditor.Document.MarkerStrategy.AddMarker(new VisualError(offset, length, task)); textEditor.Document.MarkerStrategy.AddMarker(new VisualError(offset, length, task));
if (refresh) { if (refresh) RefreshTextEditor();
textEditor.Refresh();
}
} }
} }

Loading…
Cancel
Save