Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimeon Andreev2021-12-30 09:49:48 +0000
committerAndrey Loskutov2021-12-30 12:09:35 +0000
commit36a19c2665f8904413882f09d48876ad6f1fab16 (patch)
tree2babaf58a3dbdfcc8eafbf9a580fb6be834f4e1b
parent9fd3b966e6704f308406262d75ab87bc5a057785 (diff)
downloadeclipse.platform.text-36a19c2665f8904413882f09d48876ad6f1fab16.tar.gz
eclipse.platform.text-36a19c2665f8904413882f09d48876ad6f1fab16.tar.xz
eclipse.platform.text-36a19c2665f8904413882f09d48876ad6f1fab16.zip
This change ensures no disposed exceptions are thrown by DiffPainter.postRedraw(), in case an editor is closed before the postRedraw() is finished. Change-Id: I1d3b4804243814c6ce0e7d0f51efdaf093a34430 Signed-off-by: Simeon Andreev <simeon.danailov.andreev@gmail.com> Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.text/+/189211 Tested-by: Platform Bot <platform-bot@eclipse.org> Reviewed-by: Andrey Loskutov <loskutov@gmx.de>
-rw-r--r--org.eclipse.jface.text/src/org/eclipse/jface/internal/text/source/DiffPainter.java9
1 files changed, 7 insertions, 2 deletions
diff --git a/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/source/DiffPainter.java b/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/source/DiffPainter.java
index 00b0414f174..05b2e1476cd 100644
--- a/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/source/DiffPainter.java
+++ b/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/source/DiffPainter.java
@@ -63,6 +63,8 @@ public final class DiffPainter {
private CompositeRuler fParentRuler;
/** The column's control, typically a {@link Canvas}, possibly <code>null</code>. */
private Control fControl;
+ /** Display on which to post async runnables. */
+ private Display fDisplay;
/** The text viewer that the column is attached to. */
private ITextViewer fViewer;
/** The viewer's text widget. */
@@ -179,6 +181,7 @@ public final class DiffPainter {
return;
fControl.addDisposeListener(e -> handleDispose());
+ fDisplay= fControl.getDisplay();
}
/**
@@ -356,7 +359,7 @@ public final class DiffPainter {
*/
private final void postRedraw() {
if (isConnected() && !fControl.isDisposed()) {
- Display d= fControl.getDisplay();
+ Display d= fDisplay;
if (d != null) {
d.asyncExec(this::redraw);
}
@@ -367,7 +370,9 @@ public final class DiffPainter {
* Triggers redrawing of the column.
*/
private void redraw() {
- fColumn.redraw();
+ if (!fControl.isDisposed()) {
+ fColumn.redraw();
+ }
}
/**

Back to the top