Bug 534930 - [code mining] Inlined annotation is not drawn when
StyledText is resized

Change-Id: Ib97f2f6ca0f03c50259686ef674eefa9df710330
Signed-off-by: angelozerr <angelo.zerr@gmail.com>
diff --git a/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/InlinedAnnotationSupport.java b/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/InlinedAnnotationSupport.java
index f5c43be..6ef638b 100644
--- a/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/InlinedAnnotationSupport.java
+++ b/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/InlinedAnnotationSupport.java
@@ -23,6 +23,8 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.StyleRange;
 import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.events.ControlEvent;
+import org.eclipse.swt.events.ControlListener;
 import org.eclipse.swt.events.MouseEvent;
 import org.eclipse.swt.events.MouseListener;
 import org.eclipse.swt.events.MouseMoveListener;
@@ -126,17 +128,17 @@
 	 * Class to track start/end offset of visible lines.
 	 *
 	 */
-	private class VisibleLines implements IViewportListener, IDocumentListener {
+	private class VisibleLines implements IViewportListener, IDocumentListener, ControlListener {
 
 		private int startOffset;
 
 		private Integer endOffset;
 
 		public VisibleLines() {
+			install();
 			fViewer.getTextWidget().getDisplay().asyncExec(() -> {
 				compute();
 			});
-			fViewer.getDocument().addDocumentListener(this);
 		}
 
 		@Override
@@ -154,6 +156,16 @@
 			// Do nothing
 		}
 
+		@Override
+		public void controlMoved(ControlEvent e) {
+			// Do nothing
+		}
+
+		@Override
+		public void controlResized(ControlEvent e) {
+			compute();
+		}
+
 		@SuppressWarnings("boxing")
 		private void compute() {
 			startOffset= getInclusiveTopIndexStartOffset();
@@ -225,10 +237,22 @@
 		 * Uninstall visible lines
 		 */
 		void uninstall() {
-			if (fViewer != null && fViewer.getDocument() != null) {
-				fViewer.getDocument().removeDocumentListener(this);
+			if (fViewer != null) {
+				fViewer.removeViewportListener(this);
+				if (fViewer.getDocument() != null) {
+					fViewer.getDocument().removeDocumentListener(this);
+				}
+				if (fViewer.getTextWidget() != null) {
+					fViewer.getTextWidget().removeControlListener(this);
+				}
 			}
 		}
+
+		void install() {
+			fViewer.addViewportListener(this);
+			fViewer.getDocument().addDocumentListener(this);
+			fViewer.getTextWidget().addControlListener(this);
+		}
 	}
 
 	private class MouseTracker implements MouseMoveListener, MouseListener {
@@ -329,7 +353,6 @@
 			((ITextViewerExtension4) fViewer).addTextPresentationListener(updateStylesWidth);
 		}
 		visibleLines= new VisibleLines();
-		fViewer.addViewportListener(visibleLines);
 		text.addMouseListener(fMouseTracker);
 		text.addMouseMoveListener(fMouseTracker);
 		setColor(text.getDisplay().getSystemColor(SWT.COLOR_DARK_GRAY));
@@ -365,7 +388,6 @@
 			if (fViewer instanceof ITextViewerExtension4) {
 				((ITextViewerExtension4) fViewer).removeTextPresentationListener(updateStylesWidth);
 			}
-			fViewer.removeViewportListener(visibleLines);
 		}
 		if (visibleLines != null) {
 			visibleLines.uninstall();