diff options
author | Simeon Andreev | 2021-12-30 09:49:48 +0000 |
---|---|---|
committer | Andrey Loskutov | 2021-12-30 12:09:35 +0000 |
commit | 36a19c2665f8904413882f09d48876ad6f1fab16 (patch) | |
tree | 2babaf58a3dbdfcc8eafbf9a580fb6be834f4e1b | |
parent | 9fd3b966e6704f308406262d75ab87bc5a057785 (diff) | |
download | eclipse.platform.text-36a19c2665f8904413882f09d48876ad6f1fab16.tar.gz eclipse.platform.text-36a19c2665f8904413882f09d48876ad6f1fab16.tar.xz eclipse.platform.text-36a19c2665f8904413882f09d48876ad6f1fab16.zip |
Bug 577993 - SWT disposed exception in DiffPainterY20220107-0600Y20220106-0600Y20220105-0600Y20220104-0600Y20220103-0600Y20220102-0600Y20220101-0600Y20211231-0600S4_23_0_M1I20220106-0000I20220105-1800I20220105-0600I20220104-1800I20220104-0940I20220104-0600I20220103-1800I20220103-0600I20220102-1800I20220102-0600I20220101-1800I20220101-1140I20220101-0600I20211231-1800I20211230-1800
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.java | 9 |
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(); + } } /** |